Εμφάνιση ενός μόνο μηνύματος
  #3  
Παλιά 13-03-12, 23:52
Το avatar του χρήστη Tasos
Tasos Ο χρήστης Tasos δεν είναι συνδεδεμένος
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.035
Προεπιλογή

Καλησπέρα Γιάννη!

Πληροφοριακά σου λέω ότι η έκφραση MkDir "C:\Temp\TestFolder" θα δημιουργήσει τον φάκελο TestFolder μόνο αν υπάρχει ο φάκελος "C:\Temp\".
Διαφορετικά θα προκληθεί σφάλμα εκτέλεσης.
Αν είσαι δεν είσαι σίγουρος αν
"C:\Temp\" υπάρχει στο σύστημα, τότε θα πρέπει
να τροποποιήσεις τον κώδικα σου έτσι που να ελέγξει την ύπαρξη κάθε φακέλου που αναφέρεται στη διαδρομή C:\Temp\TestFolder και αν δεν υπάρχει να τον δημιουργήσει

Για παράδειγμα:

Κώδικας:
Sub test()
    If Dir("C:\Temp1", vbDirectory) = vbNullString Then MkDir "C:\Temp1"
    If Dir("C:\Temp1\test", vbDirectory) = vbNullString Then MkDir "C:\Temp1\test"
End Sub
Ακόμα πιο απλά (ειδικά σε διαδρομές με περισσότερα επίπεδα) μπορεί να γίνει με τη χρήση της συνάρτησης MakeSureDirectoryPathExists (Windows API).
Επιστρέφει True αν επιτύχει και False αν προκληθεί κάποιο σφάλμα κατά την εκτέλεση της.

Η συνάρτηση περνιέται στην πάνω από όλες τις μακροεντολές μιας λειτουργικής μονάδας όπως
φαίνεται στον κώδικα παρακάτω:

Κώδικας:
Option Explicit
 Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long

Sub test1()
Dim x As Boolean
x = MakeSureDirectoryPathExists("C:\Temp1\test1\test1")
MsgBox x
End Sub
Για να έχουμε συμβατότητα σε συστήματα με λειτουργικό 64 bit και Office 2010 χρησιμοποιούμε:

Κώδικας:
Option Explicit
#If VBA7 Then
    #If Win64 Then
        Private Declare PtrSafe Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) _
                As LongPtr
    #Else
        Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long
    #End If
#Else
        Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long
#End If

Sub test1()
Dim x As Boolean
x = MakeSureDirectoryPathExists("C:\Temp1\test1\test1")
MsgBox x 
End Sub
Για την εξερεύνηση των Windows σου προτείνω τον παρακάτω σύνδεσμο: http://www.ms-office.gr/forum/1418-post5.html

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση