Yksityiset profiilijonot käyttäen INI-tiedostoja käyttäen VBA: ta Microsoft Excelissä

Anonim

Yksityisiä profiilijonoja käytetään usein käyttäjäkohtaisten tietojen tallentamiseen sovelluksen/asiakirjan ulkopuolelle myöhempää käyttöä varten.
Voit esimerkiksi tallentaa viimeisimmän sisällön tiedot valintaikkunaan/UserForm,
kuinka monta kertaa työkirja on avattu tai viimeksi käytetty laskun numero laskumallissa.
Tiedot voidaan tallentaa INI-tiedostoon, joko paikalliselle kiintolevylle tai jaettuun verkkokansioon.
INI-tiedosto on tavallinen tekstitiedosto ja sen sisältö voi näyttää tältä:

[HENKILÖKOHTAINEN]
Sukunimi = Naaras
Etunimi = John
Syntymäaika = 1.1.1960
UniqueNumber = 123456
Kunkin käyttäjän yksityiset profiilijonot voidaan myös tallentaa rekisteriin.

Excelissä ei ole sisäänrakennettua toimintoa INI-tiedostojen lukemiseen ja kirjoittamiseen, kuten Word on (System.PrivateProfileString),
joten tarvitset pari API-toimintoa tehdäksesi tämän helposti.
Tässä on esimerkkimakrot, joilla kirjoitetaan ja luetaan yksityisen profiilin merkkijonoja sisältävästä INI-tiedostosta.

Const IniFileName As String = "C: \ FolderName \ UserInfo.ini"
'polku ja tiedostonimi tiedostoon, joka sisältää tiedot, jotka haluat lukea/kirjoittaa

Private Declare -toiminto 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 Asenteen nimi StringPrivateString _ "Kernel32" (ByVal strSection As String, _ ByVal strKey As String, ByVal strString As String, _ ByVal strFileNameName As String) Long Private Function WritePrivateProfileString32 (ByVal strFileName As String, _ ByVal strSection As String, String, By ByVal strValue As String) Boolen Dim lngValid niin kauan päällä Virhe Jatka Seuraava lngValid = WritePrivateProfileStringA (strSection, strKey, _ strValue, strFileName) If lngValid> 0 then WritePrivateProfileString32 = True On Error GoTo 0 String FunctionPrivifunktio , _ ByVal strSection merkkijonona, ByVal strKey merkkijonona, _ valinnainen strDefault) merkkijonona Dim strReturnStri ng merkkijonona, lngSize niin kauan, lngValid niin kauan virheessä Jatka seuraavaksi, jos IsMissing (strDefault) Sitten strDefault = "" strReturnString = Space (1024) lngSize = Len (strReturnString) lngValid = GetPrivateProfileStringA (strSection, strKring, lngSize, strFileName) GetPrivateProfileString32 = Vasen (strReturnString, lngValid) On Error GoTo 0 End Function 'alla olevissa esimerkeissä oletetaan, että aktiivisen taulukon alue B3: B5 sisältää tietoja sukunimestä, etunimestä ja syntymäajan alikirjoituksestaUserInfo () tallentaa tiedot tiedosto IniFileName If Not WritePrivateProfileString32 (IniFileName, "PERSONAL", _ "Sukunimi", alue ("B3"). Arvo) Sitten MsgBox "Ei voi tallentaa käyttäjätietoja" & IniFileName, _ vbExclamation, "Kansio ei ole olemassa! " Poistu alipäästä, jos WritePrivateProfileString32 IniFileName, "PERSONAL", _ "Sukunimi", alue ("B3"). Arvo WritePrivateProfileString32 IniFileName, "PERSONAL", _ "Firstname", Range ("B4"). Value WritePrivateProfileStALFP , _ "Syntymäpäivä", alue ("B5"). Arvo End Sub Sub ReadUserInfo () 'lukee tiedot tiedostosta IniFileName If Dir (IniFileName) = "" Sitten Exit Sub Range ("B3"). Formula = GetPrivateProfileString32 (IniFileName) , _ "PERSONAL", "Sukunimi") -alue ("B4"). Kaava = GetPrivateProfileString32 (IniFileName, _ "PERSONAL", "Etunimi") -alue ("B5"). "Syntymäpäivä") Loppuosa "Alla olevassa esimerkissä oletetaan, että aktiivisen taulukon alue D4 sisältää" tietoa yksilöllisestä numerosta Sub GetNewUniqueNumber () Dim UniqueNumber As Long If Dir (IniFileName) = "" Exit Sub UniqueNumber = 0 On Error Jatka seuraava UniqueNumber = CLng (GetPrivateProfileString32 (IniFileName, _ "PERSONAL", "UniqueNumber"))) Virhe GoTo 0 alue ("D4"). , _ vbMerkintä "Kansioita ei ole!" Poistu alipäästä Jos loppuosa