Καλημέρα Νίκο.
Οι οδηγίες
#If και
#End If είναι προεπεξεργαστικές οδηγίες (preprocessor directives) στη
VBA.
Χρησιμοποιούνται για να ελέγξουν ποια τμήματα του κώδικα θα συμπεριληφθούν κατά τη μεταγλώττιση σε κώδικα μηχανής, ανάλογα με τις καθορισμένες συνθήκες. Αυτές οι οδηγίες δεν εκτελούνται κατά τη διάρκεια της εκτέλεσης του κώδικα, αλλά κατά τη φάση της μεταγλώττισης.
Χρήση των #If και #End If
Η οδηγία
#If ελέγχει μια συνθήκη κατά τη φάση της μεταγλώττισης και, αν η συνθήκη είναι αληθής, συμπεριλαμβάνει το μπλοκ του κώδικα που ακολουθεί.
Η οδηγία
#Else χρησιμοποιείται για να καθορίσει εναλλακτικό μπλοκ κώδικα, αν η συνθήκη του #If είναι ψευδής.
Η οδηγία
#End If χρησιμοποιείται για να δηλώσει το τέλος του μπλοκ κώδικα που ελέγχεται από το #If.
Παράδειγμα
Ας δούμε ένα παράδειγμα για να κατανοήσουμε καλύτερα τη χρήση αυτών των οδηγιών:
Κώδικας:
#If VBA7 Then
' Αν η έκδοση Office είναι 64 bit (VBA7) τότε
Private Declare PtrSafe Function SHCreateDirectoryEx _
Lib "shell32" Alias "SHCreateDirectoryExW" _
(ByVal hwnd As LongPtr, ByVal pszPath As LongPtr, ByVal psa As Any) As Long
#Else
'Αν η έκδοση Office είναι 32 bit (VBA6) τότε
Private Declare Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" _
(ByVal hwnd As Long, ByVal pszPath As String, ByVal psa As Any) As Long
' Η σουίτα Office που χρησιμοποιείς είναι 64 Bit.
#End If
Η μια από τις δύο συναρτήσεις ανάλογα την έκδοση Microsoft Office Θεωρείται από τον
VBE άκυρη και γι αυτό την "κοκκινίζει".
Αυτό δε σημαίνει ότι είναι σφάλμα αφού θα αγνοηθεί κατά τη φάση της μεταγλώττισης.
Προτείνω να βάλεις όλο τον κώδικα εκτός το Sub Test() σε μια λειτουργική μονάδα (Module) και το Sub Test() όπου χρειαστεί.
Καλή συνέχεια!
Τάσος