Șiruri de profil privat folosind fișiere INI folosind VBA în Microsoft Excel

Anonim

Șirurile de profil privat sunt adesea folosite pentru a stoca informații specifice utilizatorului în afara aplicației / documentului pentru utilizare ulterioară.
De exemplu, puteți stoca informații despre cel mai recent conținut într-un dialog / UserForm,
de câte ori a fost deschis un registru de lucru sau ultimul număr de factură utilizat pentru un șablon de factură.
Informațiile pot fi stocate într-un fișier INI, fie pe hard diskul local, fie într-un folder de rețea partajat.
Un fișier INI este un fișier text obișnuit, iar conținutul ar putea arăta cam așa:

[PERSONAL]
Nume = Doe
Prenume = John
Data nașterii = 1.1.1960
Număr unic = 123456
Șirurile de profil privat pentru fiecare utilizator pot fi, de asemenea, stocate în registru.

Excel nu are funcționalitate încorporată pentru citirea și scrierea în fișiere INI precum Word are (System.PrivateProfileString),
deci aveți nevoie de câteva funcții API pentru a face acest lucru într-un mod ușor.
Iată exemplele de macrocomenzi pentru scrierea și citirea dintr-un fișier INI care conține șiruri de profil privat.

Const IniFileName As String = "C: \ FolderName \ UserInfo.ini"
„calea și numele fișierului către fișierul care conține informațiile pe care doriți să le citiți / scrieți

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 strFileNameNameNameName As String) _ "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 ByVal strValue As String) As Boolean Dim lngValid As Long On Error Resume Next lngValid = WritePrivateProfileStringA (strSection, strKey, _ strValue, strFileName) If lngValid> 0 Then WritePrivateProfileString32 = True On Error GoToPrive FunctionFP , _ ByVal strSection As String, ByVal strKey As String, _ Opțional 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, strKault, _ lngSize, strFileName) GetPrivateProfileString32 = Left (strReturnString, lngValid) On Error GoTo 0 End Function 'exemplele de mai jos presupune că intervalul B3: B5 din foaia activă conține' informații despre Lastname, Prenume și Birthdate Sub WriteUserInfo () 'salvează informații în fișierul IniFileName Dacă nu WritePrivateProfileString32 (IniFileName, "PERSONAL", _ "Lastname", Range ("B3"). Valoare) Apoi MsgBox "Nu se poate salva informațiile utilizatorului în" & IniFileName, _ vbExclamation, "Folderul nu există! " Exit Sub End If WritePrivateProfileString32 IniFileName, "PERSONAL", _ "Lastname", Range ("B3"). Value WritePrivateProfileString32 IniFileName, "PERSONAL", _ "Firstname", Range ("B4"). Value WritePrivateProfileString32 IniFile . , _ "PERSONAL", "Lastname") Range ("B4"). Formula = GetPrivateProfileString32 (IniFileName, _ "PERSONAL", "Firstname") Range ("B5"). Formula = GetPrivateProfileString32 (IniFileName, _ "PERSONAL", "Data nașterii") End Sub 'exemplul de mai jos presupune că intervalul D4 din foaia activă conține' informații despre numărul unic Sub GetNewUniqueNumber () Dim UniqueNumber As Long If Dir (IniFileName) = "" Apoi Ieșiți sub UniqueNumber = 0 On Error Reluați următorul număr unic = CLng (GetPrivateProfileString32 (IniFileName, _ "PERSONAL", "UniqueNumber")) la eroare GoTo 0 Range ("D4"). Formula = Număr unic + 1 Dacă nu WritePrivateProfileString32 (IniFileName, "PERSONAL", _ "UniqueNumber", Range ("D4"). Valoare) Apoi MsgBox "Nu pot salva informațiile utilizatorului în" & IniFileName , _ vbExclamation, "Folderul nu există!" Exit Sub End dacă End Sub