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

komischer Fehler

komischer Fehler
Peter
Ein Hallo ins Forum,
ich habe unten stehenden Code zusammengabaut, der beim Debuggen in Einzelschritten wunschgemäß funktioniert, wenn ich ihn aber durchlaufen lasse bleiben die Zellen leer. Irgendwie scheint es mit dem Eintrag "LetztesBlatt = ActiveWorkbook.Sheets.Count" zusammenzuhängen. Wenn ich dieses deaktiviere und Daten aus irgendwelchen anderen sheets übernehme, klappts.
Ein anderes Phänomen ist auch noch aufgetaucht: Eine Zeit lang hat die Speichern-Abfrage beim Schließen der Arbeitsmappe nicht funktioniert. So lange dies auftrat hatte es auch mit "LetztesBlatt = ActiveWorkbook.Sheets.Count" beim automatischen Durchlauf des Codes funktioniert.
Keine Ahnung warum und wie ich weiter komme.
Vielleicht bzw. hoffentlich hat von Euch jemand eine Idee. Vielen Dank fürs Anschauen.
Sub Zusammenfassen_Resttage()
Dim Datei As String
Dim Arbeitsmappe As String
Dim Pfad As String
Dim i As Integer
Dim LetztesBlatt As Variant
Pfad = "C:\Users\Test\"
Datei = Dir(Pfad & "*.xls")
Application.ScreenUpdating = False
Do While Datei  ""
i = i + 1
ChDir Pfad
Workbooks.Open Filename:=Datei
LetztesBlatt = ActiveWorkbook.Sheets.Count
Sheets(LetztesBlatt).Activate
ActiveSheet.Unprotect
ActiveSheet.Cells(1, 4).Select
Selection.Copy
Windows("Planung_graphisch_neu_2.xls").Activate
Worksheets("Wochenstatistik").Activate
ActiveSheet.Cells(1 + i, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Workbooks(Datei).Activate
ActiveSheet.Cells(5, 12).Select
Selection.Copy
Windows("Planung_graphisch_neu_2.xls").Activate
Worksheets("Wochenstatistik").Activate
ActiveSheet.Cells(1 + i, 2).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Workbooks(Datei).Activate
ActiveSheet.Protect
Application.DisplayAlerts = False
ActiveWorkbook.Close False
Datei = Dir()
'Application.Columns.AutoFit
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

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

Betreff
Benutzer
Anzeige
AW: komischer Fehler
11.02.2012 15:16:24
Peter
Nachtrag zur Verdeutlichung:
Es geht in meinem Code einfach darum, aus einer unbestimmten Anzahl von Dateien 2 voneinander unabhängige Zellen auf dem jeweils letzten Arbeitsblatt, das in jeder Datei anders heißt, in eine andere, vorhandene Datei zu kopieren. Die Ergebnisse sollen sich zumindest bei jedem Start der Datei oder wenn möglich, bei jeder Änderung der Quell-Datei aktualisieren.
AW: komischer Fehler
11.02.2012 16:33:07
fcs
Hallo Peter,
es ist schon etwas merkwürdig, dass der Ablauf gestört ist.
Generell ist es aber günstiger mit Objektvariablen für Mappen und Tabellenblätter zu arbeiten, wenn mehrere Arbeitesmappen in Makroaktionen involviert sind, statt permanent zwischen den Mappen hin- und herzuschalten. Außerdem wird das Makro übersichtlicher und leichter lesbar.
Da in den Mappen, die geöffnet/ausgelesen werden, keine Daten geändert werden, sollten diese schreibgeschützt geöffnet werden. Beim Filename der zu öffnenden Dateien sollte der Pfad+Dateiname angegeben werden - ist etwas sicherer.
Gruß
Franz
Sub Zusammenfassen_Resttage()
Dim wbZiel As Workbook, wksZiel As Worksheet
Dim wbQuelle As Workbook, wksQuelle As Worksheet
Dim Datei As String
Dim Arbeitsmappe As String
Dim Pfad As String
Dim i As Long
Dim LetztesBlatt As Variant
Set wbZiel = Workbooks("Planung_graphisch_neu_2.xls")
Set wksZiel = wbZiel.Worksheets("Wochenstatistik")
Pfad = "C:\Users\Test\"
Datei = Dir(Pfad & "*.xls")
Application.ScreenUpdating = False
ChDir Pfad
Do While Datei  ""
If LCase(wbZiel.Name)  LCase(Datei) Then
i = i + 1
Set wbQuelle = Workbooks.Open(Filename:=Pfad & Datei, ReadOnly:=True)
LetztesBlatt = wbQuelle.Sheets.Count
Set wksQuelle = wbQuelle.Sheets(LetztesBlatt)
wksQuelle.Unprotect  'erforderlich ?
wksQuelle.Cells(1, 4).Copy
wksZiel.Cells(1 + i, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks  _
_
:=False, Transpose:=False
wksQuelle.Cells(5, 12).Copy
wksZiel.Cells(1 + i, 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks  _
_
:=False, Transpose:=False
Application.CutCopyMode = False
wbQuelle.Close savechanges:=False
End If
Datei = Dir()
Set wbQuelle = Nothing: Set wksQuelle = Nothing
Loop
wbZiel.Activate
wksZiel.Activate
'wksZiel.Columns.AutoFit
Application.ScreenUpdating = True
End Sub

Anzeige
AW: komischer Fehler
11.02.2012 18:02:40
Peter
Hallo Franz,
vielen Dank für die hilfreichen Verbesserungsvorschläge. So weit gut nachvollziehbar.
Funktionieren tut es leider nicht.
Die workbooks werden angesprochen und auch die Zielzellen werden nach und nach aktiviert, bleiben aber leer (egal ob Einzelschritte oder autom. Durchlauf.
Beim Debuggen wird das Quell-Workbook korrekt angesprochen aber -zumindest nicht sichtbar- das letzte worksheet aktiviert und auch die Quellzellen werden nicht sichtbar angesprungen (blinkender Rahmen um die kopierte Zelle). Vielleicht läuft das ja im Hintergrund !?
(Ich hatte zuvor schon einmal eine verkürzte Form ansatzweise angewandt, bin dann aber wieder zur Select-copy-Weise zurück, weil es nur so funktionierte.
Hast Du eine Idee woran es liegen könnte? Kann eine falsche Excel-Konfiguration die Ursache sein?
Gruß
Peter
Anzeige
AW: komischer Fehler
11.02.2012 20:08:06
fcs
Hallo Peter,
wenn das Makro ohne Fehler-Durchläuft, dann werden zumindest gültige Objekte gefunden. Warum die ohne Daten sind?
Beim Debuggen wird das Quell-Workbook korrekt angesprochen
ok
aber -zumindest nicht sichtbar- das letzte worksheet aktiviert
Aktivieren und selektieren ist bei korrekter Programmierung eigentlich nicht erforderlich.
und auch die Quellzellen werden nicht sichtbar angesprungen (blinkender Rahmen um die kopierte Zelle).
Der blinkende Rahmen wird mit Zeile
Application.CutCopyMode = False
deaktiviert.
Vielleicht läuft das ja im Hintergrund !?
Die Kopiervorgänge laufen ab, ohne dass ständig sichtbar zwischen den Arbeitsmappen hin- und hergeschaltet wird.
Kann es sein, dass in den Quelldateien ausgeblendete Tabellenblätter vorhanden sind?
Falls ja, dann müsste man nach dem Öffnen der Datei nicht das letzte Tabellenblatt, sondern das letzte sichtbare Tabellenblatt ermitteln. Zusätzlich kannst du ja mal zusätzlich eine Testzeile einfügen, die die zukopierenden Daten anzeigt.
'Letztes sichtbares Blatt ermitteln
Do
Set wksQuelle = wbQuelle.Sheets(LetztesBlatt)
If wksQuelle.Visible = xlSheetVisible Then Exit Do
LetztesBlatt = LetztesBlatt - 1
Loop
wksQuelle.Unprotect  'erforderlich ?
'Test-Zeile
MsgBox "Name Quelldatei: " & wbQuelle.Name & vbLf _
& "Name Tabelle: " & wksQuelle.Name & vbLf _
& "Zelladresse1: " & wksQuelle.Cells(1, 4).Address & vbLf _
& "ZellWert: " & wksQuelle.Cells(1, 4).Value & vbLf _
& "Zelladresse2: " & wksQuelle.Cells(5, 12).Address & vbLf _
& "ZellWert: " & wksQuelle.Cells(5, 12).Value, vbOKOnly, "Informationen Quelle"
wksQuelle.Cells(1, 4).Copy
Darüber hinaus könnte ich nur noch was vermuten, wenn ich ich die Quelldateien sehen könnte.
Gruß
Franz
Anzeige
AW: komischer Fehler
11.02.2012 22:43:18
Peter
Hallo Franz,
Du vermutest richtig. Er griff bisher auf ein ausgeblendetes sheet zu, indem in den Zellen natürlich nichts drin steht.
Die Quelldatei ist die Datei für die Du dankenswerter Weise im Januar schon einen Code geschrieben hast zur Erfassung der Statistik (16.01.2012).
Beim neuen Code zur Ermittlung des letzten sichtbaren sheets kommt die Fehlermeldung
Laufzeitfehler: 9 Index außerhalb des gültigen Bereichs in der Zeile:
Set wksQuelle = wbQuelle.Sheets(LetztesBlatt) und bricht ab.
Ich hoffe ich habe den Code richtig eingefügt, wie Du geschrieben hast, nach dem Öffnen der Quelldatei.
War die Stelle richtig?
Gruß
Peter
Anzeige
AW: komischer Fehler
12.02.2012 02:09:24
Peter
Nochmal hallo Franz,
vielen Dank für Deine Hilfe. Ich habe nach einigem Probieren selbst meinen Fehler gefunden. Ich hatte den von Dir erstellten code doch falsch eingefügt. Nach Korrektur läuft alles bestens.
Das schöne ist, dass man von Euch auch viel lernen kann.
Besten Dank nochmal.
Gruß
Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige