Discussione:
Mkdir non lo capisco (VBA)
(troppo vecchio per rispondere)
?Mike?
2005-09-16 14:21:58 UTC
Permalink
Ciao NG,

sono alle prese con uno strano problema.
Ovvero un problema che non so identificare.

Ho la necessità di creare una directory e per questo uso il codice:
-------------------------------------------
Dim pista As String
ChDrive "D:\"
pista = "D:\PROGETTO VBA\WORD\" & Format(Now, "ddmm")
MkDir pista
--------------------------------------------
Il problema è che il codice va in errore: "Non trova il percorso".
Beh, ci credo bene, la directory la voglio creare exnovo.

Altro problema: una volta ogni n tentativi invece riesce a creare la
directory.

E' successo anche a voi?
Sapete darmi un suggerimento?

Grazie a tutti, Michele.
Ivan
2005-09-18 17:31:47 UTC
Permalink
Post by ?Mike?
Ciao NG,
sono alle prese con uno strano problema.
Ovvero un problema che non so identificare.
-------------------------------------------
Dim pista As String
ChDrive "D:\"
pista = "D:\PROGETTO VBA\WORD\" & Format(Now, "ddmm")
MkDir pista
--------------------------------------------
Il problema è che il codice va in errore: "Non trova il percorso".
Beh, ci credo bene, la directory la voglio creare exnovo.
Altro problema: una volta ogni n tentativi invece riesce a creare la
directory.
E' successo anche a voi?
Sapete darmi un suggerimento?
Grazie a tutti, Michele.
Ciao Michele,

io ho modificato leggermente il codice, ma non riesco a riprodurre il tuo
errore :

Public Sub NuovaDir()
'-------------------------------------------
Dim pista As String
ChDrive "C:\"

pista = "C:\Temp\" & Format(Now, "ddmm")
If Dir(pista, vbDirectory) = "" Then
MkDir pista
Else
MsgBox "questa cartella esiste già!"

End If
'--------------------------------------------

End Sub


non saprei come riprodurre la tua situazione.


Ivan
?Mike?
2005-09-19 08:45:01 UTC
Permalink
Post by Ivan
Post by ?Mike?
Ciao NG,
sono alle prese con uno strano problema.
Ovvero un problema che non so identificare.
-------------------------------------------
Dim pista As String
ChDrive "D:\"
pista = "D:\PROGETTO VBA\WORD\" & Format(Now, "ddmm")
MkDir pista
--------------------------------------------
Il problema è che il codice va in errore: "Non trova il percorso".
Beh, ci credo bene, la directory la voglio creare exnovo.
Altro problema: una volta ogni n tentativi invece riesce a creare la
directory.
E' successo anche a voi?
Sapete darmi un suggerimento?
Grazie a tutti, Michele.
Ciao Michele,
io ho modificato leggermente il codice, ma non riesco a riprodurre il tuo
Public Sub NuovaDir()
'-------------------------------------------
Dim pista As String
ChDrive "C:\"
pista = "C:\Temp\" & Format(Now, "ddmm")
If Dir(pista, vbDirectory) = "" Then
MkDir pista
Else
MsgBox "questa cartella esiste già!"
End If
'--------------------------------------------
End Sub
non saprei come riprodurre la tua situazione.
Ivan
Ciao Ivan,

ti ringrazio per l'attenzione mostrata al mio problema.

Il sabato mattina mi ha portato consiglio.
Credo di aver scoperto un BUG nel comando MKDIR implementato in VBA.

Il comando MkDir NON E' IN GRADO DI CREARE UNA DIRECTORY OLTRE IL PRIMO
LIVELLO ESISTENTE.

Cerco di spiegarmi meglio.
Post by Ivan
pista = "C:\Temp\" & Format(Now, "ddmm")
If Dir(pista, vbDirectory) = "" Then
MkDir pista
Else
MsgBox "questa cartella esiste già!"
e modifichiamolo come segue
Post by Ivan
pista = "C:\Temp\bug\" & Format(Now, "ddmm")
If Dir(pista, vbDirectory) = "" Then
MkDir pista
Else
MsgBox "questa cartella esiste già!"
Se provi a lanciare questa seconda versione di codice sarai in grado di
rigenerare l'errore.

La differenza tra i due consiste nel fatto che mentre nel primo caso chiedo
al VBA di generare la cartella "ddmm" in una cartella già esistente
"C:\Temp\", nel secondo gli chiedo una cosa, per lui impossibile,
"C:\Temp\BUG".
Ovvero, gli chiedo di creare "BUG\ddmm" invece di "ddmm".
A me sembrava, inizialmente, la stessa cosa ma è evidente che il vba ragiona
in modo differente.

Spero di essermi spiegato in modo appropriato.

Grazie ancora, Michele.
Maurizio Borrelli
2005-09-19 17:39:59 UTC
Permalink
[...]
Post by ?Mike?
Credo di aver scoperto un BUG nel comando MKDIR implementato in VBA.
Il comando MkDir NON E' IN GRADO DI CREARE UNA DIRECTORY OLTRE IL PRIMO
LIVELLO ESISTENTE.
[...]

Ciao, ?Mike?.

Bug? Quale bug? Leggi la guida:

Istruzione MkDir
Crea una nuova directory o cartella.
Sintassi
MkDir percorso
L'argomento obbligatorio percorso è un'espressione stringa che identifica la
directory o la cartella da creare. Può includere l'unità. Se l'unità non
viene specificata, MkDir crea una nuova directory o cartella nell'unità
corrente.

*Una* nuova directory. Una! Cioe' non due, non tre, ecc. ;-)
--
Ciao :o)
Maurizio Borrelli, Microsoft Office Access MVP
--------
?SPQR(C)
X
--------
?Mike?
2005-09-20 15:57:04 UTC
Permalink
Post by Maurizio Borrelli
[...]
Post by ?Mike?
Credo di aver scoperto un BUG nel comando MKDIR implementato in VBA.
Il comando MkDir NON E' IN GRADO DI CREARE UNA DIRECTORY OLTRE IL PRIMO
LIVELLO ESISTENTE.
[...]
Ciao, ?Mike?.
Istruzione MkDir
Crea una nuova directory o cartella.
Sintassi
MkDir percorso
L'argomento obbligatorio percorso è un'espressione stringa che identifica la
directory o la cartella da creare. Può includere l'unità. Se l'unità non
viene specificata, MkDir crea una nuova directory o cartella nell'unità
corrente.
*Una* nuova directory. Una! Cioe' non due, non tre, ecc. ;-)
--
Ciao :o)
Maurizio Borrelli, Microsoft Office Access MVP
--------
?SPQR(C)
X
--------
Ciao Maurizio,
grazie per la precisazione.

Saluti a tutto il NG.
Sergio MAZZA
2005-09-19 08:40:49 UTC
Permalink
Post by ?Mike?
Ciao NG,
sono alle prese con uno strano problema.
Ovvero un problema che non so identificare.
-------------------------------------------
Dim pista As String
ChDrive "D:\"
pista = "D:\PROGETTO VBA\WORD\" & Format(Now, "ddmm")
MkDir pista
--------------------------------------------
Il problema è che il codice va in errore: "Non trova il percorso".
Beh, ci credo bene, la directory la voglio creare exnovo.
Altro problema: una volta ogni n tentativi invece riesce a creare la
directory.
E' successo anche a voi?
Sapete darmi un suggerimento?
Grazie a tutti, Michele.
Se non ricordo male, MKDir non crea l'ultima cartella (o directory) se non è
completo il percorso precedente.
Almeno dalle prove che ho effettuato è in quel momento che presenta
quell'errore...

Ciao.
--
Sergio MAZZA
?Mike?
2005-09-19 08:47:15 UTC
Permalink
Post by Sergio MAZZA
Post by ?Mike?
Ciao NG,
sono alle prese con uno strano problema.
Ovvero un problema che non so identificare.
-------------------------------------------
Dim pista As String
ChDrive "D:\"
pista = "D:\PROGETTO VBA\WORD\" & Format(Now, "ddmm")
MkDir pista
--------------------------------------------
Il problema è che il codice va in errore: "Non trova il percorso".
Beh, ci credo bene, la directory la voglio creare exnovo.
Altro problema: una volta ogni n tentativi invece riesce a creare la
directory.
E' successo anche a voi?
Sapete darmi un suggerimento?
Grazie a tutti, Michele.
Se non ricordo male, MKDir non crea l'ultima cartella (o directory) se non
è completo il percorso precedente.
Almeno dalle prove che ho effettuato è in quel momento che presenta
quell'errore...
Ciao.
--
Sergio MAZZA
Ciao Sergio,

SI, il problema era quello che sottolinei tu (l'ho scoperto* solo sabato
mattina).

Grazie ancora, Michele.

(*) Ero convinto di aver scoperto un bug di VBA.
Maurizio Benvenuti
2005-09-22 18:26:57 UTC
Permalink
Post by ?Mike?
Ciao NG,
sono alle prese con uno strano problema.
Ovvero un problema che non so identificare.
-------------------------------------------
Dim pista As String
ChDrive "D:\"
pista = "D:\PROGETTO VBA\WORD\" & Format(Now, "ddmm")
MkDir pista
--------------------------------------------
Il problema è che il codice va in errore: "Non trova il percorso".
Beh, ci credo bene, la directory la voglio creare exnovo.
Altro problema: una volta ogni n tentativi invece riesce a creare la
directory.
E' successo anche a voi?
Sapete darmi un suggerimento?
Grazie a tutti, Michele.
Per creare una catena di cartelle se non esistono ti conviene molto più
semplicemente usare un'API di sistema

Aggiungi questa riga nel modulo in cui ti serve questa funzionalità:
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll"
(ByVal lpPath As String) As Long

poi la chiami così (è importante il backslash alla fine, non dimenticarlo!):
Dim r as Long
r = MakeSureDirectoryPathExists("D:\PROGETTO VBA\WORD\" & Format$(Now,
"ddmm") & "\")

restituisce 0 in caso di fallimento, e non-0 in caso di successo


Questa API è implementata da Windows NT 3.1 / Windows 95 in poi, quindi non
avrai nessun problema di compatibilità.


Byee,
Maurizio
?Mike?
2005-09-23 06:37:52 UTC
Permalink
"Maurizio Benvenuti" <zeross(remove)@libero.it> wrote in message news:OJ%***@TK2MSFTNGP14.phx.gbl...
Gentilissimo.
Grazie Maurizio.

Ciao, Michele.

Loading...