Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
768to772
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
768to772
768to772
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

2 Spalten aus Datei auslesen

2 Spalten aus Datei auslesen
06.06.2006 13:02:16
Matthias Merkle
Hallo Zusammen,
habe ein Problemchen mit folgendem Code:

Private Sub CommandButton3_Click()
Dim strFile As String, strSheet As String, strDate As String
Dim dDate As Date
Dim varValues As Variant
Dim objFSO As Object
Dim rngFind As Range, rng As Range
Dim lngR As Long, lngLast As Long, lngNew As Long
'Datei öffnen
strFile = Application.GetOpenFilename("Excel Dateien (*.xls; *.xlt; *.xla)," & _
"*.xls; *.xlt; *.xla")
If strFile = "Falsch" Then Exit Sub
Set objFSO = CreateObject("Scripting.FileSystemObject")
strDate = objFSO.GetBaseName(strFile)
'Spalten kopieren (Monate)
Columns("I:M").Copy Destination:=Columns("H:H")
dDate = DateValue("01/" & Replace(strDate, "_", " "))
Sheets("Termintreue").Range("M2").Value = dDate
'Sheets("Termintreue").Range("M2") = Format(Range("M2"), "MMMM YYYY")
strSheet = "Tabelle1"
With ExcelTable(strFile, strSheet, "A1:D65536")
varValues = .GetRows
.Close
End With
'Daten von Datei in die entsprechende Spalte passend zur entsprechenden Zeile einfügen
With Sheets("Termintreue")
lngLast = .Cells(Rows.Count, 1).End(xlUp).Row
lngNew = lngLast + 1
Set rngFind = .Rows(2).Find(dDate)
If Not rngFind Is Nothing Then
For lngR = 0 To UBound(varValues, 2)
Set rng = .Range(.Cells(4, 2), .Cells(lngLast, 2)).Find(varValues(1, lngR), lookat:=xlWhole)
If Not rng Is Nothing Then
.Cells(rng.Row, rngFind.Column) = varValues(2, lngR)
Else
If Left(UCase(varValues(1, lngR)), 1) Like "[A-L]" Then
.Cells(lngNew, 1) = varValues(0, lngR)
.Cells(lngNew, 2) = varValues(1, lngR)
.Cells(lngNew, rngFind.Column) = varValues(2, lngR)
lngNew = lngNew + 1
End If
End If
Next
End If
'Zeilen dem Alphabet nach sortieren
.Range(.Cells(2, 1), .Cells(lngNew, .Cells(2, Columns.Count).End(xlToLeft).Column)).Sort _
Key1:=Range("B3"), _
Order1:=xlAscending, _
Header:=xlYes
End With
Set objFSO = Nothing
Set rngFind = Nothing
End Sub

Folgendes Problem:
Der Code funktioniert soweit ganz toll. Allerdings wollte ich noch eine weitere Spalte aus der gleichen externen *.xls Datei einlesen.
Hierzu müsste ich doch lediglich folgende Zeile ändern:
Set rng = .Range(.Cells(3, 2), .Cells(lngLast, 2)).Find(varValues(1, lngR), lookat:=xlWhole)
Wenn ich die Werte nicht aus Spalte 3 sondern 4 haben möchte kann ich diese Code-Zeile doch einfach folgendermaßen umformen:
Set rng = .Range(.Cells(4, 2), .Cells(lngLast, 2)).Find(varValues(1, lngR), lookat:=xlWhole)
oder wurde noch inrgendwo im Code speziell auf Spalte 3 hingewiesen?
Da ich gerne zwei spalten aus einer externen Datei auslesen und in die Hauptdatei schreiben möchte. Wenn ich dies jedoch in der Art mache klappt es nicht, es wird immernoch Spalte 3 ausgelesen und eingefügt.
Würde mich freuen wenn mir jemand helfen könnte, wie ich auch die 4. Spalte auslesen und in meine Hauptdatei einpfelgen kann.
Gruß
Matthias

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2 Spalten aus Datei auslesen
06.06.2006 21:27:53
Josef Ehrensberger
Hallo Mathias! (oder Kira oder wie?)
Da blickst du den Code nicht ganz durch.
Mit

Set rng = .Range(.Cells(3, 2), .Cells(lngLast, 2)).Find(varValues(1, lngR), lookat:=xlWhole)

wird der Name in Spalte "B" gesucht und damit die Zeile zum Einfügen der
Daten bestimmt.
Ausgelesen werden die Daten aus dem Array "varValues", wobei
varValues(0, lngR) den ersten Eintrag (Spalte "A"), varValues(3, lngR) den
letzten Eintrag (Spalte ("D") darstellt.
Wohin soll der Wert aus Spalte "D" geschrieben werden?
'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: 2 Spalten aus Datei auslesen
06.06.2006 22:25:48
Matthias Merkle
Hallo Sepp,
Kira ist eine andere Person. Ich habe nur Deinen Code genommen da er irgendwie auch sehr gut in meine Realisierung passt.
Die Werte aus Spalte D sollen in Spalte G der Hauptdatei geschrieben werden.
Tut mir leid, wenn ich Deinen Code falsch gelesen habe. Bin leider noch Anänger wenn es um VBA geht. Vielleicht kannst Du mir auf die Sprünge helfen.
Ich hofe ich konnte meine Frage Dir etws präziser stellen.
Gruß
Matthias
P.S. Rückmeldung kommt von mir sowieso!!
AW: 2 Spalten aus Datei auslesen
06.06.2006 22:38:25
Josef Ehrensberger
Hallo Matthias!
Ohne jetzt genau zu wissen wie du die Daten auslesen willst,
würde das so aussehen.

.Cells(rng.Row, 7) = varValues(3, lngR) '7=Spalte "G"

'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: 2 Spalten aus Datei auslesen
06.06.2006 22:41:58
Matthias Merkle
Vielen Dank für die schnelle Antwort.
Habe die Excel-Dateien leider gerade nicht vorliegen.
Werde dies morgen früh versuchen.
Werde mich auf jedenfall nochmal melden, ob es geklappt hat oder nicht.
Danke schon mal im Voraus!
AW: 2 Spalten aus Datei auslesen
07.06.2006 08:38:18
Matthias Merkle
Hallo Sepp,
wie versprochen hier mein kleines Feedback:
Der Code funktioniert nun einwandfrei.
Habe diesen noch auf meine Bedürfnisse angepasst.
VIELEN DANK!
noch eine Frage
07.06.2006 09:04:09
Matthias Merkle
Eine weitere Frage hätte ich da noch, da ich mich noch nicht richtig mit VBA-Codes auskenne.
Wenn ich das richtig verstanden habe und den Eintrag von Kira nochmals gelesen habe, dann vergleichen Sie 2 Werte miteinander.
In der ersten Spalte stehen Nummern und in der 2. Spalte der externen xls-Datei Namen.
Diese beiden Spalten vergleicht der Code mit den ersten beiden Spalten in der Hauptdatei.
Wie kann ich es realisieren, dass nur die erste Spalte der externen und die erste Spalte der Hauptdatei verglichen wird? Da diese Zahl eindeutig ist ist es sinnvoll nur diese zu vergleichen.
Der Code mit dem ich derzeit arbeite sieht folgendermaßen aus:
Dim strFile As String, strSheet As String, strDate As String
Dim dDate As Date
Dim varValues As Variant
Dim objFSO As Object
Dim rngFind As Range, rng As Range
Dim lngR As Long, lngLast As Long, lngNew As Long
'Datei öffnen
strFile = Application.GetOpenFilename("Excel Dateien (*.xls; *.xlt; *.xla)," & _
"*.xls; *.xlt; *.xla")
If strFile = "Falsch" Then Exit Sub
Set objFSO = CreateObject("Scripting.FileSystemObject")
strDate = objFSO.GetBaseName(strFile)
'Spalten kopieren (Monate)
Columns("I:M").Copy Destination:=Columns("H:H")
dDate = DateValue("01/" & Replace(strDate, "_", " "))
Sheets("Termintreue").Range("M2").Value = dDate
'Sheets("Termintreue").Range("M2") = Format(Range("M2"), "MMMM YYYY")
strSheet = "Tabelle1"
With ExcelTable(strFile, strSheet, "A1:D65536")
varValues = .GetRows
.Close
End With
'Daten von Datei in die entsprechende Spalte passend zur entsprechenden Zeile einfügen
With Sheets("Termintreue")
lngLast = .Cells(Rows.Count, 1).End(xlUp).Row
lngNew = lngLast + 1
Set rngFind = .Rows(2).Find(dDate)
If Not rngFind Is Nothing Then
For lngR = 0 To UBound(varValues, 2)
Set rng = .Range(.Cells(4, 2), .Cells(lngLast, 2)).Find(varValues(1, lngR), lookat:=xlWhole)
If Not rng Is Nothing Then
.Cells(rng.Row, 13) = varValues(3, lngR) 'Daten aus externen in Spalte M schreiben
Else
If Left(UCase(varValues(1, lngR)), 1) Like "[A-L]" Then
.Cells(lngNew, 1) = varValues(0, lngR)
.Cells(lngNew, 2) = varValues(1, lngR)
.Cells(lngNew, rngFind.Column) = varValues(2, lngR)
lngNew = lngNew + 1
End If
End If
Next
End If
'Zeilen dem Alphabet nach sortieren
.Range(.Cells(2, 1), .Cells(lngNew, .Cells(2, Columns.Count).End(xlToLeft).Column)).Sort _
Key1:=Range("B3"), _
Order1:=xlAscending, _
Header:=xlYes
End With
Set objFSO = Nothing
Set rngFind = Nothing
Ich würde mich freuen wenn Sie mir auch diesmal wieder weiterhelfen könnten.
Gruß und Dank
Matthias
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige