Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1116to1120
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Daten einlesen mit var. Überschriftenzeile

VBA Daten einlesen mit var. Überschriftenzeile
Stefan
Hallo zusammen,
ich habe vor einiger Zeit hier schon mal um Rat gefragt als ich Daten aus einer externen Arbeitsmappe einlesen wolle. Nun möchte ich in einem Optionsblatt eine Variable einbinden in der die Überschriftenzeile zum einlesen steht:
Public Sub data()
Dim objWB As Workbook, objWS As Worksheet, objWSImport As Worksheet, objOption As Worksheet
Dim objText As Range, objIdentifier As Range
Dim strFile As String
Dim lngLast As Long, lngCol As Long, lngLastCol As Long
Dim varRes As Variant
MsgBox "Bitte zu importierende Datei auswählen!"
strFile = Application.GetOpenFilename("Excel Dateien (*.xls; *.xlsx; *.xlsm)," & _
"*.xls; *.xlsx; *.xlsm")
If strFile = "Falsch" Then Exit Sub
Set objOption = ThisWorkbook.Sheets("Optionen")
Set objText = ThisWorkbook.Sheets("Optionen").Cells(1, 3)
Set objIdentifier = ThisWorkbook.Sheets("Optionen").Cells(2, 3)
Set objWSImport = ThisWorkbook.Sheets("Daten")
Set objWB = Workbooks.Open(strFile)
If Not SheetExist(objText.Value, objWB.Name) Then
MsgBox "Die ausgewählte Datei enthält kein Sheet mit dem Namen " & objOption.Cells(11, 3). _
Value & "! Der Import wurde abgebrochen."
Else
Set objWS = objWB.Sheets(objText.Value)
End If
With objWSImport
.Range("B3:DC30000").ClearContents
lngLastCol = Application.Max(1, objWS.Cells(objIdentifier.Value, Columns.Count).End(xlToLeft). _
Column)
For lngCol = 1 To lngLastCol
If objWS.Cells(1, lngCol)  "" Then
varRes = Application.Match(objWS.Cells(objIdentifier.Value, lngCol), .Rows(1), 0)
If IsNumeric(varRes) Then
lngLast = objWS.Cells(Rows.Count, lngCol).End(xlUp).Row
objWS.Range(objWS.Cells(objIdentifier.Value + 1, lngCol), objWS.Cells(lngLast, lngCol)). _
Copy
.Cells(3, varRes).PasteSpecial xlValues
End If
End If
Next
End With
MsgBox "Neue Daten importiert!"
End Sub

--> irgendwie ist das mit dem "objIdentifier.Value" Befehl nicht korrekt oder? Zudem hätte ich noch gerne ein Schleife die mir überprüft ob die Überschriftenzeile gefunden wurde.

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA Daten einlesen mit var. Überschriftenzeile
17.11.2009 13:40:57
Björn
Hallo,
 irgendwie ist das mit dem "objIdentifier.Value" Befehl nicht korrekt oder? 
Warum nicht? Kommt irgendein Fehler oder was funktioniert nicht.
Was soll denn passieren?
Bitte besser beschreiben, sonst muss ich mich da ewig einarbeiten.
Gruß
Björn
AW: VBA Daten einlesen mit var. Überschriftenzeile
17.11.2009 13:45:30
Stefan
Hallo Björn,
in dem unteren Bereich muss ein Fehler sein den ich leider nicht finde:
For lngCol = 1 To lngLastCol
If objWS.Cells(1, lngCol) "" Then
varRes = Application.Match(objWS.Cells(objIdentifier.Value, lngCol), .Rows(1), 0)
If IsNumeric(varRes) Then
lngLast = objWS.Cells(Rows.Count, lngCol).End(xlUp).Row
objWS.Range(objWS.Cells(objIdentifier.Value + 1, lngCol), objWS.Cells(lngLast, lngCol)). _
Copy
.Cells(3, varRes).PasteSpecial xlValues
End If
End If
Next
Wenn der Werte im Tabellenblatt welcher durch "objIdentifier.Value" angesprochen wird 3 ist wird trotzdem die Überschrift in der ersten Zeile gesucht und nicht in der dritten wie gewünscht. Falls es zu kompliziert ist kann ich auch eine Beispieldatei hochladen.
Anzeige
AW: VBA Daten einlesen mit var. Überschriftenzeile
17.11.2009 14:05:44
Björn
Hallo,
was macht denn diese Zeile?
varRes = Application.Match(objWS.Cells(objIdentifier.Value, lngCol), .Rows(1), 0)

Ich kenne Application.Match nicht.
Lass Dir mal deine Variable ausgeben. Hat die überhaupt den richtigen Wert?
Versuch noch mal zu beschreiben (schritt für schritt), was das makro macht.
Gruß
Björn
AW: VBA Daten einlesen mit var. Überschriftenzeile
17.11.2009 14:44:47
Stefan
also unten die Erklärung der einzelnen Zeilen:
lngLastCol = Application.Max(1, objWS.Cells(objIdentifier.Value, Columns.Count).End(xlToLeft).Column)
'soll die Anzahl der Spalten in der Quelle identifizieren
For lngCol = 1 To lngLastCol
If objWS.Cells(1, lngCol) "" Then
varRes = Application.Match(objWS.Cells(objIdentifier.Value, lngCol), .Rows(1), 0)
'application.match ist ein Vergleich, heisst also es Vergleich Zielüberschrift mit Quelle
If IsNumeric(varRes) Then
lngLast = objWS.Cells(Rows.Count, lngCol).End(xlUp).Row
objWS.Range(objWS.Cells(objIdentifier.Value + 1, lngCol), objWS.Cells(lngLast, lngCol)). _
Copy
.Cells(3, varRes).PasteSpecial xlValues
'hier kopiert er dann die komplette spalte der gefundenen Überschrift aus der Quelle und fügt sie im Ziel ein
End If
End If
Next
Anzeige
Problem gelöst - Zeile und Spalte war vertauscht
17.11.2009 14:59:08
Stefan
trotzdem Danke für die Hilfe!!!

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige