Code unklar

20/01/2016 - 19:19 von Harald Friis | Report spam
Hallo,

gerade bin ich von m.p.d.excel hierher umgezogen, also erst einmal guten
Tag.

... und dann noch eine Frage: ich bin leider kein großer VBA-Kenner,
nutze aber einige Funktionen gerne und oft.

U.A. habe ich Makro, das mir Verzeichnisse erstellt. Ich drucke es unten ab.

Das müsste ich an zwei Punkten àndern:

- Die Wichtigste: derzeit schaut das Makro, ob in Zeile 2-16 die erste
Spalte gefüllt ist, dann erstellt er einen Ordner.

Neu müsste ich Ordner erstellen, die a) ein bestimmtes Kalender-Datum in
einem Feld und 'x' in einem anderen Feld stehen haben. Das Makro müsste
also ein Datum erfragen: "Welches Beginndatum?". Darauf werden dann alle
Ordner erstellt, die am fraglichen Datum, also z.B. am '20.01.2016'
angemeldet und - siehe Spalte 'Anwesend' - auch gekommen sind.

Kann man das so umbauen? Habt ihr Tipps für mich?

- Der Pfad: derzeit erfragt das Makro, wo die Ordner hingespeichert
werden sollen.

Neu: sie werden immer an dieselbe Stelle geschrieben. Könnte ich also
statt der Abfrage den Pfad fest einstellen? Ich habe es versucht, aber
bin leider auch gescheitert.

Danke für Hinweise oder Hilfen.

Gruß

Harald Friis

Sub Ordner()
Dim i As Integer
Dim sPfad As String
Dim AppShell As Object
Dim BrowseDir As Variant

' catch any errors
On Error GoTo ErrorHandling

' determine path
Set AppShell = CreateObject("Shell.Application")
Set BrowseDir = AppShell.BrowseForFolder(0, "Speicherort für
Serienbriefe auswàhlen", 0, 16)

If BrowseDir = "Desktop" Then
Path = CreateObject("WScript.Shell").SpecialFolders("Desktop")
Else
Path = BrowseDir.items().Item().Path
End If

If Path = "" Then GoTo ErrorHandling

Path = Path & "\Ordner" & "\"
MkDir Path

On Error GoTo ErrorHandling

For i = 2 To 16
sPfad = Cells(i, 3).Value & "_" & Cells(i, 4).Value
If Cells(i, 1) <> "" Then MkDir Path & sPfad
Next

ErrorHandling:
Application.Visible = True

If Err.Number = 76 Then
MsgBox "Der ausgewàhlte Speicherort ist ungültig", vbOKOnly +
vbCritical
ElseIf Err.Number = 4198 Then
MsgBox "Der ausgewàhlte Speicherort ist ungültig", vbOKOnly +
vbCritical
ElseIf Err.Number = 91 Then
MsgBox "Exportieren abgebrochen", vbOKOnly + vbExclamation
ElseIf Err.Number > 0 Then
MsgBox "Unbekannter Fehler: " & Err.Number & " - Bitte Makro
erneut ausführen.", vbOKOnly + vbCritical
Else
MsgBox "Ordner erfolgreich erstellt", vbOKOnly + vbInformation
End If

End Sub
 

Lesen sie die antworten

#1 Hans Alborg
21/01/2016 - 20:36 | Warnen spam
Hallo Harald,

"Harald Friis" schrieb...

Könnte ich also statt der Abfrage den Pfad fest einstellen? Ich habe es
versucht, aber


bin leider auch gescheitert.

Es gibt oft Schreibfehler wenn man versucht einen Pfad einzutragen, ist mir
auch so gegangen.
Lass mal vom Originalcode den Pfad in eine Zelle schreiben!

Die Zeile

Tabelle2.Cells(10,10).value = Path

in den Code dort einfügen, wo der Pfad schon entstanden ist.
Tabelle2 (ggf. anpassen!) schreibt den Pfad in eine leeres Blatt damit es
nicht stört.

Jetzt den Zellinhalt in den Code Kopieren

Path = ""

etwa. Dann hast Du die korrekte Schreibweise. Diese kannst Du jetzt noch
anpassen wenn nötig.

Dann direkt nach den DIM's die Ordnerwahl überspringen:

Goto fester_Pfad

[Code]

fester_Pfad:

Path = ""
Path = Path & "\Ordner" & "\"
For i = ..

Neu müsste ich Ordner erstellen, die a) ein bestimmtes Kalender-Datum in


einem Feld und 'x' in einem anderen Feld stehen haben.

Das Makro müsste also ein Datum erfragen: "Welches Beginndatum?"


-Bedeutet nicht dasselbe, sondern das oder ein höheres?

Du mußt ein Datum erst vorgeben. Oben erstmal eine Variable setzen, z.B:

Dim Beg_Datum As Date

Dann vor der Schleife z.B. eine Input- Box:

Beg_Datum = InputBox("Bitte Datum eingeben")

In der Schleife sollte es etwa so aussehen (beachte x / X):

For i = 2 To 16
if Cells(i,3).Value >= Beg_Datum AND _
Cells(i, 4).Value = "x" then
sPfad = Cells(i, 3).Value & "_" & Cells(i, 4).Value
MkDir Path & sPfad
End If
Next


Den Zeilen des Errorhandlings würde ich zum testen erstmal ein Hochkomma (')
davorsetzen um sie abzuschalten (die unter der Schleife).

Das ist mein Vorschlag in aller "Einfachheit". Für die Datumseingabe gibt es
noch weit bessere und "schickere" Möglichkeiten, aber das hier ist erstmal
was zum probieren.

Hans

Ähnliche fragen