For next mit Dateiname als Variable

Guten Tag,

ich möchte in VB ein Excel-Makro umschreiben. So ist es inzwischen zu lang geworden und meldet dies als Fehler. Es durchläuft 27x dieselbe einigermaßen komplexe Routine, nur Pfade und Dateinamen ändern sich.

Also soll eine for next-Schleife alles vereinfachen.
Ich suche daher die Syntax für

for i= 1 to 28
if i=1 then pfad=… dateiname = …
if i=2 then …
if 1=2 then …

Hi Ludwig,

ich möchte in VB ein Excel-Makro umschreiben. So ist es
inzwischen zu lang geworden und meldet dies als Fehler. Es
durchläuft 27x dieselbe einigermaßen komplexe Routine, nur
Pfade und Dateinamen ändern sich.

In Vb kann ich dir mangels Ahnung nicht weiterhelfen, aber ich glaube auch die VB-leute hier nicht weil zuwenig Infos.
Was bedeutet deine Aussage, es kommt eine Fehlermeldung (wenn ja, welche, in welcher Zeile) dass der Code zu lang ist *nichtglaub*
27mal das gleiche und dateinamen und Pfad ist taktisch geschickt gewählt bietet sich zurecht ne Schleife an.

Also soll eine for next-Schleife alles vereinfachen.
Ich suche daher die Syntax für
for i= 1 to 28
if i=1 then pfad=… dateiname = …
if i=2 then …
if 1=2 then …

Zu 1=2 sag ich nix, wäre eh False *g
Erst sinds 27 nun 28 tztz.
Poste doch mal deinen vorhanden Code, vielleicht blicke ich dann mehr durch.

Hallo,

mal ein ‚Beispielprogramm‘, fast lauffähig, ich habe mir nur Zeilen gespart, die für einen Erklärung überflüssig sind.

Grundsätzlich wäre es zwar besser, Pfade und Namen aus einer textdatei zu lesen, davon wird der Code kürzer und Änderungen gehen ohne eingriff in den Quellcode, aber für Dich die Daten halt im Programm, wenn’s auch weh tut. :smile:

Option Explicit
Dim pfd(28)
Dim na(28)

Private Sub Command1\_Click()
 Dim Pfad As String
 Dim Programm As String
 pfd(0) = "C:\"
 '....
 pfd(28) = "c:\Programme\"
 na(0) = "Test1.txt"
 '...
 na(28) = "Tesxt28.txt"

 For i = 0 To 28
 Pfad = pfd(i)
 Programm = na(i) 'nicht Name als Variable verwenden!
 'Dein Programm
 Next
End Sub

OK? Fragen?

Gruß, Rainer

Hallo Reinhard,

Teamwork? Fein! :smile: Ich bin mal gespannt was wir zusammen auf die Beine bringen.

Gruß, Rainer

Moin

Den letzten Punkt zuerst:
dim musst Du nicht verwenden, aber Du solltest es müssen. Einfacher:
Wenn Du oben in Deinem Modul die Zeile

Option Explicit

schreibst, so musst Du die Variablen mit „dim“ deklarieren. Es vermeidet aber, dass VBA einen Tippfehler für eine neue Variable hält.
Ausnahme: Die Variablen sind Parameter der Prozedur (oder einer Funktion). Dann reicht beispielsweise

Public Sub x(Name As String, Alter As Integer)

, um „Name“ und „Alter“ zu deklarieren, das Schlüsselwort „dim“ ist dann nicht nötig.
(„as String“, „as Integer“ etc kann auch weggelassen werden, dann sind die Variablen vom Typ „Variant“)

Zur Syntax.
Variante 1:

Public Sub xxx()
 Dim i As Integer
 Dim pfad As String, dateiname As String
 For i = 1 To 27
 If i = 1 Then
 pfad = "C:\tmp"
 dateiname = "hallo.txt"
 End If
 If i = 2 Then
 pfad = "C:\tmp\docs"
 dateiname = "wasgeht.txt"
 End If
 ' [...]
 meineSubroutine pfad, dateiname
 Next
End Sub

OK, nicht so schön: Bei jedem Durchlauf gibt es unnötige If-Abfragen. Besser wäre eine Switch-Abfrage:
Variante 2:

Public Sub yyy()
 Dim i As Integer
 Dim pfad As String, dateiname As String
 For i = 1 To 27
 Select Case i
 Case 1:
 pfad = "C:\tmp"
 dateiname = "hallo.txt"
 Case 2:
 pfad = "C:\tmp\docs"
 dateiname = "wasgeht.txt"
 [...]
 End Select
 meineSubroutine pfad, dateiname
 Next
End Sub

Gut. Es ist Freitag, ich bin nicht mehr ganz wach. Aber ich frage mich, ob es das nicht auch tut:

Variante 3:

Public Sub zzz()
 meineSubroutine "C:\tmp", "hallo.txt"
 meineSubroutine "C:\tmp\docs", "wasgeht.txt"
 meineSubroutine "C:\tmp\xls", "sandmann.owd"
 [...]
End Sub

Ist auf jeden Fall kürzer… :wink:

Schönes Wochenende

Leo

Hi,

Variante 3:

Public Sub zzz()
meineSubroutine „C:\tmp“, „hallo.txt“
meineSubroutine „C:\tmp\docs“, „wasgeht.txt“
meineSubroutine „C:\tmp\xls“, „sandmann.owd“
[…]
End Sub

Ja, die ist schön.

Aber die Erklärung …

Private Sub meineSubroutine(Pfad As String, Datei As String)
 'Dein Code
End Sub

… hast Du vergessen / weg gelassen.

Gruß, Rainer

Teamwork? Fein! :smile: Ich bin mal gespannt was wir zusammen auf
die Beine bringen.

Hallo Rainer,
ist doch klar, VB R! :smile:))

Features von VBR 1.0:

  • Alles ist möglich, was VBR nicht kann geht nicht.
  • Überwachung des Betriebsystems, droht dieses abzustürzen wird das Betriebssystem repariert

Gruß
Reinhard

Zunächst Euch allen ein Danke - und eine Info
Danke für Eure Hilfe. Ich habe das Problem gelöst. Übrigens, wenn ein kompiliertes Makro größer als 64 kb (kb!!) ist, reagiert es mit der Meldung, das Sub sei zu lang.

Eine gute Woche wünscht
Ludwig