Privata profilsträngar med INI-filer med VBA i Microsoft Excel

Anonim

Privata profilsträngar används ofta för att lagra användarspecifik information utanför applikationen/dokumentet för senare användning.
Du kan till exempel lagra information om det senaste innehållet i en dialogruta/UserForm,
hur många gånger en arbetsbok har öppnats eller det senast använda fakturanumret för en fakturamall.
Informationen kan lagras i en INI-fil, antingen på den lokala hårddisken eller i en delad nätverksmapp.
En INI-fil är en vanlig textfil och innehållet kan se ut ungefär så här:

[PERSONLIG]
Efternamn = Doe
Förnamn = John
Födelsedatum = 1.1.1960
UniqueNumber = 123456
Privata profilsträngar för varje användare kan också lagras i registret.

Excel har ingen inbyggd funktionalitet för att läsa och skriva till INI-filer som Word har (System.PrivateProfileString),
så du behöver ett par API-funktioner för att göra detta på ett enkelt sätt.
Här är exempelmakron för att skriva till och läsa från en INI-fil som innehåller privata profilsträngar.

Const IniFileName As String = "C: \ FolderName \ UserInfo.ini"
'sökvägen och filnamnet till filen som innehåller informationen du vill läsa/skriva

Privat deklarera funktion GetPrivateProfileStringA Lib _ "Kernel32" (ByVal strSection As String, _ ByVal strKey As String, ByVal strDefault As String, _ ByVal strReturnedString As String, _ ByVal lngSize As Long, ByVal strFileNameName As String) As Long Private Declare _ "Kernel32" (ByVal strSection As String, _ ByVal strKey As String, ByVal strString As String, _ ByVal strFileNameName As String) As Long Private Function WritePrivateProfileString32 (ByVal strFileName As String, _ ByVal strSection As String, ByVal strKey As, ByVal strValue As String) As Boolean Dim lngValid Så länge vid fel Återuppta nästa lngValid = WritePrivateProfileStringA (strSection, strKey, _ strValue, strFileName) If lngValid> 0 Then WritePrivateProfileString32 = True On Error GoPoStriveFileSt32 , _ ByVal strSection As String, ByVal strKey As String, _ Valfri strDefault) As String Dim strReturnStri ng As String, lngSize As Long, lngValid As Long On Error Resume Next If IsMissing (strDefault) Then strDefault = "" strReturnString = Space (1024) lngSize = Len (strReturnString) lngValid = GetPrivateProfileStringA (strSection, strKey, _KrD, lngSize, strFileName) GetPrivateProfileString32 = Left (strReturnString, lngValid) On Error GoTo 0 End Function 'exemplen nedan antar att intervallet B3: B5 i det aktiva arket innehåller' information om efternamn, förnamn och födelsedatum Sub WriteUserInfo () 'sparar information i filen IniFileName If Not WritePrivateProfileString32 (IniFileName, "PERSONAL", _ "Efternamn", Range ("B3"). Värde) Då MsgBox "Kan inte spara användarinformation i" & IniFileName, _ vbExclamation, "Mappen finns inte! " Exit Sub End If WritePrivateProfileString32 IniFileName, "PERSONAL", _ "Efternamn", Range ("B3"). Value WritePrivateProfileString32 IniFileName, "PERSONAL", _ "Firstname", Range ("B4"). Value WritePrivateProfileString32 IniFileName, , _ "Födelsedatum", intervall ("B5"). Value End Sub Sub ReadUserInfo () 'läser information från filen IniFileName If Dir (IniFileName) = "" Sedan avsluta delintervall ("B3"). Formula = GetPrivateProfileString32 (IniFileName , _ "PERSONAL", "Efternamn") Område ("B4"). Formel = GetPrivateProfileString32 (IniFileName, _ "PERSONAL", "Förnamn") Område ("B5"). Formel = GetPrivateProfileString32 (IniFileName, _ "PERSONAL", "Födelsedatum") Slut Sub 'exemplet nedan antar att intervallet D4 i det aktiva bladet innehåller information om det unika numret Sub GetNewUniqueNumber () Dim UniqueNumber As Long If Dir (IniFileName) = "" Stäng sedan Sub UniqueNumber = 0 vid fel Återuppta nästa UniqueNumber = CLng (GetPrivateProfileString32 (IniFileName, _ "PERSONAL", "UniqueNumber")) Vid fel GoTo 0 Range ("D4"). Formel = UniqueNumber + 1 If Not WritePrivateProfileString32 (IniFileName, "PERSONAL", _ "UniqueNumber", Range ("D4"). Value) Sedan kan MsgBox "inte spara användarinformation i" & IniFileName , _ vbExclamation, "Mappen finns inte!" Avsluta Sub End Om End Sub