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

Nicht alle Dateien werden vom Makro erfasst

Nicht alle Dateien werden vom Makro erfasst
06.03.2018 12:14:38
arek
Hallo zusammen,
ich habe folgendes Makro entworfen, welches mir aus einem Ordner Stundenlisten auswertet bzw. zusammenfasst. Dieses läuft auch sehr gut, allerdings gibt es zwei Dateien in dem Ordner, wo keine Auswertung erfolgt, obwohl hier Stunden hinterlegt sind...Diese beiden Dateien sind genauso aufgebaut wie die anderen, doch läuft das Makro hier drüber, macht aber keine entsprechenden Eintragungen...
Kann mir da jemand weiterhelfen? Was könnten die Gründe dafür sein?
Option Explicit
Dim wkb As Workbook
Dim wksdata As Worksheet
Dim wksDest As Worksheet
Dim wkbData As Workbook
Sub Update_Button()
Dim llastr As Long
Dim ilasts As Integer
Dim z As Long
Dim s As Integer
Dim llastdest As Long
Dim Pfad As String
Dim Dateiname As String
Dim iRow As Long
Dim arr, na, b As Boolean
Dim FoundCells As Range
Pfad = "C:\Desktop\benutzer\arek\" 'Pfad, unter welchem die Stundenlisten liegen
Dateiname = Dir(Pfad & "*_hours__booking.xlsm")
Initialisiere 'Funktion Initialisiere siehe unten
On Error Resume Next
wksDest.UsedRange.Offset(1, 0).SpecialCells(xlCellTypeConstants).Value = ""
On Error GoTo 0
Do While Dateiname  "" 'Durchlaufen der Stundenlisten
Set wkbData = Workbooks.Open(Filename:=Pfad & Dateiname)
Set wksdata = wkbData.Sheets("Hours")
llastr = BestimmeLetzteZeile(wksdata, 2)  'letzte Zeile erstellen
ilasts = BestimmeLetzteSpalte(wksdata, 2) 'letzte Spalte bestimmen
llastdest = BestimmeLetzteZeile(wksDest, 1) + 1
If ilasts > 54 Then 'Stundenlisten nur bis Spalte 54 durchlaufen
ilasts = 54
End If
If llastr > 1500 Then 'Stundenlisten nur bis Zeile 1500 durchlaufen
llastr = 1500
End If
For z = 5 To llastr   'Alle Zeilen ab Zeile 5 werden durchlaufen
For s = 3 To ilasts   'Alle Spalten ab Spalte C werden durchlaufen
If wksdata.Cells(z, s).Value  "" And wksdata.Cells(z, s).Value  0 Then
'Zeile kopieren und anschließender Übergang zur nächsten Stundenliste
wksDest.Cells(llastdest, 1).Value = wksdata.Cells(2, s).Value  ' _
Kalenderwoche
wksDest.Cells(llastdest, 4).Value = wksdata.Cells(1, 1).Value  ' _
Kostenstelle
wksDest.Cells(llastdest, 5).Value = wksdata.Cells(1, 3).Value  ' _
Leistungsart
wksDest.Cells(llastdest, 7).Value = wksdata.Cells(z, 2).Value  'Projektname
wksDest.Cells(llastdest, 8).Value = wksdata.Cells(z, s).Value  'Menge
wksDest.Cells(llastdest, 9).Value = "H"                        'ME
wksDest.Cells(llastdest, 10).Value = wksdata.Cells(1, 2).Value ' _
Personalnummer
llastdest = llastdest + 1
End If
Next s
Next z
wkbData.Close False
Set wksdata = Nothing
Set wkbData = Nothing
Dateiname = Dir()    'Automatische Auswahl der nächsten Datei
Loop
End Sub
Function BestimmeLetzteZeile(ByVal wks As Worksheet, ByVal s As Integer) As Long
BestimmeLetzteZeile = wks.Cells(wks.Rows.Count, s).End(xlUp).Row
End Function

Function BestimmeLetzteSpalte(ByVal wks As Worksheet, ByVal z As Long) As Integer
If wks.Cells(z, 1).Value  "" Then
BestimmeLetzteSpalte = wks.Cells(z, wks.Columns.Count).End(xlToLeft).Column
Else
BestimmeLetzteSpalte = 1
End If
End Function

Function Initialisiere()
If wkb Is Nothing Then
Set wkb = ThisWorkbook
Set wksDest = wkb.Sheets("Overview")
End If
End Function

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nicht alle Dateien werden vom Makro erfasst
06.03.2018 12:50:23
{Boris}
Hi,
nur ne Vermutung: Die beiden Dateien haben nicht die Dateiendung .xlsm sondern eben .xlsx oder so...?
Tipp am Rande:
wksDest.UsedRange.Offset(1, 0).SpecialCells(xlCellTypeConstants).Value = ""
Besser:
wksDest.UsedRange.Offset(1, 0).SpecialCells(xlCellTypeConstants).Clear 'oder: ClearContents
VG, Boris
AW: Nicht alle Dateien werden vom Makro erfasst
06.03.2018 14:34:35
arek
Hi Boris,
danke für deine Antwort!
Leider haben haben alle Dateien dieselbe Endung (xlsm)...
Warum ist dieser Code deiner Meinung nach besser?
Viele Grüße
AW: Nicht alle Dateien werden vom Makro erfasst
06.03.2018 12:59:59
yummi
Hallo arek,
sind es immer die selben beiden Dateien, die nicht bearbeitet werden?
wie lautet der Dateiname eienr funktionierenden Datei und wie der, der "falschen"
wenn du wissen willst, welche Dateien alle angesprochen werden, dann mach mal folgendes:

Do While Dateiname  "" 'Durchlaufen der Stundenlisten
debug.print Pfad & Dateiname
Set wkbData = Workbooks.Open(Filename:=Pfad & Dateiname)
if wkbData is nothing then
debug.print "kann nicht geöffnet werden"
else
Set wksdata = wkbData.Sheets("Hours")
Dateiname = Dir()    'Automatische Auswahl der nächsten Datei
end if

Dann kannst du sehen welche Dateien angesprochen werden und welche nicht, dann können wir weiter schauen.
Gruß
yummi
Anzeige
AW: Nicht alle Dateien werden vom Makro erfasst
06.03.2018 14:46:17
arek
Hi yummi,
danke für deine Antwort!...Die funktionierenden Dateinamen sind genauso aufgebaut wie die nicht funktionierenden: Vorname_Nachname_hours__booking
Auch die Dateiendung der Dateien ist identisch (xlsm)...
Hast du noch eine Idee, woran es liegen könnte?
Vielen Dank nochmal!
AW: Nicht alle Dateien werden vom Makro erfasst
06.03.2018 14:50:10
yummi
Hallo arek,
hast du den Schnipsel mal eingebaut und step by step geschaut, ob alle Dateien angesprochen werden oder ob evtl zwar alle angesprochen werden, aber nicht geöffnet werden können?
Gruß
yummi
AW: Nicht alle Dateien werden vom Makro erfasst
06.03.2018 15:23:50
arek
Ja es werden alle angesprochen, doch werden bei diesen beiden Dateien keine Stunden leider übertragen...
Anzeige
AW: Nicht alle Dateien werden vom Makro erfasst
06.03.2018 15:30:31
yummi
Hallo arek,
meine Glaskugel ist ein wenig trübe heute.
was liefern dir denn bei den besagten Tabellen die funktionen letzte Zeile und letzte Spalte für Werte?
schau dir die Dateien mal an, ob der Aufbau vlt ein anderer ist. Ich kann dir nur den Tip geben, geh im debugger hin und steppe schritt für schritt, bei den fehler Dateien durch und vergleiche die Werte in den Variablen mit den von dir erwarteten Werten. Nur so kannst Du den Fehler einkreisen und finden.
Gruß
yummi
AW: Nicht alle Dateien werden vom Makro erfasst
06.03.2018 16:52:58
arek
Hi yummi,
ich habe mein Problem lösen können...In den beiden Dateien waren noch Verknüpfungen zu anderen Dateien enthalten und die habe ich jetzt raus und jetzt funktioniert es nochmals danke für deine Hilfe!
Ich hätte aber jetzt noch eine andere Frage: Ich würde gerne mein Makro so erweitern, dass wenn Zeilen in den Spalten B bis J den identischen Inhalt zeigen, zusammengefasst werden und die entspechenden Mengen (in Spalte H vorhanden) aufaddiert werden, sodass dann nur eine einzige Zeile noch mit den Daten vorhanden ist...Kannst du mir da weiterhelfen?
Anzeige
AW: Nicht alle Dateien werden vom Makro erfasst
07.03.2018 10:29:17
yummi
Hallo arek,
ja könnte ich, aber ich weiß nicht ganz was du meinst. Willst du das schon in der Datei zusammenfassen oder erst beim import?
poste mal ein beispiel
gruß
yummi
AW: Nicht alle Dateien werden vom Makro erfasst
07.03.2018 21:51:10
arek
Ich würde das gerne beim Import haben, d.h. wenn die Spalten B bis J identisch sind (bis auf den Eintrag in H) sollen diese Zeilen zusammengefasst werden und die eingetragenen Mengen in Spalte H aufaddiert werden ...Hast du dazu eine Idee?
AW: Nicht alle Dateien werden vom Makro erfasst
08.03.2018 09:57:44
arek
Hier wäre noch eine Beispielsdatei:
https://www.herber.de/bbs/user/120281.xlsx
Vielen Dank im Voraus!
Anzeige
AW: Nicht alle Dateien werden vom Makro erfasst
08.03.2018 10:17:57
yummi
Hallo Arek,
hier mal für deine Beispieldatei:

Function Zusammenfassen(ByVal wks As Worksheet)
Dim letzteZeile As Long
Dim z As Long
Dim s As Integer
Dim Anz As Integer
letzteZeile = BestimmeletzteZeile(wks, 2)
For z = 2 To letzteZeile
Anz = 1
For s = 3 To 9  'C bis J
If s  8 Then
If InStr(0, wks.Cells(z, 2).Value, wks.Cells(z, s).Value, vbTextCompare) = 0  _
Then
Anz = Anz + 1
Else
Anz = 0
s = 10
End If
End If
Next s
If Anz  0 Then
wks.Cells(z, 8).Value = Anz
End If
Next z
End Function

Die function BestimmeletzteZeile hast du ja schon.
Aufrufen in deiner Import Funktion
Zusammenfassen wksDaten
wksDaten ist dann die Worksheetvariable auf der das ganze stattfinden soll, musst du anpasssen.
Gruß
yummi
Anzeige
AW: Nicht alle Dateien werden vom Makro erfasst
08.03.2018 10:04:01
yummi
Hallo Arek,
so in etwa:
Bestimme letztte Zeile von B-J
for zeile = erstezeile bis letzte zeile
summe = zeile, B
for spalte = C bis J
if spalte ungleich H then
if zeile, B = Zeile, spalte then
summe = summe + Zeile, spalte
else
summe = 0
spalte = I
end if
end if
next spalte
if summe ungleich 0 then
zeile,H = summe
end if
next zeile
Reicht dir das als Anleitung? oder brauchst du den gesamten code, dann poste deine Datei.
Gruß
yummi
AW: Nicht alle Dateien werden vom Makro erfasst
08.03.2018 10:33:46
arek
Hi yummi,
danke für den Code! Ich werde es gleich ausprobieren...Mir ist noch die Idee gekommen das Ganze über eine Pivottabelle zu lösen. Hättest du hierzu eine Idee?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige