Tipp 0445 Makroaufzeichnung zum Generieren von Code
Autor/Einsender:
Datum:
  Angie
25.03.2005
Entwicklungsumgebung:   Excel
Wenn Sie sich nicht sicher sind, welche Visual Basic-Methode oder -Eigenschaft Sie verwenden sollen, können Sie die Makroaufzeichnung aktivieren und die Aktion manuell ausführen. Die Makroaufzeichnung übersetzt Ihre Aktionen in Visual Basic-Code und stellt damit eine Hilfe dar.
Es gibt jedoch einige Einschränkungen beim Aufzeichnen von Makros, Folgendes lässt sich beispielsweise nicht aufzeichnen:
-  Bedingte Verzweigungen
-  Variablenzuweisungen
-  Schleifenstrukturen
-  Benutzerdefinierte Formulare
-  Fehlerbehandlung
-  u.v.m
Optimieren von aufgezeichnetem Code
Nachdem Ihre Aktionen aufgezeichnet wurden, können/sollten Sie den Code Ihren Wünschen entsprechend ändern bzw. anpassen. Makros, die über die Makroaufzeichnung erstellt wurden, sind von der Markierung abhängig.
Beispiel - Daten von Tabellenblatt zu Tabellenblatt kopieren (Zwischenablage)
Der wohl meistverbreitete aufgezeichnete Code, der in VBA-Foren gepostet wird, sieht wie folgt oder ähnlich aus. Hier werden Daten über die Zwischenablage von einem Tabellenblatt in ein anderes Tabellenblatt kopiert.
 
  Sheets("Tabelle1").Select
  Range("A1:B8").Select
  Selection.Copy
  Sheets("Tabelle2").Select
  Range("A1").Select
  ActiveSheet.Paste
 
Optimiert und um ein Vielfaches schneller kann das Kopieren mit der Copy-Methode auf eine Codezeile reduziert werden:
 
  ActiveWorkbook.Worksheets("Tabelle1").Range("A1:B8").Copy _
     Destination:=ActiveWorkbook.Worksheets("Tabelle2").Range("A1")
 
Oder besser noch, wenn Quell- und Ziel-Tabellenblatt in der selben Arbeitsmappe sind:
 
  With ActiveWorkbook
    .Worksheets("Tabelle1").Range("A1:B8").Copy _
        Destination:=.Worksheets("Tabelle2").Range("A1")
  End With
 
Wenn mehrere Aktionen durchgeführt werden sollen, sich die Programmierung also nicht auf die eine Zeile Code zum Kopieren der Daten beschränkt, ist die Verwendung von Objektverweisen zu empfehlen:
 
  Dim objWkb     As Workbook   'Quell-/Ziel-Arbeitsmappe

  Dim objWksSrc  As Worksheet  'Quell-Tabellenblatt
  Dim objWksDest As Worksheet  'Ziel- Tabellenblatt

  Set objWkb = ActiveWorkbook
   'Die Arbeitmappe wird ab hier mit dem
   'Objektverweis objWkb angesprochen

  Set objWksSrc = objWkb.Worksheets("Tabelle1")
  Set objWksDest = objWkb.Worksheets("Tabelle2")
   'Die Tabellenblätter werden ab hier mit dem
   'entsprechenden Objektverweis angesprochen
 
  'Ggf. weiterer Code hier

  objWksSrc.Range("A1:B8").Copy _
      Destination:=objWksDest.Range("A1")

  'Ggf. weiterer Code hier, z.B. ...
  MsgBox "Die Daten wurden von '" & objWksSrc.Name & _
      "' in '" & objWksDest.Name & "' kopiert!"

  Set objWksDest = Nothing
  Set objWksSrc = Nothing

  Set objWkb = Nothing
 
Beispiel - Daten von Tabellenblatt zu Tabellenblatt kopieren (ohne Zwischenablage)
Die Daten lassen sich aber auch ohne den Umweg über die Zwischenablage von einem Tabellenblatt zum anderen kopieren:
 
  Dim objWkb     As Workbook   'Quell-/Ziel-Arbeitsmappe

  Dim objWksSrc  As Worksheet  'Quell-Tabellenblatt
  Dim objWksDest As Worksheet  'Ziel- Tabellenblatt

  Dim objRngSrc  As Range      'Quell-Bereich

  Set objWkb = ActiveWorkbook

  Set objWksSrc = objWkb.Worksheets("Tabelle1")
  Set objWksDest = objWkb.Worksheets("Tabelle2")

  Set objRngSrc = objWksSrc.Range("A1:B8")
  objWksDest.Cells(1, 1).Resize(objRngSrc.Rows.Count, _
        objRngSrc.Columns.Count).Value = objRngSrc.Value
  Set objRngSrc = Nothing

  MsgBox "Die Daten wurden von '" & objWksSrc.Name & _
      "' in '" & objWksDest.Name & "' kopiert!"

  Set objWksDest = Nothing
  Set objWksSrc = Nothing

  Set objWkb = Nothing
 

Windows-Version
95
98
ME
NT
2000
XP
Vista
Win 7
Excel-Version
95
97
2000
2002 (XP)
2003
2007
2010


Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Freitag, 20. Mai 2011