Hallo,
Um automatisiiert aus anderen Excelfiles bestimmte Spalten an eine "Sammelmappe" zu übertragen habe ich mir folgendes gebastelt, was mit den Abfragen via Inputbox sehr gut funktioniert.
Da in manchen Fällen die Eingabe routinemäßig immer die gleichen sind möchte ich in den jeweiligen Verzeichnissse Ini-Dateien hinterlegen, die dann ggf. erst gelesen werden.
Zum Testen möchte ich erstmal einen Wert lesen und laufe promt in eine Typenunverträglichkeit rein, die es mir bislang nicht gelang auf zu lösen. Hat jemand 'ne Idee - wo ist mein Fehler?
Tabelle1:
Modul1:
Die Config.ini sieht so aus:
Zum Testen habe ich absichtlich Property und sValue auf Integer gesetzt. Das hat aber genauso wenig gebracht wie das casten mit CInt.
Wäre schon mal toll wenn's bisdahin laufen würde, obgleich ich noch nicht wirklich Plan habe wie ich z.B. die Ini-Dateien flexibel ablegen kann bzw. das ganze an das Fileopen hänge und wie ich die Ini einlese wenn mehrere Durchläufe gemacht werden sollen?
So könnte z.B. numf auch auf 3 (Durchläufe) stehen, was bedeutet, daß in den folgenden Sektionen eben auch je 3 Werte stehen.
Grüße
_opiwahn_
Um automatisiiert aus anderen Excelfiles bestimmte Spalten an eine "Sammelmappe" zu übertragen habe ich mir folgendes gebastelt, was mit den Abfragen via Inputbox sehr gut funktioniert.
Da in manchen Fällen die Eingabe routinemäßig immer die gleichen sind möchte ich in den jeweiligen Verzeichnissse Ini-Dateien hinterlegen, die dann ggf. erst gelesen werden.
Zum Testen möchte ich erstmal einen Wert lesen und laufe promt in eine Typenunverträglichkeit rein, die es mir bislang nicht gelang auf zu lösen. Hat jemand 'ne Idee - wo ist mein Fehler?
Tabelle1:
Visual Basic:
Sub CopySource()
Dim lLRowS As Long
Dim lLRowD As Long
Dim sColS As String
Dim sColD As String
Dim iShNumS As Integer
Dim iNum As Integer
Dim i As Integer
ReadIni
'iNum = Application.InputBox(Prompt:="", Title:="Number of Files?", Type:=1)
For i = 1 To iNum
'iShNumS = Application.InputBox(Prompt:="", Title:="Sheetnumber Source?", Type:=1)
'sColS = Application.InputBox(Prompt:="", Title:="Column Source?", Type:=2)
'sColD = Application.InputBox(Prompt:="", Title:="Column Destination?", Type:=2)
lLRowD = Cells(Rows.Count, sColD).End(xlUp).Row
file = Application.GetOpenFilename()
If file = False Then Exit Sub
Workbooks.Open file
With Worksheets(iShNumS)
lLRowS = .Cells(Rows.Count, sColS).End(xlUp).Row
.Range(sColS & "2:" & sColS & lLRowS).Copy ThisWorkbook.ActiveSheet.Range(sColD & lLRowD + 1)
ActiveWorkbook.Close False
End With
Next i
End Sub
Sub ReadIni()
config$ = "C:\Users\xxx\Desktop\xxx_auto\config.ini"
If Dir$(config$, vbNormal) <> "" Then
iNum = GetIniString(config$, "NumFiles", "numf", 0)
iShNumS = GetIniString(config$, "NumSheet", "shnum", 0)
sColS = GetIniString(config$, "ColSource", "cols", "")
sColD = GetIniString(config$, "ColDest", "cold", "")
End If
End Sub
Modul1:
Visual Basic:
Option Explicit
Declare Function WritePrivateProfileString Lib "kernel32" _
Alias "WritePrivateProfileStringA" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, _
ByVal lpString As Any, _
ByVal lplFileName As String) As Long
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
Public Function GetIniString( _
ByVal INIFile As String, _
ByVal Section As String, _
ByVal Titel As String, _
ByVal Property As Integer, _
Optional ByVal nSize As Integer = 256) As String
Dim lResult As Long
Dim sValue As String
Dim iValue As Integer
sValue = Space$(nSize)
lResult = GetPrivateProfileString(INIFile, Section, Titel, _
Property, sValue, nSize)
If IsNumeric(sValue) Then
iValue = CInt(sValue)
GetIniString = Left$(iValue, lResult)
Else
GetIniString = Left$(sValue, lResult)
End If
End Function
Die Config.ini sieht so aus:
Visual Basic:
[NumFiles]
numf = 1
[NumSheet]
shnum = 1
[ColSource]
cols = g
[ColDest]
cold = d
Zum Testen habe ich absichtlich Property und sValue auf Integer gesetzt. Das hat aber genauso wenig gebracht wie das casten mit CInt.
Wäre schon mal toll wenn's bisdahin laufen würde, obgleich ich noch nicht wirklich Plan habe wie ich z.B. die Ini-Dateien flexibel ablegen kann bzw. das ganze an das Fileopen hänge und wie ich die Ini einlese wenn mehrere Durchläufe gemacht werden sollen?
So könnte z.B. numf auch auf 3 (Durchläufe) stehen, was bedeutet, daß in den folgenden Sektionen eben auch je 3 Werte stehen.
Grüße
_opiwahn_