Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

VBA - Tabellenname im Excel übergeben, dann damit weiterarbeiten

Frage Entwicklung VB for Applications

Mitglied: Paescu

Paescu (Level 1) - Jetzt verbinden

23.08.2006, aktualisiert 30.08.2006, 9623 Aufrufe, 10 Kommentare

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
Mitglied: Stefan764
24.08.2006 um 19:08 Uhr
Den Namen der Zieltabelle als Parameter zu übergeben geht z.B. so:

01.
Public Sub test(TabStr As String) 
02.
 
03.
Dim TabObj As Worksheet 
04.
Set TabObj = Application.Worksheets(TabStr) 
05.
 
06.
TabObj.Cells(1, 1) = "Hallo, ich bin " & TabStr 
07.
 
08.
Set TabObj = Nothing 
09.
 
10.
End Sub 
11.
 
12.
 
13.
 
14.
Public Sub t1() 
15.
 
16.
test ("Tabelle1") 
17.
test ("Tabelle2") 
18.
test ("Tabelle3") 
19.
 
20.
End Sub
Bitte warten ..
Mitglied: Paescu
24.08.2006 um 20:53 Uhr
Danke, sieht recht logisch aus, werde es gleich am Montag testen, morgen habe ich (leider) Schule, da kann ich nicht an diesem Auftrag weiterarbeiten...

Pascal
Bitte warten ..
Mitglied: Paescu
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
Bitte warten ..
Mitglied: Stefan764
28.08.2006 um 15:54 Uhr
Tut mir leid, aber ich verstehe nicht ganz, was du meinst.

Was willst du in den globalen Arrays speichern ? Die Tab-Namen oder Was ?
Bitte warten ..
Mitglied: Paescu
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
Bitte warten ..
Mitglied: Stefan764
28.08.2006 um 21:20 Uhr
Wie währe es mit mehrdimensionalen Arrays ?

01.
Dim Alles(0 To 3, 0 To 100) As String 
02.
 
03.
Alles(0,0) = "Hardware1" 
04.
Alles(0,1) = "Hardware2" 
05.
 
06.
Alles(1,0) = "Software1" 
07.
Alles(1,1) = "Software2" 
08.
 
09.
Alles(2,0) = "Firmware1" 
10.
Alles(2,1) = "Firmware2" 
11.
 
12.
Alles(3,0) = "Freeware1" 
13.
Alles(3,1) = "Freeware2" 
14.
....
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.
Bitte warten ..
Mitglied: Paescu
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
Bitte warten ..
Mitglied: Stefan764
28.08.2006 um 22:24 Uhr
Vielleicht ist es das, was du suchst :

01.
Dim A1(0 To 10, 0 To 5) As String 
02.
Dim A2(0 To 2, 0 To 2, 0 To 2) As String 
03.
Dim A3(0 To 5, 0 To 8) As String 
04.
 
05.
Dim Alles(0 To 2) As Variant 
06.
 
07.
Alles(0) = A1 
08.
Alles(1) = A2 
09.
Alles(2) = A3 
10.
 
11.
Alles(0)(0, 0) = "Hardware1" 
12.
Alles(0)(1, 0) = "Hardware2" 
13.
Alles(0)(2, 0) = "Hardware3" 
14.
Alles(0)(3, 0) = "Hardware4" 
15.
Alles(0)(4, 0) = "Hardware5" 
16.
Alles(0)(5, 0) = "Hardware6" 
17.
 
18.
Alles(1)(0, 0, 0) = "Software1" 
19.
Alles(1)(1, 0, 0) = "Software2" 
20.
 
21.
Alles(2)(0, 0) = "Freeware1" 
22.
Alles(2)(1, 0) = "Freeware2" 
23.
Alles(2)(2, 0) = "Freeware3" 
24.
Alles(2)(3, 0) = "Freeware4" 
25.
Alles(2)(4, 0) = "Freeware5" 
26.
 
27.
 
28.
MsgBox (Alles(0)(0, 0)) 
29.
MsgBox (Alles(1)(0, 0, 0)) 
30.
MsgBox (Alles(2)(0, 0))
<klugscheiß>

Solche Programmtechniken haben ein hohes Fehlerrisiko !
Man gerät sehr schnell aus den Arraygrenzen heraus.

</klugscheiß>
Bitte warten ..
Mitglied: Paescu
29.08.2006 um 08:27 Uhr
Wusste ich gar nicht, dass sowas geht... Aber wäre auch ne Lösung... Ich muss schauen, welche dass ich nehme, werde es dann hier bekannt geben...

Nochmal danke an alle, die sich Mühe gegeben haben!

Pascal
Bitte warten ..
Mitglied: Paescu
30.08.2006 um 16:01 Uhr
Habe nun ein einziges Array genommen, ist leicht und funktioniert so wie es soll!

Somit habe ich diesen Schritt nun (endlich) fertig =)

Ich denke, in den nächsten Tagen werden wieder ein paar fragen von mir auftauchen

Gruss Pascal
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Outlook & Mail
gelöst Ganztägier Outlooktermin per VBA aus Excel versenden (8)

Frage von Piotor04 zum Thema Outlook & Mail ...

VB for Applications
gelöst PDF Datei auslesen und per VBA in Excel schreiben (3)

Frage von Julian8990 zum Thema VB for Applications ...

VB for Applications
Excel VBA Sortierung von Daten (5)

Frage von easy4breezy zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...