VBA - Tabellenname im Excel übergeben, dann damit weiterarbeiten
Guten Morgen miteinander
Ich stehe wieder einmal an beim VBA programmieren...
Und zwar sollte ich folgendes machen: Da ich jetzt ziemlich langen Code habe, der recht unübersichtlich ist, will ich einen Vorgang, der vier Mal ausgeführt wird und immer separat in einer Funktion ist, in eine einzige solche packen. Dazu muss ich natürlich Variabeln übergeben, dass das geht. Unter Anderem auch die Tabelle, in der der Code ausgeführt werden soll, also zum Beispiel "Tabelle2" damit ich in der Funktion dann "Tabelle2.Activate" oder so erhalte, aber das Tabelle2 muss Variabel sein. Ich habe es schon mit einigen Datentypen probiert, es ging auch ein paar Mal, aber dan blieb es hier hängen: "If Tabelle2.Cells(zahl, 1) = "" Then ..."
Was soll das? Ich weiss echt nicht mehr, was ich tun soll, möchte diesen Code endlich übersichtlicher und wenn dies in einer Funktion ist, muss ich nicht an vier Stellen was ändern, sondern nur an einer (weniger Arbeitsaufwand).
Hoffe ihr versteht mich
Gruss
Pascal
Ich stehe wieder einmal an beim VBA programmieren...
Und zwar sollte ich folgendes machen: Da ich jetzt ziemlich langen Code habe, der recht unübersichtlich ist, will ich einen Vorgang, der vier Mal ausgeführt wird und immer separat in einer Funktion ist, in eine einzige solche packen. Dazu muss ich natürlich Variabeln übergeben, dass das geht. Unter Anderem auch die Tabelle, in der der Code ausgeführt werden soll, also zum Beispiel "Tabelle2" damit ich in der Funktion dann "Tabelle2.Activate" oder so erhalte, aber das Tabelle2 muss Variabel sein. Ich habe es schon mit einigen Datentypen probiert, es ging auch ein paar Mal, aber dan blieb es hier hängen: "If Tabelle2.Cells(zahl, 1) = "" Then ..."
Was soll das? Ich weiss echt nicht mehr, was ich tun soll, möchte diesen Code endlich übersichtlicher und wenn dies in einer Funktion ist, muss ich nicht an vier Stellen was ändern, sondern nur an einer (weniger Arbeitsaufwand).
Hoffe ihr versteht mich
Gruss
Pascal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 38567
Url: https://administrator.de/contentid/38567
Ausgedruckt am: 25.11.2024 um 02:11 Uhr
10 Kommentare
Neuester Kommentar
Den Namen der Zieltabelle als Parameter zu übergeben geht z.B. so:
Public Sub test(TabStr As String)
Dim TabObj As Worksheet
Set TabObj = Application.Worksheets(TabStr)
TabObj.Cells(1, 1) = "Hallo, ich bin " & TabStr
Set TabObj = Nothing
End Sub
Public Sub t1()
test ("Tabelle1")
test ("Tabelle2")
test ("Tabelle3")
End Sub
Wie währe es mit mehrdimensionalen Arrays ?
Diese Methode ist leider sehr unflexiebel, was die Größe des Arrays angeht.
In anderen Sprachen würde ich dynamische Objekte und Zeiger verwenden.
z.B. TStringList und TList in Delphi
Mit VBA geht das vielleicht auch - aber ich weiß nicht, wie.
Dim Alles(0 To 3, 0 To 100) As String
Alles(0,0) = "Hardware1"
Alles(0,1) = "Hardware2"
Alles(1,0) = "Software1"
Alles(1,1) = "Software2"
Alles(2,0) = "Firmware1"
Alles(2,1) = "Firmware2"
Alles(3,0) = "Freeware1"
Alles(3,1) = "Freeware2"
....
Diese Methode ist leider sehr unflexiebel, was die Größe des Arrays angeht.
In anderen Sprachen würde ich dynamische Objekte und Zeiger verwenden.
z.B. TStringList und TList in Delphi
Mit VBA geht das vielleicht auch - aber ich weiß nicht, wie.
Vielleicht ist es das, was du suchst :
<klug###>
Solche Programmtechniken haben ein hohes Fehlerrisiko !
Man gerät sehr schnell aus den Arraygrenzen heraus.
</klug###>
Dim A1(0 To 10, 0 To 5) As String
Dim A2(0 To 2, 0 To 2, 0 To 2) As String
Dim A3(0 To 5, 0 To 8) As String
Dim Alles(0 To 2) As Variant
Alles(0) = A1
Alles(1) = A2
Alles(2) = A3
Alles(0)(0, 0) = "Hardware1"
Alles(0)(1, 0) = "Hardware2"
Alles(0)(2, 0) = "Hardware3"
Alles(0)(3, 0) = "Hardware4"
Alles(0)(4, 0) = "Hardware5"
Alles(0)(5, 0) = "Hardware6"
Alles(1)(0, 0, 0) = "Software1"
Alles(1)(1, 0, 0) = "Software2"
Alles(2)(0, 0) = "Freeware1"
Alles(2)(1, 0) = "Freeware2"
Alles(2)(2, 0) = "Freeware3"
Alles(2)(3, 0) = "Freeware4"
Alles(2)(4, 0) = "Freeware5"
MsgBox (Alles(0)(0, 0))
MsgBox (Alles(1)(0, 0, 0))
MsgBox (Alles(2)(0, 0))
<klug###>
Solche Programmtechniken haben ein hohes Fehlerrisiko !
Man gerät sehr schnell aus den Arraygrenzen heraus.
</klug###>