Verschieden Codes, für Dasselbe
05.06.2020 16:53:43
EtoPHG
Hallo Marc,
Mal ein Codebeispiel, für eine Mappe mit 3 Registern "?", "Monate", "Jahr"
Hier mal Code in 2 Varianten, bei denen du vielleicht aufgrund der Kommentare mehr Zusammenhänge von VBA erschliessen kannst.
Option Explicit
' 2x Dasselbe in Grün'
' Vorschlag mit Objekten
Sub Projektuebersicht_Monate_Jahr()
' Definition von Variablen
Dim objBlatt As Worksheet, objZielBlatt As Worksheet
' Quellblatt ist "Monate"-Register
Set objBlatt = ThisWorkbook.Worksheets("Monate")
' Zielblatt ist Register 1 (unabhängig vom Namen)
Set objZielBlatt = ThisWorkbook.Worksheets(1)
' lösche & kopiere
Copy_to_Blatt objBlatt, objZielBlatt
' Quellblatt ist jetzt "Jahr"-Register
Set objBlatt = ThisWorkbook.Worksheets("Jahr")
' und wieder lösche & kopiere
Copy_to_Blatt objBlatt, objZielBlatt
End Sub
' Löscht Spalte A-E im Quellenblatt
' Kopiert Spalte F:G ins Zielblatt
Sub Copy_to_Blatt(objSource As Worksheet, objTarget As Worksheet)
With objSource
.Range("A:E").ClearContents ' Spalte A-E löschen
.Range("F:G").Copy objTarget.Range("B1") ' Spalte F:G kopieren
End With
End Sub
' Tino's String Vorschlag
Sub Projektuebersicht_Monate()
Dim sNameQuellblatt As String
Dim sNameZielblatt As String
Copy_to_Blatt_Name "Monate", 1
Copy_to_Blatt_Name "Jahr", 1
End Sub
' Löscht Spalte A-E im Quellenblatt
' Kopiert Spalte F:G ins Zielblatt
Sub Copy_to_Blatt_Name(NameQuellBlatt As String, lIndexZiel As Long)
With ThisWorkbook.Worksheets(NameQuellBlatt)
.Range("A:E").ClearContents ' Spalte A-E löschen
.Range("F:G").Copy ThisWorkbook.Worksheets(lIndexZiel).Range("B1") ' Spalte F:G _
kopieren
End With
End Sub
Du siehst auch, dass das Ganze .Activate und .Select Gedöns völlig überflüssig ist.
Diese Befehle kommen v.a. vom Makrorekorder (weil der nicht anders kann). Anstelle dieser ist eine saubere und vollständige Referenzierung einfacher und führt nicht zu unerwünschten Nebeneffekten wie Blätter-Flackern und anderes.
Gruess Hansueli