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

Daten einlesen

Daten einlesen
12.11.2020 16:10:57
Jochen
Hallo Excel-Freunde, mit dem unten eingegebenen Code werden Daten aus Dateien, bestehend aus 7 Tabellenblätter, eingelesen. Es werden immer die ganzen Zeilen der Tabellen, Zeile 4 bis Zeile 109, übernommen. Ich möchte aber, dass nur beschriebene Zeilen übertragen werden.
Option Explicit
Public Sub ImportReports()
Dim intChoice As Integer
Dim strPath As String
Dim i As Integer
'allow the user to select multiple files
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = True
Application.FileDialog(msoFileDialogOpen).Title = "Bitte wählen Sie die Berichte aus..." Application.FileDialog(msoFileDialogOpen).Filters.Clear
Application.FileDialog(msoFileDialogOpen).Filters.Add "Excel 2010", "*.xlsm"
'make the file dialog visible to the user
intChoice = Application.FileDialog(msoFileDialogOpen).Show
'determine what choice the user made
If intChoice 0 Then
'get the file path selected by the user
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For i = 1 To Application.FileDialog(msoFileDialogOpen).SelectedItems.Count
strPath = Application.FileDialog(msoFileDialogOpen).SelectedItems(i)
'print the file path to sheet 1
'Cells(i + 1, 1) = strPath
Import strPath
Next i
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End If
End Sub

Public Sub Import(strPath As String)
Dim wb As Workbook
Dim sht As Worksheet
Dim lastrow As Long
Dim activeWb As Workbook
Dim masterSht As Worksheet
Dim i As Integer
Set activeWb = ThisWorkbook
Set masterSht = activeWb.Worksheets("Rohdaten")
lastrow = masterSht.Cells(Rows.Count, 1).End(xlUp).Row 'letzte Zeile Spalte 1
Set wb = Workbooks.Open(strPath)
For i = 1 To 7
Set sht = wb.Sheets(i)
sht.Range("A4:T" & sht.Cells(Rows.Count, "A").End(xlUp).Row).Copy
lastrow = masterSht.Cells(Rows.Count, 1).End(xlUp).Row 'letzte Zeile Spalte 1
masterSht.Range("A" & lastrow + 1).PasteSpecial Paste:=xlPasteValues, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Next i
wb.Close
End Sub

Ich habe vorsichtshalber beide Teile des Makros kopiert, wobei ich glaube es betrifft nur den 2. Teil.
Danke im Voraus
Jochen
https://www.herber.de/bbs/user/141505.xlsm

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten einlesen
12.11.2020 16:45:36
ralf_b
Hallo Jochen,
SkipBlanks:=False vielleicht reichts ja schon das auf true zu setzen
AW: Daten einlesen
13.11.2020 00:08:15
Jochen
Hallo Ralf,
das war es leider nicht, schade.
AW: Daten einlesen
13.11.2020 01:10:48
ralf_b
dann könnte man die se Zeile so umbauen das man hier prüft ob nicht leere zellen vorhanden sind. Z.B. mit Worksheetfunction.COUNTA(bereich) > 0
 sht.Range("A4:T" & sht.Cells(Rows.Count, "A").End(xlUp).Row).Copy

AW: Daten einlesen
13.11.2020 10:54:41
Jochen
Kannst du mir bitte sagen wie dein Vorschlag eingebaut wird? Meine VBA Kenntnisse reichen dafür nicht aus.
AW: Daten einlesen
13.11.2020 18:39:16
ralf_b

For i = 1 To 7
Set sht = wb.Sheets(i)
if  Worksheetfunction.COUNTA(sht.Range("A4:T" & sht.Cells(Rows.Count, "A").End(xlUp).Row)) _
> 0 then
sht.Range("A4:T" & sht.Cells(Rows.Count, "A").End(xlUp).Row).Copy
lastrow = masterSht.Cells(Rows.Count, 1).End(xlUp).Row 'letzte Zeile Spalte 1
masterSht.Range("A" & lastrow + 1).PasteSpecial Paste:=xlPasteValues, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
end if
Next i

Anzeige
update
13.11.2020 20:00:37
ralf_b
nim mal diese Variante. mir ist vorher etwas nicht aufgefallen. Ich hoffe das klappt so.
Public Sub Import(strPath As String)
Dim wb As Workbook, activeWb As Workbook
Dim sht As Worksheet, masterSht As Worksheet
Dim rng As Range, sumRange As Range
Dim lastrow As Long
Dim i As Integer
Set activeWb = ThisWorkbook
Set masterSht = activeWb.Worksheets("Rohdaten")
lastrow = masterSht.Cells(Rows.Count, 1).End(xlUp).Row 'letzte Zeile Spalte 1
Set wb = Workbooks.Open(strPath)
For i = 1 To 7
Set sht = wb.Sheets(i)
For Each rng In sht.Range("A4:T" & sht.Cells(Rows.Count, "A").End(xlUp).Row).Rows
If WorksheetFunction.CountA(rng) > 0 Then
If rng.Row = 4 Then
Set sumRange = rng
Else
Set sumRange = Union(sumRange, rng)
End If
End If
Next rng
sumRange.Copy
masterSht.Range("A" & lastrow + 1).PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Set sumRange = Nothing: Set rng = Nothing
Next i
wb.Close
Set sht = Nothing: Set wb = Nothing: Set activeWb = Nothing: Set masterSht = Nothing
End Sub

Anzeige
AW: update
13.11.2020 20:21:25
Jochen
Hallo, habe es ausprobiert, läuft aber nicht richtig.
Das mit der letzten beschriebenen Zeile klappt, aber nur von dem letzten Tabellenblatt, Blatt 1 - 6 wird nicht eingelesen.
AW: update
13.11.2020 20:49:10
ralf_b
hast du mal so eine datei mit den 7 blättern? Dem Code nach sollte da kein ganzes Blatt übersprungen werden.
AW: update
13.11.2020 21:18:22
Jochen
Geht leider nicht, ist zu groß.
AW: update
13.11.2020 21:19:55
Jochen
Geht leider nicht, ist zu groß.
AW: update
13.11.2020 21:38:54
ralf_b
es müssen ja nicht alle Daten auf den blättern sein.
Es sollte für dich leicht sein eine kleinere Kopie zu erzeugen. Soweit es keine Geheimnisse sind.
Ansonsten kann ich hier Nichts weiter tun.
so jetzt aber
13.11.2020 22:18:42
ralf_b
Also die augenscheinlich leeren Zellen sind aber nicht leer, somit hat die Funktion nicht hingehauen. und die letzte Zeile in Rohdaten mußte doch in die Schleife. Die Testdatei wird lückenlos eingelesen.
Public Sub Import(strPath As String)
Dim wb As Workbook, activeWb As Workbook
Dim sht As Worksheet, masterSht As Worksheet
Dim rng As Range, sumRange As Range
Dim lastrow As Long
Dim i As Integer
Set activeWb = ThisWorkbook
Set masterSht = activeWb.Worksheets("Rohdaten")
Set wb = Workbooks.Open(strPath)
For i = 1 To 7
lastrow = masterSht.Cells(Rows.Count, 1).End(xlUp).Row 'letzte Zeile Spalte 1
Set sht = wb.Sheets(i)
For Each rng In sht.Range("A4:T" & sht.Cells(Rows.Count, "A").End(xlUp).Row).Rows
If WorksheetFunction.CountBlank(rng) 

Anzeige
AW: so jetzt aber
13.11.2020 22:32:43
Jochen
Super, habe so übertragen.
Danke und dir ein schönes Wochenende
danke für die rückmeldung -owT
13.11.2020 22:48:05
ralf_b

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige