Avatar billede flash_84 Nybegynder
12. marts 2008 - 14:34 Der er 4 kommentarer

Excel VBA: Indlæsning af data fra .ini fil

Hej.

Jeg har nogle formularer, hvor data indtastet i felter og gemmes i nogle .ini filer.

Jeg vil gerne ha', at når formularerne åbnes, skal data fra .ini filerne sættes ind i de tilhørende indtastningsfelter.

Jeg har set mange vandvittige løsninger på nettet, men de fleste af den giver fejl når jeg prøver at implementere dem.

Ex:
-----------------------
<b>filnavn:</b>

test.ini

<b>filen:</b>

[Navn]
navn_1=bo
navn_2=julie
navn_3=peter


Så vil jeg gerne indlæse de tre navne, når formularen åbnes, og det har jeg kæmpet med hele dagen.

Er der nogen, der har et forslag?


/Flash
Avatar billede flash_84 Nybegynder
12. marts 2008 - 15:09 #1
Det er nu lykkedes mig at finde en løsning.

Jeg starter med at tilføje en reference til ms word.
-----
Tools -> References -> Microsoft Word 11.0 Object Library


Jeg har oprettet en fil (jazz.ini) der har placering: c:\temp\jazz.ini og som ser således ud:
-----
[MySectionName]
TestValue=100


Så har jeg en function der ser således ud:
-----
Function GetIniSetting(FileName As String, Section As String, Key As String) As String

    Dim wd As Word.Application
   
    GetIniSetting = ""
    Set wd = New Word.Application ' create the Word application object
    On Error Resume Next
    GetIniSetting = wd.system.PrivateProfileString(FileName, Section, Key)
    On Error GoTo 0
    wd.Quit
    Set wd = Nothing ' destroy the Word application object
End Function


Functionen kalder jeg således:
-----
Dim MyStringVar As String
   
MyStringVar = GetIniSetting("C:\temp\jazz.ini", "MySectionName", "TestValue")



Det fungerer, men er der nogen der kan forklare hvad "Word.Application" er for noget?



/Flash

Kilde: http://www.erlandsendata.no/english/index.php?d=envbaprofileswordprofiles
Avatar billede learningvba Nybegynder
12. marts 2008 - 15:56 #2
En instans af Word, da du starter Word for at læse indholdet i en ini-fil.

Håber det afklarede dit spørgsmål.
Avatar billede flash_84 Nybegynder
14. marts 2008 - 09:18 #3
Det besvarer mit spørgsmål, ja.

Tak for det.
Avatar billede flash_84 Nybegynder
28. marts 2008 - 18:57 #4
Tidligere postede jeg noget kode til at læse data fra ini filer.
Efterfølgende har jeg erfaret at den kode er meget langsom, hvis man skal læse mange informationer, da det tager tid at oprette instanser af word.

Derfor har jeg fundet en anden, meget effektiv kode. Det er ikke mig der har skrevet koden, så jeg har indsat kilde henvisning i bunden af dette indlæg.

Håber der er nogen, der kan bruge denne information til noget :)


Hilsen Flash


Kode start:
----------------

Option Explicit


Private Declare Function GetPrivateProfileString Lib "kernel32" Alias _
    "GetPrivateProfileStringA" ( _
        ByVal lpApplicationName As String, _
        ByVal lpKeyName As Any, _
        ByVal lpDefault As String, _
        ByVal lpReturnedString As String, _
        ByVal nSize As Long, _
        ByVal lpFileName As String) As Long


Private Declare Function WritePrivateProfileString Lib "kernel32" Alias _
    "WritePrivateProfileStringA" ( _
        ByVal lpApplicationName As String, _
        ByVal lpKeyName As Any, _
        ByVal lpString As Any, _
        ByVal lpFileName As String) As Long


Private Const c_ini_file_name = "Test.Ini"
Private c_WinDir As String
Private c_profile_string As String
Private c_ini_string As String
Private c_ini_no_of_chars As Integer


Sub aIniWriteTest()
    WriteIniFileString "Test", "SubTest", 123
End Sub


Sub aIniReadTest()
    MsgBox ReadIniFileString("Test", "SubTest")
End Sub


'' ***************************************************************************
'' Purpose  : Read from an INI file
''
Public Function ReadIniFileString( _
        ByVal Sect As String, _
        ByVal Keyname As String) As String

Dim worked As Long
Dim RetStr As String * 128
Dim StrSize As Long
   
    c_ini_no_of_chars = 0
    c_ini_string = ""
   
    If Sect = "" Or Keyname = "" Then
        MsgBox "Section Or Key To Read Not Specified !!!", vbExclamation, "INI"
    Else
        c_profile_string = ""
        RetStr = Space(128)
        StrSize = Len(RetStr)
       
        worked = GetPrivateProfileString(Sect, Keyname, "", RetStr, StrSize, _
            ThisWorkbook.Path & "\" & c_ini_file_name)
        If worked Then
            c_ini_no_of_chars = worked
            c_ini_string = Left$(RetStr, worked)
        End If
    End If
    ReadIniFileString = c_ini_string
End Function


'' ***************************************************************************
'' Purpose  : Write to an INI file
''
Public Function WriteIniFileString( _
        ByVal Sect As String, _
        ByVal Keyname As String, _
        ByVal Wstr As String) As String
Dim worked As Long
       
    c_ini_no_of_chars = 0
    c_ini_string = ""
   
    If Sect = "" Or Keyname = "" Then
        MsgBox "Section Or Key To Write Not Specified !!!", vbExclamation, "INI"
    Else
        worked = WritePrivateProfileString(Sect, Keyname, Wstr, _
            ThisWorkbook.Path & "\" & c_ini_file_name)
        If worked Then
            c_ini_no_of_chars = worked
            c_ini_string = Wstr
        End If
        WriteIniFileString = c_ini_string
    End If
   
End Function

----------------
Kode slut


Kilde: http://www.bygsoftware.com/Excel/VBA/ini_files.htm
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB