Excel Inhalte kopieren

  • Ich möchte den Wert aus einer Zelle kopieren und nicht die Formel. In der Zelle "B1" soll der Inhalt der Zelle "A1" stehen und nicht die Summenformel.

    Hier ein Beispiel:

    Spoiler anzeigen
    [autoit]


    #include "Excel.au3"

    [/autoit] [autoit][/autoit] [autoit]

    $oExcel = _ExcelBookNew(1) ;Create new book, make it visible

    [/autoit] [autoit][/autoit] [autoit]

    ; Werte eintragen und Zellen farbig markieren
    For $i = 2 To 56
    _ExcelWriteCell($oExcel, "1234", $i-1)
    $oExcel.Cells($i, 1).Interior.ColorIndex = $i
    Next
    _ExcelWriteCell($oExcel, "=Summe(A2:A4)", 1)

    [/autoit] [autoit][/autoit] [autoit]

    ; Fenster fixieren
    $oExcel.Activesheet.Range("A2").Select
    $oExcel.ActiveWindow.FreezePanes = True

    [/autoit] [autoit][/autoit] [autoit]

    ; Bereich kopieren

    [/autoit] [autoit][/autoit] [autoit]

    ;~ $oExcel.ActiveSheet.Range("A1").CurrentRegion.SpecialCells('xlCellTypeVisible').Copy
    $oExcel.ActiveSheet.Range("A1:A3").Copy
    $oExcel.ActiveSheet.Range("B1").PasteSpecial('xlPasteValues')
    $oExcel.CutCopyMode = False

    [/autoit] [autoit][/autoit] [autoit]

    ; === letzte Zeile Danke BugFix
    ConsoleWrite('Anzahl Zeilen: ' & $oExcel.ActiveSheet.UsedRange.Rows.Count & @CRLF)
    ; === letzte Spalte
    ConsoleWrite('Anzahl Spalten: ' & $oExcel.ActiveSheet.UsedRange.Columns.Count & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ _ExcelBookSaveAs($oExcel, @ScriptDir & "\testTest.xls", "xls", 0, 1)
    MsgBox(0, "Z=" & $oExcel.ActiveSheet.UsedRange.Rows.Count & " S=" & $oExcel.ActiveSheet.UsedRange.Columns.Count, "ich habe fertig!")
    _ExcelBookClose($oExcel)

    [/autoit]

    Gruß Paule

    Einmal editiert, zuletzt von Paule (6. Juni 2010 um 21:21)

    • Offizieller Beitrag

    Du mußt beim Einfügen per Flag festlegen ob Formel oder Wert eingefügt wird. Du hast richtigerweise 'xlPasteValues' verwendet - aber als String! Hier mußt du natürlich den Wert der Konstanten einfügen ( $xlPasteValues = 0xFFFFEFBD ).
    Die Konstanten bekommst du, wenn du in Excel den VBA-Editor öffnest (Alt+F11) und dort den Objektkatalog öffnest (in der Rebar das Symbol, wie ein Pappkarton mit bunten Fetzen drüber ;) ). Dann einfach in das Suchfeld den Namen der Konstanten eingeben.
    In der Range-Auswahl hast du noch einen Fehler - du kopierst A1:A3. Das kannst du natürlich nicht in eine Zelle einfügen.
    So sollte es funktionieren:

    [autoit]


    Local Const $xlPasteValues = 0xFFFFEFBD
    $oExcel.ActiveSheet.Range("A1").Copy
    $oExcel.ActiveSheet.Range("B1").PasteSpecial($xlPasteValues)

    [/autoit]
  • Danke BugFix. Der Zusammenhang, dass die Anweisung 'xlPasteValues' eine Variable ist, die man setzen muss habe ich nicht durchschaut.
    Die Kopieraktion ist aber richtig. Ich kopiere eine Bereich ab (nicht in) einer bestimmten Zelle. Man braucht nicht den Zielbereich angeben,

  • [autoit]


    For $i = 2 To 56
    _ExcelWriteCell($oExcel, "1234", $i-1)
    $oExcel.Cells($i, 1).Interior.ColorIndex = $i

    [/autoit]

    Kann mir einer diese Schleife erklären?


    Ich verstehe das so das $i 55 laufen soll

    [autoit][/autoit][autoit][/autoit][autoit]

    For $i = 2 To 56

    [/autoit][autoit][/autoit][autoit][/autoit]

    Und das $i die Farben vom color Index 2 bis 55 nehmen soll aufgrund von For $i = 2 To 56

    [autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $oExcel.Cells($i, 1).Interior.ColorIndex = $i

    [/autoit]


    Aber was bedeuten diese 2 Befehle?

    [autoit][/autoit][autoit][/autoit][autoit]

    ....($oExcel, "1234", $i-1)
    $oExcel.Cells($i, 1)....

    [/autoit]

    Gruß
    Norman