Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1812to1816
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

Datei durchsuchen in Arbeitsblatt eintra

Datei durchsuchen in Arbeitsblatt eintra
15.02.2021 16:19:27
Nancy
Hallo Liebe Leute,
Ich habe die Aufgabe bekommen eine Vollautomatisch füllende Tabelle zu generieren, kurze Erklärung:
- Ordner durchsuchen, mit über 100 XLS Dateien
- Bestimmtes Arbeitsblatt, Bestimmte Zellen auswählen und kopieren
- In neue Arbeitsmappe einfügen und doppelte Zeilen löschen
JEtzt die Frage, kann man das so programmieren das die Doppelten werte erst gar nicht eingeschrieben werden oder muss ich das weil es sich ja dann um eine neue Zeile handelt im neuen Arbeitsblatt immer hinterher machen?
hab das soweit auch programmiert und es funktioniert bis auf das löschen auch schon, nur check ichs jetzt nicht mehr ....
hier mal mein code dafür, danke für eure Hilfe
Muss hier aber zugeben das ich diesen nicht zu 100% verstehe sonst würde ich hier gleich die Abfrage mit den Doppelten werten einfügen, momentan hab ich mich hieran versucht, allerdings löscht er so gar nichts mehr.
Dim sPfad As String
Dim sDatei As String
Dim sBlatt As String
Dim aZellAdresse() As Variant, iZA As Long
Dim aErgebnis() As Variant, iE As Long
sBlatt = "Blatt1" ' ArbeitsbattName Quelldatei
aZellAdresse() = Array("A5", "B5", "C5", "D5", "E5", "F5") ' Folgende Zellen werden kopiert
'Schritt 1: Schleife über alle Excel Dateien in einem Verzeichnis
sPfad = "C:\Documents\VBA\Test\"
sDatei = Dir(CStr(sPfad & "*.xls")) 'Alle Excel Dateien
Do While sDatei <> ""
iE = iE + 1
ReDim Preserve aErgebnis(1 To UBound(aZellAdresse) + 2, 1 To iE)
aErgebnis(1, iE) = sDatei
For iZA = LBound(aZellAdresse) To UBound(aZellAdresse)
aErgebnis(iZA + 1, iE) = "='" & sPfad & "[" & sDatei & "]" & sBlatt & "'!" & aZellAdresse(iZA)
Next
'Nächste Datei
sDatei = Dir()
Loop
If iE > 0 Then
Application.ScreenUpdating = False 'Das "Flackern" ausstellen
'Schritt 2: Neues Arbeitsblatt für die Ergebnisse erstellen und letzte freie Zeile suchen
With ThisWorkbook.Worksheets("Tabelle1")
With .Range("A65536").End(xlUp).Offset(1, 0).Resize(UBound(aErgebnis, 2), UBound(aErgebnis, 1))
.Formula = WorksheetFunction.Transpose(aErgebnis)
.Formula = .Value
End With
End With
Application.ScreenUpdating = True 'Das Bildschirm-Aktualisieren wieder einschalten
Columns("A:A").NumberFormat = "m/d/yyyy hh:mm"
End If
~f~
~f~
Dim iRow As Integer, iRowL As Integer
iRowL = Cells(Cells.Rows.Count, 1).End(xlUp).Row
For iRow = iRowL To 1 Step -1
If WorksheetFunction.CountIf(Range"1:1"), Cells(iRow, 1)) > 1 Then
Rows(iRow).Delete
End If
Next iRow

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
du verstehst deinen !! code nicht, echt? ...
15.02.2021 16:36:04
ralf_b
das klingt doch so gar nicht danach das du den Code geschrieben hast.
Bei VBA-gut erwarte ich eigentlich etwas mehr als deine Aufgabenstellung einfach durchzureichen.
gruß
rb
AW: du verstehst deinen !! code nicht, echt? ...
15.02.2021 16:54:43
Nancy
Hallo Ralf, ich hab mir VBA selbst beigebracht und ja ich versteh den Code, hab dann irgendwie geschafft ihn so hin zu basteln, aber es geht hier auch nicht um den ersten Code sondern um den Zweiten, sicherlich ist sehr viel luft nach oben was das angeht. Wie hätte ich denn deiner Meinung nach fragen sollen, mit sicherheit liegt es beim Zeilen löschen an einer kleinigkeit, das meine Aufgabe weit aus mehr und größer ist weiß ich selber aber auch das hab ich mir selbst bei gebracht nur häng ich jetzt eben hier fest und wollte lediglich eine Lösung wissen. Bei euch VBA Checkern. Das ist das erste mal das ich ein Forum ansatzweise benutze, falls es aber unerwünscht ist werde ich das auch gleich rauslöschen und nicht nochmal fragen.
Danke
Anzeige
AW: du verstehst deinen !! code nicht, echt? ...
15.02.2021 17:06:46
ralf_b
Und, ich hab mir vba auch selbst beigebracht und bin immer noch dabei. Für Rumzicken ist das der denkbar falscheste Platz. Es gibt genug Anhaltspunkte in deinem Post um, bei entsprechender Laune, darauf zu kommen das du dir hier nur mal schnell nen Code abholen willst.
Auf die Gefahr hin das ich deinen Code auch nicht so gänzlich verstanden habe, hier mein Ansatz.
Basierend auf der Vermutung das in deinem Zelladressenarray die einzelnen Zellen auf Inhalt überprüft werden sollen und somit die Leerzeilen im Ergebnisarray vermieden werden können.
Ohne Garantie, da keine Testumgebung.

Sub  Linkerstellen()
Dim sPfad  As String
Dim sDatei As String
Dim sBlatt As String
Dim aZellAdresse() As Variant, iZA As Long
Dim aErgebnis() As Variant, iE As Long
sBlatt = "Blatt1"                             ' ArbeitsbattName Quelldatei
aZellAdresse() = Array("A5", "B5", "C5", "D5", "E5", "F5") ' Folgende Zellen werden kopiert
'Schritt 1: Schleife über alle Excel Dateien in einem Verzeichnis
sPfad = "C:\Documents\VBA\Test\"
sDatei = Dir(CStr(sPfad & "*.xls"))           'Alle Excel Dateien
Dim cnt As Long: cnt = 1
Do While sDatei  ""
For iZA = LBound(aZellAdresse) To UBound(aZellAdresse)
If Range(aZellAdresse(iZA))  "" Then
iE = iE + 1
ReDim Preserve aErgebnis(1 To UBound(aZellAdresse) + 2, 1 To iE)
aErgebnis(1, iE) = sDatei
aErgebnis(cnt, iE) = "='" & sPfad & "[" & sDatei & "]" & sBlatt & "'!" &  _
aZellAdresse(iZA)
cnt = cnt + 1
End If
Next
'Nächste Datei
sDatei = Dir()
Loop
If iE > 0 Then
Application.ScreenUpdating = False        'Das "Flackern" ausstellen
'Schritt 2: Neues Arbeitsblatt für die Ergebnisse erstellen und letzte freie Zeile  _
suchen
With ThisWorkbook.Worksheets("Tabelle1")
With .Range("A65536").End(xlUp).Offset(1, 0).Resize(UBound(aErgebnis, 2), UBound( _
aErgebnis, 1))
.Formula = WorksheetFunction.Transpose(aErgebnis)
.Formula = .Value
End With
End With
Application.ScreenUpdating = True         'Das Bildschirm-Aktualisieren wieder  _
einschalten
Columns("A:A").NumberFormat = "m/d/yyyy hh:mm"
End If
'    Dim iRow   As Integer, iRowL As Integer
'    iRowL = Cells(Cells.Rows.Count, 1).End(xlUp).Row
'    For iRow = iRowL To 1 Step -1
'        If WorksheetFunction.CountIf(Rows(iRowL), Cells(iRow, 1)) > 1 Then
'            Rows(iRow).Delete
'        End If
'    Next iRow
End Sub
gruß
rb
Anzeige
VBA bescheiden hätte es besser getroffen
15.02.2021 17:13:10
Nancy
Hallo Rb, tut mir leid für das durcheinander und nein ich bin kein Fan von Codes abholen, ich will das verstehen und natürlich immer anwenden können, dafür muss ich ja den Code verstehen und nicht mit Copy und Paste einsetzten, ergibt für mich absolut kein Sinn. Da wirst net besser und verstehen tust es auch nicht.
Daher danke dir, werde mich da mal einlesen und versuchen es umzusetzten, melde mich dann nochmal falls ichs geschafft habe.
Alles gut?
AW: VBA bescheiden hätte es besser getroffen
15.02.2021 17:23:32
Werner
Hallo,
wenn es dir darum geht die Duplicate zu entfernen, dann doch einfach mit RemoveDuplicates.
Einfach deine Daten ins Blatt holen. Wenn die drin sind, dann Daten - Duplikate entfernen einmal "von Hand" ausführen und den Makrorekorder mitlaufen lassen, dann hast du doch den entsprechenden Code.
Den Rekorder Code dann halt noch anpassen, die ganzen Select usw. eliminieren.
Ist auf alle Fälle schneller als eine Schleife und das Löschen einzelner Zeilen.
Gruß Werner
Anzeige
AW: VBA bescheiden hätte es besser getroffen
15.02.2021 17:25:01
Nancy
Danke Werner das werd ich mir auch gleich mal anschauen, hab das auch schon gelesen, geb mein bestes :) melde mich wieder wenn ich die Monster Aufgabe erledigen konnte
doppelte entfernen, ......
15.02.2021 18:11:46
ralf_b
ach verdammt, das hatte ich mit Leerzeilen verwechselt. Ich weis gar nicht wie ich drauf gekommen bin.
Macht natürlich Sinn das erst im letzten Schritt, wenn alle Dateien eingelesen wurden, umzusetzen.
RemoveDublicates wäre da ne Möglichkeit.
gruß
rb

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige