Excel Spalte auslesen und Ordner erstellen

  • VBScript

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Excel Spalte auslesen und Ordner erstellen

    Hallo zusammen,

    ich habe ein (hoffentlich kleines) Problem. Ich habe eine Excelliste in welcher in der Spalte A Nummern von technischen Zeichnungen stehen. Nun moechte mein Chef, dass ich ein Script erstelle welches die Spalte A ausliest und fuer jeden einzelnen Eintrag einen Ordner erstellt. Es soll allerdings nicht als Makro sein, da verschiedene Personen das Script benutzen sollen.

    Bislang habe ich es als Makro so geloest

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Declare Function MakeSureDirectoryPathExists _
    3. Lib "imagehlp.dll" (ByVal Pfad As String) As Long
    4. Public Sub MakeDir()
    5. Dim lngLetzte As Long
    6. Dim wks As Worksheet
    7. Dim strPfad As String
    8. strPfad = "E:\Test\"
    9. Set wks = ThisWorkbook.Worksheets("Feuil1")
    10. With wks
    11. lngLetzte = .Range("A" & Rows.Count).End(xlUp).Row
    12. For lngLetzte = 2 To lngLetzte
    13. .Cells(lngLetzte, 1).Value = Replace(.Cells(lngLetzte, 1).Value, " ", "_")
    14. MakeSureDirectoryPathExists (strPfad & .Cells(lngLetzte, 1).Value & "\")
    15. Next lngLetzte
    16. End With
    17. Set wks = Nothing
    18. End Sub


    Hab leider keinerlei hilfreichen Eintrag fuer mich bislang gefunden. Bin mit VB Script nicht sehr vertraut.



    Vielen Dank!



    MFG Michi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „michi_obb“ ()

    Willkommen im Forum,

    Setz bitte deinen Code in vb Klammern, dann wird er gleich richtig angezeigt.
    Ich glaube auch du meinst vba, denn du willst das sicher über einen Button starten.
    Was gibt es denn für eine Fehlermeldung?
    Der Code, welche ich aktuell habe ist VBA und dieser funktioniert auch ohne Probleme. Ich moechte/muss das ganze jedoch ueber VBScript realisieren. Mein Chef moechte eine .vbs-Datei welche er ausfuehren kann.

    Diese soll wie gesagt die erste Spalte der Excel-Datei auslesen und aus jedem Eintrag der Spalte einen Ordner erstellen. Hintergrund warum kein Makro: Wir bekommen immer wieder Updates der Liste. Der Pfad zu der Liste kann auch im Code stehen (muss kein Oeffnen/Auswahl Fenster aufpoppen).
    In welchem Format exdistiert die Datei? CSV oder XLSx?
    Wenn XLSx, kommst du um die Verwendung von Excel kaum herum, um die Spalte auszulesen.
    Du kannst mit

    Visual Basic-Quellcode

    1. Set XLS = CreateObject("Excel.Application")
    2. XLS.Visible = False 'wenn die Instanz versteckt sein soll
    3. Set wb = XLS.Workbooks.Open(MyExcelFilepath)
    eine Excel-Instanz erzeugen, darin die Datei oeffnen und bearbeiten.
    "wb" waere dann equivalent zum oben verwendeten "ThisWorkbook".

    Zur Auswahl der Datei wuerde ich FileSystemObject bemuehen.
    Es laesst sich bestimmt eine Regel aufstelen, wie man die jeweils gueltige Datei automatisch erkennen kann
    (z.B. neuestes ModificationDate).
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo michi obb

    VBScript verwendet nur Variant-Typen und geht das Script von oben nach unten durch, ohne auf Sub's zu achten. Desshalb schrieb ich in der ersten Zeile den Prozedurnamen, da dieser aufgerufen werden soll. Hier mein Code:

    Visual Basic-Quellcode

    1. MakeDir
    2. MsgBox("Done!")
    3. Public Sub MakeDir()
    4. strPfad = "E:\Test\"
    5. Set xlApp = CreateObject("Excel.Application")
    6. xlApp.Visible = False
    7. Set xlWb = xlApp.Workbook.Open("C:\users\Beispielbenutzer\Documents\CAD-Liste.xlsx")
    8. Set xlWs = xlWb.Worksheets("Feuil1")
    9. With xlWs
    10. lngLetzte = .Range("A" & Rows.Count).End(xlUp).Row
    11. For i = 2 To lngLetzte
    12. .Cells(i, 1).Value = Replace(.Cells(i, 1).Value, " ", "_")
    13. MakeSureDirectoryPathExists(strPfad & .Cells(i, 1).Value & "\")
    14. 'Das letzte "\". Ist das nicht falsch? Ich dachte, dass das weggelassen werden MUSS... ??
    15. Next
    16. End With
    17. Set xlWs = Nothing
    18. xlWb.Close(True)
    19. xlObj.Quit
    20. Set xlObj = Nothing
    21. End Sub
    22. Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal Pfad As String) As Long


    Grüsse

    Higlav
    Die Datei existiert als xlsx-Datei.

    Leider bin ich mit VBS gar nicht vertraut und kann mit deiner Hilfe leider sehr wenig anfangen. Wie ich eine ExcelDatei oeffne habe ich schon hinbekommen. Das war es dann aber leider auch schon.
    Wie's aussieht kennt VBS kein Declare Function. somit lösen wir's mit Shell:

    Visual Basic-Quellcode

    1. Sub MakeSureDirectoryPathExists(Pfad)
    2. Set objShell = CreateObject("WScript.Shell")
    3. objShell.run("cmd.exe /C mkdir " & Pfad)
    4. End Sub


    Ich geb' ja zu: das ist nicht wirklich schön gelöst, sollte aber zweckmässig sein. :thumbup: