Private Profile Strings met INI-bestanden met VBA in Microsoft Excel

Anonim

Private Profile Strings worden vaak gebruikt om gebruikersspecifieke informatie op te slaan buiten de applicatie/het document voor later gebruik.
U kunt bijvoorbeeld informatie over de nieuwste inhoud opslaan in een dialoogvenster/UserForm,
hoe vaak een werkmap is geopend of het laatst gebruikte factuurnummer voor een factuursjabloon.
De informatie kan worden opgeslagen in een INI-bestand, op de lokale harde schijf of in een gedeelde netwerkmap.
Een INI-bestand is een gewoon tekstbestand en de inhoud kan er ongeveer zo uitzien:

[PERSOONLIJK]
Achternaam=Doe
Voornaam=John
Geboortedatum=1.1.1960
Uniek nummer = 123456
Privéprofielreeksen voor elke gebruiker kunnen ook in het register worden opgeslagen.

Excel heeft geen ingebouwde functionaliteit voor het lezen en schrijven naar INI-bestanden zoals Word heeft (System.PrivateProfileString),
je hebt dus een aantal API-functies nodig om dit op een makkelijke manier te doen.
Hier zijn de voorbeeldmacro's voor het schrijven naar en lezen van een INI-bestand dat Private Profile Strings bevat.

Const IniFileName As String = "C:\FolderName\UserInfo.ini"
' het pad en de bestandsnaam naar het bestand met de informatie die u wilt lezen/schrijven

Private Declare Function GetPrivateProfileStringA Lib _ "Kernel32" (ByVal strSection As String, _ ByVal strKey As String, ByVal strDefault As String, _ ByVal strReturnedString As String, _ ByVal lngSize As Long, ByVal strFileName Declare Function Declare Function _ "Kernel32" (ByVal strSection As String, _ ByVal strKey As String, ByVal strString As String, _ ByVal strFileName As String) As Long Private Function WritePrivateProfileString32 (ByVal strFileName As String, _ ByVal strVal strVal strKey, ByVal strValue As String) As Boolean Dim lngValid As Long On Error Volgende hervatten lngValid = WritePrivateProfileStringA(strSection, strKey, _ strValue, strFileName) If lngValid > 0 Then WritePrivateProfile FunctionString32 = True Onfile GetPrivat 0 End-functie , _ ByVal strSection As String, ByVal strKey As String, _ Optioneel strDefault) As String Dim strReturnStri ng As String, lngSize As Long, lngValid As Long On Error Hervatten Volgende If IsMissing(strDefault) Then strDefault = "" strReturnString = Space (1024) lngSize = Len(strReturnString) lngValid = GetPrivateProfileStringA(strSection, strKey, strReturnStringDefault lngSize, strFileName) GetPrivateProfileString32 = Left(strReturnString, lngValid) On Error GoTo 0 End Function ' de onderstaande voorbeelden gaan ervan uit dat het bereik B3:B5 in het actieve blad 'informatie over achternaam, voornaam en geboortedatum bevat. Sub WriteUserInfo() ' slaat informatie op in het bestand IniFileName Indien niet WritePrivateProfileString32(IniFileName, "PERSONAL", _ "Achternaam", Range("B3").Value) Dan MsgBox "Kan gebruikersinfo niet opslaan in " & IniFileName, _ vbExclamation, "Map bestaat niet! " Exit Sub End If WritePrivateProfileString32 IniFileName, "PERSONAL", _ "Lastname", Range("B3").Value WritePrivateProfileString32 IniFileName, "PERSONAL", _ "Firstname", Range("B4").Value WritePrivateProfileString32 IniFileName, "PERSONAL" , _ "Birthdate", Range("B5").Value End Sub Sub ReadUserInfo() ' leest informatie uit het bestand IniFileName If Dir(IniFileName) = "" Dan Exit Sub Range("B3").Formula = GetPrivateProfileString32(IniFileName , _ "PERSONAL", "Achternaam") Range("B4").Formula = GetPrivateProfileString32(IniFileName, _ "PERSONAL", "Firstname") Range("B5").Formula = GetPrivateProfileString32(IniFileName, _ "PERSONAL", "Birthdate") End Sub ' in het onderstaande voorbeeld wordt ervan uitgegaan dat het bereik D4 in het actieve blad ' informatie bevat over het unieke nummer Sub GetNewUniqueNumber() Dim UniqueNumber As Long If Dir(IniFileName) = "" Then Exit Sub UniqueNumber = 0 On Error Volgende UniqueNumber hervatten = CLng(GetPrivateProfileString32(IniFileName, _ "PERSONAL", "UniqueNumber")) bij fout GoTo 0 Range("D4").Formula = UniqueNumber + 1 If Not WritePrivateProfileString32(IniFileName, "PERSONAL", _ "UniqueNumber", Range("D4").Value) Dan MsgBox "Kan gebruikersinfo niet opslaan in " & IniFileName , _ vbUitroepteken, "Map bestaat niet!" Exit Sub End Als End Sub