Schleife erweitern
#1
Hallo,
ich habe eine finktionierende Schleife, die jetzt wieder etwas erweitert werden muss.
Die Schleife 1 bestand bis jetzt nur aus 1 und 2 bzw For m = 1 To 2

Kann man anstatt Zahlen auch Buchtaben nehmen? zb Ich möchte, dass sie jetzt ungefähr so aussieht For m = m01, m02, mg63, rollo, pgd01


Ich hoffe ihr könnt mir wieder helfen, meine VBA sind ganz schlecht, ich kann nur copy und paste

LG perostojkov

Code:
Option Explicit
Option Base 1
Sub Test()
Dim strMeldung As String, strTitel As String, strAntwort As Integer
Dim Name1 As String 'Ordner- bzw Dateiname
Dim pfad1 As String '1. Teil des Pfades
Dim pfad2 As String 'kompletter Pfad
Dim datei As String 'Dateiname
Dim Home As String 'ThisWorkbook
Dim arr() As String 'Array für Ordnernamen
Dim a As Long 'Index für arr()
Dim m As Integer 'Maschinen#
Dim monat As Integer 'Monats#
'********************************************************************************
' Initialisierung
'********************************************************************************
Home = ThisWorkbook.Name
datei = ActiveSheet.Range("C6")
'********************************************************************************
'Schleife 1 - MaschinenEbene
'********************************************************************************
For m = 1 To 2
'die Ordner für Jahr und Monat werden in den Programmschleifen angehängt
pfad1 = "\\server\maschine" & m & "\auftraege\"
'pfad1 = "C:\Users\Public\Documents\Anwendungen\macedonec" & m & "\" 'nur für Testzwecke
'********************************************************************************
' Schleife 2 - Alle Jahres-Ordnernamen auslesen, die mit 'pfad1' beginnen
'********************************************************************************
a = 0
Erase arr
Name1 = Dir(pfad1 & "*", vbDirectory) ' Ersten Ordner-Eintrag abrufen.
Do While Name1 <> "" ' Schleife beginnen.
'Aktuelles und übergeordnetes Verzeichnis ignorieren.
If Name1 <> "." And Name1 <> ".." Then
If (GetAttr(pfad1 & Name1) And vbDirectory) = vbDirectory Then 'es handelt sich um ein gewünschtes Verzeichnis
a = a + 1 'Index für arr aktualisieren
ReDim Preserve arr(1 To a) 'arr um einen Eintrag erweitern, bisherige Daten bleiben erhalten
arr(a) = Name1 'speichern nächsten gültigen Ordnernamen in arr
End If
End If
Name1 = Dir ' Nächsten Eintrag abrufen.
Loop
'*******************************************************************************
' Schleife 3 - alle Monats-Ordner nach Datei durchsuchen
'*******************************************************************************
For a = 1 To UBound(arr)
For monat = 1 To 12
pfad2 = pfad1 & arr(a) & "\" & monat & "\" & datei & ".xls" 'Gesamt-Pfad
Name1 = Dir(pfad2)
If Name1 <> "" Then
Workbooks.Open Filename:=pfad2 'gefundene Datei öffnen
With ThisWorkbook 'dieses Workbook sichern und schließen
.Save
.Close
End With
Exit Sub
End If
Next monat
Next a 'nächsten Ordner verarbeiten
'*******************************************************************************
'Datei nicht gefunden
'*******************************************************************************
restcode unwichtig
Antworten Top
#2
Hallo,

eine For-Next-Schleife setzt sich in ihrem Kopf aus einer Variable und einem Schleifenzähler zusammen. Dementsprechend muss der Zähler auch numerisch sein. Du müsstest schon mal etwas näher erklären, was du da vorhast. Eventuell gibt es da eine Lösung.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
[-] Folgende(r) 1 Nutzer sagt Danke an Klaus-Dieter für diesen Beitrag:
  • perostojkov
Antworten Top
#3
Hallo perostojkov,

sinngemäß kannst Du Deine Variablen m01, m02, mg63, rollo, pgd01 z.B. in ein Array schreiben und die einzelnen Elemente mit einer For Each Schleife durchgehen. Allerdings ist dabei die große Frage, für was stehen diese Elemente? Also am Ende die Frage, die Klaus-Dieter schon gestellt hat.

Code:
Dim arrAll As Variant
Dim arrOne As Variant
arrAll = Array(m01, m02, mg63, rollo, pgd01)
For Each arrOne In arrAll
  'Mach was mit dem Inhalt der einzelnen Elemente des Arrays
Next arrOne


Viele Grüße,

Zwenn
[-] Folgende(r) 1 Nutzer sagt Danke an Zwenn für diesen Beitrag:
  • perostojkov
Antworten Top
#4
Hallo,
sorry ich war im Urlaub...
VIELEN DANK für die Tipps, ich bin mir ganz sicher, dass Zwenns Lösung auch funktionieren würde.
Ich habe mich jedoch für diese Lösung entschieden.

Code:
'********************************************************************************
'Schleife 1 - MaschinenEbene
'********************************************************************************

For m = 1 To 5
Select Case m
    Case 1: strMasch = "m01"
    Case 2: strMasch = "m02"
    Case 3: strMasch = "mg63"
    Case 4: strMasch = "rollo"
    Case 5: strMasch = "pgd01"
End Select
'die Ordner für Jahr und Monat werden in den Programmschleifen angehängt
pfad1 = "\\server\maschine" & strMasch & "\auftraege\"

'********************************************************************************
' Schleife 2 - Alle Jahres-Ordnernamen auslesen, die mit 'pfad1' beginnen
'********************************************************************************

LG perostojkov
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste