Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1760to1764
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Arbeits-Sheet mittels Variable übergeben

Arbeits-Sheet mittels Variable übergeben
05.06.2020 14:36:41
Marc
Hallo zusammen
Ich möchte aus einer ersten Routine in die 2. springen, in der ersten gebe ich den Variablennamen mit:
Sub Projektuebersicht_Monate()
Dim wks As Worksheet
wks = "Monate"
Call Copy_to_Blatt1
End Sub

In der 2. Routine dann:
Sub Copy_to_Blatt1
Worksheets("wks").Activate
ActiveSheet.Columns("A:E").Select
Selection.ClearCo…..
Ich erhalte immer wieder eine Fehlermeldung. Was mache ich hier denn schon wieder falsch?
Mit herzlichem Dank und Gruss
Marc



		

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Arbeits-Sheet mittels Variable übergeben
05.06.2020 14:54:30
Tino
Hallo,
vielleicht so, nicht getestet!
Sub Projektuebersicht_Monate()
Dim wks$
wks = "Monate"
Call Copy_to_Blatt1(wks)
End Sub
Sub Copy_to_Blatt1(wks$)
Worksheets(wks).Activate
ActiveSheet.Columns("A:E").Select
Selection.ClearCo…..
Gruß Tino
AW: Arbeits-Sheet mittels Variable übergeben
05.06.2020 15:05:22
Marc
Super, danke Tino, es hat funktioniert :)
Vielleicht finde ich sogar mal raus, wo der Fehler lag, aber das hat noch Zeit
Grüess
Marc
Das kann noch lange dauern, mit dem Rausfinden
05.06.2020 16:08:05
EtoPHG
Marc,
Denn deine Posts drehen sich immer wieder um das Gleiche: Variablen, Datentypen, Parameter.
Lies doch mal die VBA Grundlangen wie Zusammenfassung der Datentypen.
Du definierst wks As WorkSheet. Damit ist wks vom Datentyp Objekt.
Dann weisst du diesem Objekt ein "String" zu, denn alles was in VBA in "Gänsefüssen" geschrieben wird ist ein fixer unveränderbarer Text.
Du übergibst keine Parameter an die nächste Sub, sondern führst dort "wks" als Namen des Blatts auf. Es gibt aber keinen Bezug zwischen der Variablen wks der ersten Routine zum String "wks" in der Zweiten.
Tino arbeitet nur mit Strings, und Parametern. Die Variable wks übergibt also den Inhalt an die Subroutine 2 (die wiederum einen String als Parameter verlangt). Dieser Parameter/Variable hat aber nichts mit dem wks der Routine zu tun, sondern im Call wird nur der inhalt von wks/Routine1 nach wks/Routine2 verschoben.
Gruess Hansueli
Anzeige
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
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige