[Excel] VBA: Ini in Array ein bzw. auslesen

amn.ssy

Erfahrenes Mitglied
Hallo liebe Wissende,

aktuell frickel ich an einem Makro mit dem ich wahlweise per Inputbox oder einer Config.Ini (wenn's immer die gleichen Abläufe sind) im Quellordner beliebige Spalten von Exceldateien in beliebige Spalten einer Zieldatei kopieren kann.
Ich denke wenn bekannt ist welche Spalten aus den Quelldateien an welche Stelle in der Zieldatei kopiert werden sollen und das immer das gleiche ist bietet sich ein Config.ini nach folgendem Muster:
Visual Basic:
[NumFiles]
numf = 3
 
[NumSheet]
shnum = 1
shnum = 2
shnum = 1

[ColSource]
cols = g
cols = f
cols = e

[ColDest]
cold = b
cold = c
cold = d

Hierbei numf stellt die anzahl der zu bearbeitenden Quelldateien dar und ist im späteren Verlauf der Zielwert für eine For-Schleife.
Bisher funktioniert das mittels den Inputboxen problemlos, ebenso mit der Config.ini auf der Basis von nur einem Wert in den einzelnen Sektionen bzw. numf = 1
Wie kann ich erreichen, daß im Falle daß numf > 1 ist die Sektionen NumSheet, ColSource und ColDest samt nachfolgender Werte in ein Array eingelesen werden und sich das Makro daruas bedient.
Wenn also der Schleifen-Zähler auf 2 steht benötige jeweils den 2. Wert aus den einzelnen Sektionen, wenn der Zähler auf 3 ist den 3. Wert, usw.
Ich hab heute den Tag über das Thema Arrays und Ini-Dateien hoch- und runtergegooglet, i.d.R. sind beziehen sich die Ansätze, z.B. bei Stackoverflow (super Anlaufstelle) jedoch immer darauf das Ganze aus Text einzulesen und zu splitten.
Gib es noch andere Alternativen oder Ideen?
Anbei habe ich die aktuelle Mappe und die ini mal als Zip angehängt.

Grüße

_opiwahn_
 
Ich löse das jeweils so. Den Array als Array in das Ini schreiben (klar definiertes Format).
Code:
[ColSource]
cols = array(g,f,e)
Nachher im Code den String auf array prüfen und ggf mittels split() aufbrösmeln
Visual Basic:
    s = "array(e,f,g)"
    
    RegExp.Pattern = "^array\((.+)\)$"
    If RegExp.test(s) Then
        s = RegExp.Replace(s, "$1")
        '//TODO split() und dann Array-Verarbeitung
    Else
        '//TODO Wert direkt verarbeiten
    End If
 
Ich seh da ein ganz anderes problem im aufbau der ini-datei:
Wiederholt vorkommende schlüsselnamen!
Entweder würd ich mir den aufbau der ini nochmal genau überlegen, oder einen ähnlichen ansatz wie yaslaw nehmen.

Due könntest auch so den schlüssel definieren:

Numf=3

Shnum=1_2_1

Und dann die split-funktion
 
Nachtrag hierzu: Hab in einem anderen Forum was ähnliches gesehen.
http://www.vbforums.com/showthread.php?727077-checkbox-to-textbox
Post #37

Der User zeigt ein beispiel für die API's
Visual Basic:
Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" _
                (ByVal lpAppName As String, _
                 ByVal lpReturnedString As String, _
                 ByVal nSize As Long, _
                 ByVal lpFileName As String) As Long
                 
Private Declare Function GetPrivateProfileSectionNames Lib "kernel32" Alias "GetPrivateProfileSectionNamesA" _
                (ByVal lpReturnedString As String, _
                 ByVal nSize As Long, _
                 ByVal lpFileName As String) As Long
 

Neue Beiträge

Zurück