Excel und Ini-Datei

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox


Excel-Version: 8.0 (Office 97)
nach unten

Betrifft: Excel und Ini-Datei
von: Peter
Geschrieben am: 22.05.2002 - 16:54:51

Hallo,

ich habe mit Word97 (VBA-Makro) eine Ini-Datei erstellt. Kann ich diese Ini-Datei auch mit Excel97 auslesen um mit den dortigen Werten Variablen in Excel zu füllen ?

Kann ich aus Word97 eine vorhandene Exceltabelle starten und wenn man die ini-datei verwenden kann gleich die Ini-datei beim start zur Verfügung stellen und die Variablen in meinem Excel97 Makro mit leben zu füllen ?

Gruß

Peter


nach oben   nach unten

Re: Excel und Ini-Datei
von: PeterA
Geschrieben am: 22.05.2002 - 17:02:34

Hallo Peter

Ein Codebeispiel zum Auslesen einer TXT Datei.
Falls du Probleme beim Anpassen an dein Programm hast melde
dich noch mal.

PeterA


Sub Daten_lesen()
Dim As String
Dim Filenum As Integer
Filenum = FreeFile()
h = 1

Dim Spalte1 As Double
Dim Spalte2 As Double
Dim Spalte3 As Double
Dim Spalte4 As Double
Dim Spalte5 As Double
Dim Spalte6 As Double
Dim Spalte7 As Double
Dim Spalte8 As Double

Open "D:\FIL\FILDAT1.TXT" For Input Access Read As #Filenum
Do While Not EOF(Filenum)
             Line Input #Filenum, x
If Left(x, 1) = "F" Then
Posnr = Left(x, 11)
Spalte1 = Mid(x, 12, 15)

Spalte2 = Mid(x, 28, 15)
Spalte3 = Mid(x, 44, 15)
Spalte4 = Mid(x, 60, 15)
Spalte5 = Mid(x, 76, 15)
Spalte6 = Mid(x, 92, 15)
Spalte7 = Mid(x, 108, 15)
Spalte8 = Mid(x, 124, 15)

Worksheets("Tabelle1").Cells(h, 1) = Trim(Posnr)
Worksheets("Tabelle1").Cells(h, 2) = Spalte1
Worksheets("Tabelle1").Cells(h, 3) = Spalte2
Worksheets("Tabelle1").Cells(h, 4) = Spalte3
Worksheets("Tabelle1").Cells(h, 5) = Spalte4
Worksheets("Tabelle1").Cells(h, 6) = Spalte5
Worksheets("Tabelle1").Cells(h, 7) = Spalte6
Worksheets("Tabelle1").Cells(h, 8) = Spalte7
Worksheets("Tabelle1").Cells(h, 9) = Spalte8

h = h + 1

End If
Loop
Close #Filenum
Worksheets("Tabelle1").Select
End Sub


nach oben   nach unten

Re: Excel und Ini-Datei
von: Rolf, Lgh.
Geschrieben am: 22.05.2002 - 21:10:25

Hallo Peter,
ein Beispiel:

Option Explicit

' zunächst die benötigten API-Deklarationen (INI)
Public 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

Public 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

'Eintrag aus INI-Datei lesen
Public Function _
       GetIniString _
       (ByVal Sektion As String, _
        ByVal Titel As String, _
        ByVal Vorgabe As String, _
        ByVal INIFile As String, _
        Optional ByVal nSize As Integer = 256) As String

  Dim lResult As Long
  Dim sValue As String

  sValue = Space$(nSize)
  lResult = GetPrivateProfileString(Sektion, Titel, _
                                    Vorgabe, sValue, _
                                    nSize, INIFile)
  GetIniString = Left$(sValue, lResult)
End Function

' Alle Schlüsselwörter eines Abschnittes auslesen
' und in die Tabelle "Serverdaten" schreiben
Sub Init_Keys()

  Dim strKeys As String
  Dim strServer As String
  Dim strDez As String
  Dim Key() As String
  Dim As Integer

  strServer = GetSetting("BK", "Path", "Serververzeichnis", "")
  strServer = strServer & "Server.INI"
  strDez = GetSetting("BK", "SBDaten", "SB_Dez", "")

  ' vbNullString übergeben, um alle gespeicherten
  ' Keys zu ermitteln
  strKeys = GetIniString(strDez, vbNullString, _
                         "", strServer, 32767)

  ' Sind überhaupt Einträge vorhanden?
  If strKeys <> "" Then

    ' Rückgabestring "splitten"
    Key = Split(strKeys, vbNullChar)

    ' Alle Einträge der Tabelle hinzufügen
    With ThisWorkbook.Worksheets("Serverdaten")
      For I = 0 To UBound(Key) - 1
        Cells(I + 1, 1) _
        = Key(I)
        Cells(I + 1, 2) _
        = GetIniString(strDez, Key(I), "", strServer)
        Names.Add Name:=Key(I), RefersTo:="=Serverdaten!$B$" & I + 1
        MsgBox Key(I) & vbTab & Cells(I + 1, 2)
      Next I
    End With
  End If
End Sub


Weitere Hilfe findest Du auch hier: http://www.visualbasic-archiv.de/workshop/workshop17.php3.
Gruss Rolf
nach oben   nach unten

Die elegante Methode ...
von: Thomas Risi
Geschrieben am: 22.05.2002 - 23:15:15

Hallo Peter

Hier bietet sich eine Klasse zur Verwendung an ...

Füge in das Excel-Projekt eine Klasse ein, und benenne sie mit 'clsIni'. Dann fügst Du folgenden Code ein.

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 StringAs Long
 
Private Declare Function WritePrivateProfileString_ Lib "kernel32" _
 Alias "WritePrivateProfileStringA" ( _
 ByVal lpApplicationName As String, _
 ByVal lpKeyName As String, _
 ByVal lpDefault As String, _
 ByVal lpFileName As StringAs Long


' Datei = Pfad zur ini-Datei
' Sektion = Zu ändernde Section
' Schlüssel = Zu ändernder Key

Public Function GetPrivateProfileString(Datei$, Sektion$, Key$) As String
Dim A As Long, Wert As String
    
    Wert = Space$(255)
    A = GetPrivateProfileString_(Sektion$, Key$, "", Wert$, Len(Wert$), Datei$)
    GetPrivateProfileString = Left$(Wert$, A&)
    
End Function

Public Function WritePrivateProfileString(Datei$, ByVal Sektion$, ByVal Key$, ByVal Wert$)
Dim A As Long
    
    A = WritePrivateProfileString_(Sektion$, Key$, Wert$, Datei$)
    
End Function




In einem normalen Modul erstellst Du dann nur noch eine Instanz der Klasse und kannst auf deren Methoden zugreifen.

Option Explicit

Dim iniClass As clsIni  ' Klasse einbinden


Sub Test_Schreiben()
Dim Path$: Path = "C:\Excel\TestXL.ini"
Dim Section$: Section = "TEST"
Dim Key$: Key = "LastUsedRange"
    
    Set iniClass = New clsIni   ' Instanz erstellen
    
    iniClass.WritePrivateProfileString Path, Section, Key, "C8"
    iniClass.WritePrivateProfileString Path, Section, "HelloMsg", "Hi, wie geht's ?"
    
    Set iniClass = Nothing
    
End Sub


Sub Test_Lesen()
Dim Path$: Path = "C:\Excel\TestXL.ini"
Dim Section$: Section = "TEST"
Dim Key$: Key = "LastUsedRange"
    
    Set iniClass = New clsIni   ' Instanz erstellen
    
    MsgBox iniClass.GetPrivateProfileString(Path, Section, "HelloMsg")
    
    Set iniClass = Nothing
    
End Sub

     Code eingefügt mit Syntaxhighlighter 1.13




Um alle Daten beim Start der excel-Tabelle zur Verfügung zu haben, liest Du diese am Besten im 'WorkbookOpen'-Ereignis aus. Das Interessante an der 'Klasse' ist, daß man sie nur einmal erstellt, und unverändert in andere Projekte (Excel, Word, Access, usw.) übernehmen kann.


Gruß

Thomas

------------------------------
Internet: Homepage

eMail: Thomas.Risi@t-online.de
------------------------------


 nach oben

Beiträge aus den Excel-Beispielen zum Thema "Problem mit Seitenwechsel in VBA"