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
|
|
|