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
10 Antworten
- LÖSUNG Stefan764 schreibt am 24.08.2006 um 19:08:04 Uhr
- LÖSUNG Paescu schreibt am 24.08.2006 um 20:53:30 Uhr
- LÖSUNG Paescu schreibt am 28.08.2006 um 09:31:01 Uhr
- LÖSUNG Stefan764 schreibt am 28.08.2006 um 15:54:12 Uhr
- LÖSUNG Paescu schreibt am 28.08.2006 um 19:37:21 Uhr
- LÖSUNG Stefan764 schreibt am 28.08.2006 um 21:20:23 Uhr
- LÖSUNG Paescu schreibt am 28.08.2006 um 21:49:47 Uhr
- LÖSUNG Stefan764 schreibt am 28.08.2006 um 22:24:39 Uhr
- LÖSUNG Paescu schreibt am 29.08.2006 um 08:27:24 Uhr
- LÖSUNG Paescu schreibt am 30.08.2006 um 16:01:19 Uhr
- LÖSUNG Paescu schreibt am 29.08.2006 um 08:27:24 Uhr
- LÖSUNG Stefan764 schreibt am 28.08.2006 um 22:24:39 Uhr
- LÖSUNG Paescu schreibt am 28.08.2006 um 21:49:47 Uhr
- LÖSUNG Stefan764 schreibt am 28.08.2006 um 21:20:23 Uhr
- LÖSUNG Paescu schreibt am 28.08.2006 um 19:37:21 Uhr
- LÖSUNG Stefan764 schreibt am 28.08.2006 um 15:54:12 Uhr
- LÖSUNG Paescu schreibt am 28.08.2006 um 09:31:01 Uhr
- LÖSUNG Paescu schreibt am 24.08.2006 um 20:53:30 Uhr
LÖSUNG 24.08.2006 um 19:08 Uhr
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
LÖSUNG 24.08.2006 um 20:53 Uhr
LÖSUNG 28.08.2006 um 09:31 Uhr
@Stefan764
Hat super funktioniert, danke!
Nun aber noch ne andere Frage... Weisst du auch, wie man dasselbe mit einem global deklarierten Array macht? Also, so dass ich nur den Namen übergebe und den Rest in der Funktion ist, damit ich mehrere Array nutzen kann in einer Funktion (pro Aufruf ein Array)... Hoffe du kommst draus
Pascal
Hat super funktioniert, danke!
Nun aber noch ne andere Frage... Weisst du auch, wie man dasselbe mit einem global deklarierten Array macht? Also, so dass ich nur den Namen übergebe und den Rest in der Funktion ist, damit ich mehrere Array nutzen kann in einer Funktion (pro Aufruf ein Array)... Hoffe du kommst draus
Pascal
LÖSUNG 28.08.2006 um 15:54 Uhr
LÖSUNG 28.08.2006 um 19:37 Uhr
Ne nicht die Tabellennamen, die habe ich nur übergeben, dass die Funktion weiss, in welcher Tabelle was kopiert werden muss. Und da kommt das Array ins Spiel, von jeder Tabelle werden Einträge in Arrays gespeichert (insgesamt 4 Tabellen -> 4 Arrays) und wenn ich zum Beispiel Tabelle2 übergebe, muss ich die Daten in das arrayHardware speichern, wenn ich aber Tabelle3 übergebe, muss arraySoftware genommen werden... die Arrays sind global deklariert, weil sie später noch in einer anderen Funktion gebraucht werden...
Hoffe, du verstehst mich nun besser und wenn nicht, einfach fragen
Pascal
Hoffe, du verstehst mich nun besser und wenn nicht, einfach fragen
Pascal
LÖSUNG 28.08.2006 um 21:20 Uhr
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"
....
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.
LÖSUNG 28.08.2006 um 21:49 Uhr
Ne das ist nicht ne gute Lösung, denn ich weiss nie, wieviele Datensätze es in dem Array werden, also, zum Beispiel könnte es so aussehen:
ArrayHardware(0,0) = Anzahl
ArrayHardware(1,0) = Artikel-Nr.
ArrayHardware(2,0) = Option
Und das bei allen vier Tabellen so...
Dann kann es schlussendlich so aussehen:
ArrayHardware(0,21) = "5"
ArrayHardware(1,21) = "D5GW3"
ArrayHardware(2,21) = "53S"
Also geht deine Methode irgendwie nicht...
Könnte es unter Umständen schon mit einem einzigen Array machen, was aber ziemlich aufwendig ist... Aber ich könnte es morgen einmal probieren, da mir sowieso nichts anderes übrig bleiben wird...
Pascal
ArrayHardware(0,0) = Anzahl
ArrayHardware(1,0) = Artikel-Nr.
ArrayHardware(2,0) = Option
Und das bei allen vier Tabellen so...
Dann kann es schlussendlich so aussehen:
ArrayHardware(0,21) = "5"
ArrayHardware(1,21) = "D5GW3"
ArrayHardware(2,21) = "53S"
Also geht deine Methode irgendwie nicht...
Könnte es unter Umständen schon mit einem einzigen Array machen, was aber ziemlich aufwendig ist... Aber ich könnte es morgen einmal probieren, da mir sowieso nichts anderes übrig bleiben wird...
Pascal
LÖSUNG 28.08.2006 um 22:24 Uhr
Vielleicht ist es das, was du suchst :
<klugscheiß>
Solche Programmtechniken haben ein hohes Fehlerrisiko !
Man gerät sehr schnell aus den Arraygrenzen heraus.
</klugscheiß>
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))
Solche Programmtechniken haben ein hohes Fehlerrisiko !
Man gerät sehr schnell aus den Arraygrenzen heraus.
</klugscheiß>
LÖSUNG 29.08.2006 um 08:27 Uhr
LÖSUNG 30.08.2006 um 16:01 Uhr