Ciągi profili prywatnych przy użyciu plików INI przy użyciu VBA w programie Microsoft Excel

Anonim

Ciągi profili prywatnych są często używane do przechowywania informacji specyficznych dla użytkownika poza aplikacją/dokumentem do późniejszego wykorzystania.
Możesz na przykład przechowywać informacje o najnowszej zawartości w oknie dialogowym/Formularzu użytkownika,
ile razy skoroszyt został otwarty lub ostatnio użyty numer faktury dla szablonu faktury.
Informacje mogą być przechowywane w pliku INI, na lokalnym dysku twardym lub w udostępnionym folderze sieciowym.
Plik INI to zwykły plik tekstowy, a jego zawartość może wyglądać mniej więcej tak:

[OSOBISTY]
Nazwisko=Doe
Imię=Jan
Data urodzenia=1.1.1960
Niepowtarzalny numer=123456
Ciągi profili prywatnych dla każdego użytkownika mogą być również przechowywane w Rejestrze.

Excel nie ma wbudowanej funkcji do czytania i zapisywania w plikach INI, takich jak Word (System.PrivateProfileString),
więc potrzebujesz kilku funkcji API, aby zrobić to w łatwy sposób.
Oto przykładowe makra do zapisywania i odczytywania z pliku INI zawierającego prywatne ciągi profili.

Const IniFileName As String = "C:\FolderName\UserInfo.ini"
' ścieżka i nazwa pliku do pliku zawierającego informacje, które chcesz odczytać/zapisać

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 As String) _ "Kernel32" (ByVal strSection As String, _ ByVal strKey As String, ByVal strString As String, _ ByVal strFileNameName As String) As Long Prywatna funkcja WritePrivateProfileString32(ByVal strFileName As String, _ ByVal strSection As String, ByVal strKey As String, _ ByVal strValue As String) As Boolean Dim lngValid As Long W przypadku błędu Wznów Dalej lngValid = WritePrivateProfileStringA(strSection, strKey, _ strValue, strFileName) If lngValid > 0 Then WritePrivateProfileString32 = True W przypadku błędu GoTo 0 , _ ByVal strSection As String, ByVal strKey As String, _ Opcjonalne strDefault) As String Dim strReturnStri ng As String, lngSize As Long, lngValid As Long w przypadku błędu Wznów Next If IsMissing(strDefault) Then strDefault = "" strReturnString = Space(1024) lngSize = Len(strReturnString) lngValid = GetPrivateProfileStringA(strSection, strKey, _ strDefault, strReturnString lngSize, strFileName) GetPrivateProfileString32 = Left(strReturnString, lngValid) On Error GoTo 0 End Function ' poniższe przykłady zakładają, że zakres B3:B5 w aktywnym arkuszu zawiera ' informacje o Lastname, Firstname i Birthdate Sub WriteUserInfo() ' zapisuje informacje w plik IniFileName If Not WritePrivateProfileString32(IniFileName, "PERSONAL", _ "Lastname", Range("B3").Value) Then MsgBox "Nie można zapisać informacji o użytkowniku w " & IniFileName, _ vbExclamation, "Folder nie istnieje! " Zakończ pod koniec, jeśli WritePrivateProfileString32 IniFileName, "PERSONAL", _ "Lastname", Range("B3").Value WritePrivateProfileString32 IniFileName, "PERSONAL", _ "Firstname", Range("B4").Value WritePrivateProfileString32 IniSONFileName", "PERSONAL" , _ "Birthdate", Range("B5").Value End Sub ReadUserInfo() ' odczytuje informacje z pliku IniFileName If Dir(IniFileName) = "" Then Exit Sub Range("B3").Formula = GetPrivateProfileString32(IniFileName , _ "PERSONAL", "Lastname") Range("B4").Formula = GetPrivateProfileString32(IniFileName, _ "PERSONAL", "Firstname") Range("B5").Formula = GetPrivateProfileString32(IniFileName, _ "PERSONAL", "Birthdate") End Sub ' w poniższym przykładzie założono, że zakres D4 w aktywnym arkuszu zawiera ' informacje o unikalnym numerze Sub GetNewUniqueNumber() Dim UniqueNumber As Long If Dir(IniFileName) = "" Then Exit Sub UniqueNumber = 0 W przypadku błędu Resume Next UniqueNumber = CLng(GetPrivateProfileString32(IniFileName, _ "PERSONAL", "UniqueNumber")) W przypadku błędu Przejdź do 0 Range("D4").Formula = UniqueNumber + 1 If Not WritePrivateProfileString32(IniFileName, "PERSONAL", _ "UniqueNumber", Range("D4").Value) Then MsgBox "Nie można zapisać informacji o użytkowniku w " & IniFileName , _ vbExclamation, "Folder nie istnieje!" Zakończ Sub Koniec Jeśli Koniec Sub