Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1616to1620
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Erstellen von Ordnern durch VBA

Erstellen von Ordnern durch VBA
04.04.2018 10:37:24
Ordnern
Hallo Community,
ich hätte eine Frage. Und zwar würde ich gerne per VBA einen Button in Excel erstellen, welches dann immer in jeder Exceldatei dieser Art verfügbar ist. Generell ist in den Exceldateien ein Datenblatt abgebildet.
Das Programm sollte zwei Arrays enthalten, die eine Anzahl an Nummern erhält. Durch diese soll das Programm durchgehen und wenn es in einem Array eine bestimmte Zahl aus dem Datenblatt findet, dann weiß das Programm, ob es in den Dateipfad Netzwerk -OrdnerA- 1_Ordner oder in den Dateipfad Netzwerk -OrdnerA- 2_Ordner gehen soll. Hier soll das Programm dann in dem jeweiligen Ordner nach einem anderen Ordner mit einer spezifischen Nummer suchen und in dem Ordner schauen, ob bereits ein Unterordner mit dem Namen Max_Mustermann erstellt ist. Wenn ja, soll die Frage gestellt werden, ob der Ordner wirklich überschrieben werden soll. Wenn nicht, soll es in dem Ordner_mit_spezifischer_Nummer den Ordner Max_Mustermann erstellen. Hierin soll das Programm dann die Exceldatei als PDF und als Excel abspeichern.
Wenn es die bestimmte Zahl nicht findet, soll ein Fehler ausgegeben werden.
Nochmal zum Verständnis des Ordnerpfads
Netzwerk - OrdnerA - 1_Ordner - Ordner_mit_spezifischer_Nummer - Max_Mustermann ( hier wird dann das Datenblatt aus Excel als PDF und als Excel gespeichert)
oder eben
Netzwerk - OrdnerA - 2_Ordner - Ordner_mit_spezifischer_Nummer - Max_Mustermann ( hier wird dann das Datenblatt aus Excel als PDF und als Excel gespeichert)
Ist dies generell möglich?
Ich würde mich über Hilfe sehr freuen. Leider habe ich in VBA nicht sehr viel Erfahrung, was das Ganze für mich nicht ganz einfach macht.
Ich probiere mich gerade selber und lese nach, aber leider komme ich noch nicht zu einem wirklichen Ergebnis.
Mit freundlichen Grüßen,
Valentina

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Erstellen von Ordnern durch VBA
04.04.2018 14:23:20
Ordnern
Hallo
so?
Option Explicit 
 
Sub Button_clicken() 
    Dim Zelle As Range, Arr1(), Arr2, Z, TMP 
    Dim NW As String, O As String, Ord1 As String, Ord2 As String, SpNr As String, LW As String 
     
    NW = "X:\Temp\" 
    Ord1 = "OrdnerA _ 1_Ordner\" 
    Ord2 = "OrdnerA _ 2_Ordner\" 
    LW = "Max_Mustermann\" 
     
    Arr1 = Array(2, 6, 12) 
    Arr2 = Array(3, 7, 9) 
     
    Set Zelle = Range("A1") 
     
    ' - - - - - - 
     
     
    'Deine spezifische Nummer 
    SpNr = Zelle.Value 
     
    'durchlaufe erstes Array 
    For Each Z In Arr1 
        If SpNr = Z Then 
            TMP = True 
            Call Speichern(NW & Ord1 & SpNr & "\" & LW) 
        End If 
    Next 
 
    'wenn noch nichts gefunden, durchlaufe zweites Array 
    For Each Z In Arr2 
        If SpNr = Z Then 
            TMP = True 
            Call Speichern(NW & Ord2 & SpNr & "\" & LW) 
        End If 
    Next 
     
    'wenn garnichts gefunden wurde 
    If TMP = "" Then MsgBox "Keine Daten gefunden" 
     
 
End Sub 
 
Private Sub Speichern(Kpfad) 
    Dim JaNein, Neuname As String 
     
    If Dir(Kpfad, vbDirectory) <> "" Then 
        JaNein = MsgBox("Soll der Ordner wirklich überschrieben werden", vbYesNo + vbQuestion) 
        If JaNein <> 6 Then 
            MsgBox "Abbruch" 
            Exit Sub 
        End If 
    Else 
        'erstelle Ordner 
        MkDir Kpfad 
 
    End If 
     
     
    'als XLSM speichern 
    ActiveWorkbook.SaveCopyAs Filename:=Kpfad & ThisWorkbook.Name 
         
    'als PDF speichern 
    Neuname = ThisWorkbook.Name 
    Neuname = Left(Neuname, InStr(Neuname, ".") - 1) 
     
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Kpfad & Neuname & ".pdf", _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False 
     
         
End Sub 

LG UweD
Anzeige
AW: Erstellen von Ordnern durch VBA
06.04.2018 07:39:52
Ordnern
Hallo UweD,
vielen lieben Dank für deine Antwort und für deine Mühe.
Ich versuche gerade mich durch den Code zu arbeiten und in ganz zu verstehen. Nur ein paar Fragen:
-wie soll ich das "Set Zelle = Range("A1") genau verstehen? Was macht es?
-Unter SpNr gebe ich dann einfach die Zelle an, in der mein spezifischer Wert steht?
-Für was steht das Z und das Temp?
-NW ist der Pfad, wo der Zielordner erstellt werden soll, oder?
AW: Erstellen von Ordnern durch VBA
06.04.2018 10:01:37
Ordnern
Hallo
&GT -wie soll ich das "Set Zelle = Range("A1") genau verstehen? Was macht es?
Ich mache es so, dass ich im Kopf eines Makros erforderliche Anpassungen variabel programmiere.
Dann muss der User bei Ändeerungen nur an einer Stelle was umstellen und nicht im Code selbst.
Wenn du nun auf einmal aus B1 lesen möchtest, kannst du das hier oben vornehmen


&GT -Unter SpNr gebe ich dann einfach die Zelle an, in der mein spezifischer Wert steht?
nein, das Wäre wie oben beschrieben bei Zelle.
ABER: das ist hier zu viel des Guten gewesen. Anstelle von " If SpNr = Z Then "
kannst du auch " If Zelle.Value = Z Then" nehmen


&GT -Für was steht das Z und das Temp?
Z ist nur eine Schleifenvariable.
Das TMP wird innerhalb der 1. Schleife von FALSCH auf TRUE gesetz, wenn was gefunden wurde.
ebenso, bei der 2. Schleife
Wird nichts gefunden, dann wird TMP dazu verwendet, die Meldung auszugeben


&GT -NW ist der Pfad, wo der Zielordner erstellt werden soll, oder?
Das ist der Erste Teil des Pfades, wo gesucht und erstellt werden soll
der gesamte Pfad wird ja beim Aufrufen des Unterprogramms zusammengesetzt
"NW & Ord1 & SpNr & "\" & LW" bzw.
"NW & Ord2 & SpNr & "\" & LW"
LG UweD
Anzeige
AW: Erstellen von Ordnern durch VBA
06.04.2018 10:48:03
Ordnern
Hallo Uwe,
vielen Dank für die Erklärung.
Ich habe jetzt mal versucht den Code auszuführen. Leider macht er nicht ganz das, was ich will.

NW = "C:\Users\XY\Desktop\"
Ord1 = "A"
Ord2 = "B"
LW = "Max_Mustermann\"
Arr1 = Array("1RA6", "1RP6", "1RQ6")
Arr2 = Array("1FW4", "1LM1", "1LQ1)
Set Zelle = Cells(3, 1) 'In Zelle(3,1) steht der Wert 9999
'Deine spezifische Nummer
SpNr = Cells(3, 3) 'In Zelle (3,3) steht der Wert "1RA6", der Wert ist in Arr1
'durchlaufe erstes Array
For Each Z In Arr1
If SpNr = Z Then
TMP = True
Call Speichern(NW & Ord1 & SpNr & "\" & LW)
End If
Next
'wenn noch nichts gefunden, durchlaufe zweites Array
For Each Z In Arr2
If SpNr = Z Then
TMP = True
Call Speichern(NW & Ord2 & SpNr & "\" & LW)
End If
Next
'wenn garnichts gefunden wurde
If TMP = "" Then MsgBox "Error! Kein Motortyp gefunden"
End Sub
Leider habe ich das Problem, dass das Programm zwar am Desktop einen neuen Ordner erstellt und auch mit dem Namen des Wertes, der in der Zelle (3,3) steht, speichert.
Jedoch will ich,dass das Programm,
wenn es einen Wert in einem der Arrays findet, der zum Wert in Zelle (3,3) past,
auf das Desktop geht,
hier aufgrund des Wertes in Zelle (3,3) weiß, dass es in Ordner A gehen muss,
wo es dann nach einem Ordner sucht, dessen Name der Wert aus Zelle (3,1) [also 9999] ist
und dort dann einen Ordner erstellt, mit dem Wert aus Zelle (3,3) als Namen. Wenn bereits einer vorhanden ist, dann fragen, ob überschreiben.
Kannst du mir da helfen?
Vielen Dank!
LG Valentina
Anzeige
AW: Erstellen von Ordnern durch VBA
06.04.2018 11:17:25
Ordnern
Hallo
- habe unten SpNr durch Zelle ersetzt
- Oben in den Ordnern noch je ein \ abgehangen

NW = "C:\Users\XY\Desktop\"
Ord1 = "A\"
Ord2 = "B\"
LW = "Max_Mustermann\"
Arr1 = Array("1RA6", "1RP6", "1RQ6")
Arr2 = Array("1FW4", "1LM1", "1LQ1)
Set Zelle = Cells(3, 1) 'In Zelle(3,1) steht der Wert 9999
'Deine spezifische Nummer
SpNr = Cells(3, 3) 'In Zelle (3,3) steht der Wert "1RA6", der Wert ist in Arr1
'durchlaufe erstes Array
For Each Z In Arr1
If SpNr = Z Then
TMP = True
Call Speichern(NW & Ord1 & Zelle & "\" & LW)
End If
Next
'wenn noch nichts gefunden, durchlaufe zweites Array
For Each Z In Arr2
If SpNr = Z Then
TMP = True
Call Speichern(NW & Ord2 & Zelle & "\" & LW)
End If
Next
'wenn garnichts gefunden wurde
If TMP = "" Then MsgBox "Error! Kein Motortyp gefunden"
End Sub

Anzeige

232 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige