Excel VBA String Zusammenstellung

tung15

Cadet 4th Year
Registriert
Aug. 2017
Beiträge
68
Hey Leute ich brauch mal eure Hilfe,

Ich möchte ein Makro erstellen, dass aus mehreren Workbooks Information kopiert und in eine Workbook/sheet packt.
Da habe ich bis jetzt folgenden Code:
Code:
Sub CopyRange()

Application.ScreenUpdating = False
    Dim wkbDest As Workbook
    Dim wkbSource As Workbook
    Set wkbDest = ThisWorkbook
    Dim LastRow As Long

Const strPath As String = "C:\Pflege\Station3\"
    ChDir strPath
    strExtension = Dir(strPath & "**********.xlsx")
    Do While strExtension <> ""
        Set wkbSource = Workbooks.Open(strPath & strExtension)
        With wkbSource
    LastRow = .Sheets("Tabelle1").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row
            .Sheets("Tabelle1").Range("A2:K" & LastRow).Copy wkbDest.Sheets("Tabelle1").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
            .Close savechanges:=False
            End With
            strExtension = Dir
    
    Loop
    Application.ScreenUpdating = True

End Sub

Das funktioniert auch. Jetzt möchte ich aber aus dem Pfad "C:\Pflege\Station3\" ein Array machen da es mehrere Stationen gibt.
gäbe es da eine Möglichkeit. Hab schon viel gegoogled aber iwie nichts gefunden.

Danke schonmal im Vorraus und sry falls ich den Code anders einfügen hätte sollen.

Gruß Tung
 
Zuletzt bearbeitet:
Code:
Dim strPaths(3) As String
strPaths(0) = "0"
strPaths(1) = "1"
strPaths(2) = "2"

Damit deklarierst du ein String-Array und füllst es mit Werten.
 
So oder ähnlich solltest Du vorgehen:

Code:
Sub Test()
    Dim avntStation()                                   As Variant
    Dim intIndex                                        As Integer
    avntStation = Array("Station1", _
                        "Station2", _
                        "Station3", _
                        "Station4", _
                        "Station5")
    ' intIndex mit Wert von 1 bis 5 versorgen und
    ' String zusammenbauen mit avntStation(intIndex)
End Sub

Es gibt jedoch unzählige weitere Methoden. Jede bzw. Jeder (sic) handhabt das anders.
 
ella_one schrieb:
So oder ähnlich solltest Du vorgehen:

Code:
Sub Test()
    Dim avntStation()                                   As Variant
    Dim intIndex                                        As Integer
    avntStation = Array("Station1", _
                        "Station2", _
                        "Station3", _
                        "Station4", _
                        "Station5")
    ' intIndex mit Wert von 1 bis 5 versorgen und
    ' String zusammenbauen mit avntStation(intIndex)
End Sub

Es gibt jedoch unzählige weitere Methoden. Jede bzw. Jeder (sic) handhabt das anders.
So hatte ich es ausprobiert nur weiß ich nicht wie ich dann den Pfad zusammen baue
Ich müsse ja prinzipiell schreiben
bei
Code:
Const strPath As String = "C:\Pflege\" & avntStation(intIndex)
Das geht aber leider nicht. Kommt Fehlermeldung bei
ChDir strPath. Pfad konnte nicht gefunden werden und ihm wurde der Wert "C:\Pflege\Station(intIndex)" gegeben und intIndex wird nicht aufgelöst.

Bzw. wie Versorge ich intIndex genau
 
Zuletzt bearbeitet:
tung15 schrieb:
Ich müsse ja prinzipiell schreiben
bei
Code:
Const strPath As String = "C:\Pflege\" & avntStation(intIndex)
Das geht aber leider nicht. Kommt Fehlermeldung bei
ChDir strPath. Pfad konnte nicht gefunden werden und ihm wurde der Wert "C:\Pflege\Station(intIndex)" gegeben und intIndex wird nicht aufgelöst.

Bzw. wie Versorge ich intIndex genau

https://www.vba-tutorial.de/ablaufsteuerung/schleifen.htm

Code:
Dim strPath As String
For intIndex = 1 To "so viele Stationen wie du hast"
    strPath = "C:\Pflege\" & avntStation(intIndex)
    "Dein code"
Next

Da du den String als Konstante definiert hast lässt er sich ja nicht verändern. Deshalb musst du da zu einer "normalen" Variable wechseln.
 
DukNukem schrieb:
https://www.vba-tutorial.de/ablaufsteuerung/schleifen.htm

Code:
Dim strPath As String
For intIndex = 1 To "so viele Stationen wie du hast"
    strPath = "C:\Pflege\" & avntStation(intIndex)
    "Dein code"
Next

Da du den String als Konstante definiert hast lässt er sich ja nicht verändern. Deshalb musst du da zu einer "normalen" Variable wechseln.
Macht sinn jetzt ist aber das nächste problem, dass wenn ich das next nach meinem code setze, er sagt dass next for braucht. mein momentaner code

Code:
Sub CopyRange()

    Application.ScreenUpdating = False
    Dim wkbDest As Workbook
    Dim wkbSource As Workbook
    Set wkbDest = ThisWorkbook
    Dim LastRow As Long
    Dim Station() As Variant
    Dim intIndex
    Dim strPath As String
    For intIndex = 1 To 24
   
    Station = Array("Station1", "Station2", "Station3", "Station5", "Station6", "Station7", "Station8", "Station10", ". . . . . . .. . .)

    strPath = "W:\Pflege\" & Station(intIndex)
    ChDir strPath
    strExtension = Dir(strPath & "  * * * * * * * **")
    Do While strExtension <> ""
        Set wkbSource = Workbooks.Open(strPath & strExtension)
        With wkbSource
        LastRow = .Sheets("Tabelle1").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row
            .Sheets("Tabelle1").Range("A2:K" & LastRow).Copy wkbDest.Sheets("Tabelle1").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
            .Close savechanges:=False
            End With
            strExtension = Dir
       next    
   
    Loop
    Application.ScreenUpdating = True


End Sub
 
Wie @Ham Burger schon sagt muss das next nach dem loop und vor dem ScreenUpdating stehen.
Ebenfalls solltest du noch den Beginn der For schleife und das befüllen des Arrays tauschen.

Für bessere lesbarkeit wäre es dann noch schön wenn du den Code innerhalb der For Schleife noch eine Stufe tiefer einrücken könntest.
 
Zurück
Oben