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

Fehler 400

Fehler 400
29.08.2017 10:30:20
Hartmut_M
Hallo, ich komme bei diesem Problem nicht weiter. Vielleicht hat jemand einen Tipp für mich. Es geht um eine xltm-Datei. An meinem PC läuft der Code ohne Probleme durch. Bei einer Kollegin kommt der berüchtigte 400 Fehler. Lasse ich den Code bei ihr im Einzelschritt durchlaufen, wird er ohne Probleme abgearbeitet. Der Fehler tritt nur auf, wenn der Code durch Klicken auf eine Schaltfläche gestartet wird.
Habe jetzt hinter jedem Befehl eine Msg-Box eingestellt. Starte ich das Makro jetzt, läuft es auch ohne Probleme durch. Irgendwo sieht es so aus, als hätte der Programmablauf ein Zeitproblem. Wie kann ich die Ursache herausfinden?
Gruß Hartmut

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Zeig mal den Code, wir sind keine Hellseher! owT
29.08.2017 10:49:58
Michael
AW: Zeig mal den Code, wir sind keine Hellseher! owT
29.08.2017 11:45:13
Hartmut_M
Hallo Michael, hier der Code. Habe jetzt noch eine msgbox mit der Fehlerbeschreibung eingebunden.
Als Fehler wird ausgegeben: "1004 Die Methode 'Open' für das Object 'Workbooks' ist fehlgeschlagen.
In Google habe ich einen Hinweis gefunden, dass es damit zusammen hängen kann, dass der Focus noch auf der Schaltfläche liegt und Excel da nichts anderes machen kann. Allerdings läuft es, wie beschrieben, bei mir auf dem PC auch bei Betätigen der Schaltfläche.
Sub Sammeldatei()
On Error GoTo fehler
'ausgeblendete Spalten einblenden
Columns("A:C").Hidden = False
Columns("F:F").Hidden = False
'Filter setzen auf "n"
ActiveSheet.Range("$A$1:$M$1000").AutoFilter Field:=7, Criteria1:="nein"
If ActiveSheet.Cells(65536, 7).End(xlUp).Row > 1 Then
ActiveSheet.Range("A1:H" & ActiveSheet.UsedRange.Rows.Count). _
SpecialCells(xlCellTypeVisible).Copy
Worksheets("Sammeldatei").Visible = True
Worksheets("Sammeldatei").Select
Worksheets("Sammeldatei").Range("A1").PasteSpecial xlValues
Application.CutCopyMode = False
'Übertrag für Sammeldatei vorbereiten
Worksheets("Sammeldatei").Visible = True
Worksheets("Sammeldatei").Columns("A:C").Select
Selection.Delete Shift:=xlToLeft
Worksheets("Sammeldatei").Columns("B:B").Select
Selection.Insert Shift:=xlToRight
Worksheets("Sammeldatei").Range("B1").Select
ActiveCell.FormulaR1C1 = "Sparte"
Worksheets("Sammeldatei").Columns("D:D").Select
Selection.ClearContents
Worksheets("Sammeldatei").Range("D1").Select
ActiveCell.FormulaR1C1 = "VN"
Worksheets("Sammeldatei").Columns("E:E").Select
Selection.Insert Shift:=xlToRight
Worksheets("Sammeldatei").Columns("F:F").Select
Selection.Insert Shift:=xlToRight
Worksheets("Sammeldatei").Range("G1").Select
ActiveCell.FormulaR1C1 = "Mangel"
Worksheets("Sammeldatei").Columns("H:H").Select
Selection.Insert Shift:=xlToRight
Worksheets("Sammeldatei").Range("I1").Select
ActiveCell.FormulaR1C1 = "Kommentar"
Worksheets("Sammeldatei").Range("F1") = "Art"
Worksheets("Sammeldatei").Range("M1") = "Name"
Worksheets("Sammeldatei").Range("N1") = "Datum"
Worksheets("Sammeldatei").Columns("J:J").Select
Selection.Insert Shift:=xlToRight
Worksheets("Sammeldatei").Range("A2").Activate
10:
If ActiveCell  "" Then
ActiveCell.Offset(0, 1).Value = "Sach"
ActiveCell.Offset(0, 5).Value = "LW"
ActiveCell.Offset(0, 6).Value = "Besichtigungsqualität"
ActiveCell.Offset(0, 13).Value = Revisor
ActiveCell.Offset(0, 14).Value = Date
ActiveCell.Offset(1, 0).Activate
GoTo 10
End If
'Daten werden kopiert
ActiveSheet.Range("A2:O" & ActiveSheet.UsedRange.Rows.Count). _
SpecialCells(xlCellTypeVisible).Copy
'Öffnet die Sammeldatei und fügt die Daten an.
'Der Pfad muss angepasst werden, wenn die Datei an einem anderen Ort abgelegt/umbenannt wird
Workbooks.Open Filename:="I:\HKS_Fachkontrolle\1_Externe_Fachkontrolle\11_Außendienst\ _
113_Erfassung_und_Auswertung\Sammeldatei.xlsm"
'Öffnet immer in das erste Tabellenblatt (unabhängig vom Namen)
Worksheets(1).Select
'Sucht die nächste freie Zelle
With Worksheets("Berichte")
iletzteZelle = .Cells(.Rows.Count, 1).End(xlUp).Row
'Fügt den Zelleninhalte als "Werte" ein
.Cells(iletzteZelle + 1, 1).PasteSpecial Paste:=xlValues
End With
Workbooks("Sammeldatei.xlsm").Close savechanges:=True
Application.CutCopyMode = False
Worksheets("Sammeldatei").Visible = False
MsgBox "Ihre Daten wurden in die Sammeldatei übertragen!" & vbCrLf & "Jetzt erfolgt noch  _
der Eintrag in die Hauptdatei!"
End If
Hauptdatei
Exit Sub
fehler:
MsgBox Err.Number & " " & Err.Description
End Sub

Sub Hauptdatei()
Worksheets("Final").Select
Dim aSh As Worksheet
Set aSh = ActiveSheet
If aSh.FilterMode Then aSh.ShowAllData
Set aSh = Nothing
Range("E2").Activate
10:
If ActiveCell  "" Then
ActiveCell.Offset(0, -4).Value = "Angenendt"
ActiveCell.Offset(1, 0).Activate
GoTo 10
End If
ActiveSheet.Range("A2:M" & ActiveSheet.UsedRange.Rows.Count). _
SpecialCells(xlCellTypeVisible).Copy
'Öffnet die Hauptdatei und fügt die Daten an.
'Der Pfad muss angepasst werden, wenn die Datei an einem anderen Ort abgelegt/umbenannt wird
Workbooks.Open Filename:="I:\HKS_Fachkontrolle\3_VGV-LW-Qualität\Besichtigungskriterien\ _
Besichtigungskriterien.xlsx"
'Öffnet immer in das erste Tabellenblatt (unabhänig vom Namen)
Worksheets(1).Select
'Sucht die nächste freie Zelle
With Worksheets("Tabelle1")
iletzteZelle = .Cells(.Rows.Count, 1).End(xlUp).Row
'Fügt den Zelleninhalte als "Werte" ein
.Cells(iletzteZelle + 1, 1).PasteSpecial Paste:=xlValues
End With
Workbooks("Besichtigungskriterien.xlsx").Close savechanges:=True
Application.CutCopyMode = False
End Sub

Anzeige
AW: Zeig mal den Code, wir sind keine Hellseher! owT
29.08.2017 12:08:51
Hartmut_M
Hallo, habe jetzt vor dem Befehl workbooks.open noch eine Msgbox gesetzt. Damit läuft der Code ohne Probleme. Ich verstehe nur nicht, warum das erforderlich ist.
Viel Chaos
29.08.2017 15:03:23
Michael
Hartmut,
in Deinen Codes - da sollte sowieso aufgeräumt werden, dann kann's gut sein, dass es keinen Grund für Fehler mehr gibt. Untenstehend mal der Code "Hauptdatei" etwas geputzt, und zwar so, wie ich verstanden habe worum's Dir dabei geht - mehr Infos hab ich ja dazu bis jetzt nicht.
Gerne passe ich Dir auch den Code für "Sammeldatei" an - aber dazu hätte ich zuerst gerne im Klartext eine Beschreibung von Dir, was denn genau passieren soll (welche Datei ist offen, was passiert da, welche Bereiche sind betroffen, was soll gemacht werden, wird die Zieldatei geöffnet oder ist die schon offen etc.).
Sub Hauptdatei()
Const ZIELDATEI$ = "I:\HKS_Fachkontrolle\3_VGV-LW-Qualität\Besichtigungskriterien\ _
Besichtigungskriterien.xlsx"
Dim WbQ As Workbook: Set Wqb = ThisWorkbook
Dim WbZ As Workbook
Dim WsQ As Worksheet: Set WsQ = Wb.Worksheets("Final")
Dim WsZ As Worksheet
Application.ScreenUpdating = False
With WsQ
If .AutoFilterMode Then .ShowAllData
If .Range("E2").Value  "" Then .Range("E2").Offset(0, -4) = "Angenendt"
.Range("A2:M" & .UsedRange.Rows.Count).SpecialCells(xlCellTypeVisible).Copy
End With
Set WbZ = Workbooks.Open(Filename:=ZIELDATEI)
With WbZ.Worksheets("Tabelle1")
.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlValues
End With
WbZ.Close True
Application.CutCopyMode = False
Set WbQ = Nothing: Set WbZ = Nothing: Set WsQ = Nothing: Set WsZ = Nothing
End Sub
Der Zeilenumbruch bei der Konstante mit dem Zielpfad ist der Forumssoftware geschuldet; den musst Du in VBA dann entfernen, sodass die Konstantenzuweisung nur einzeilig ist.
LG
Michael
Anzeige
AW: Viel Chaos
29.08.2017 15:37:17
Hartmut_M
Hallo Michael, vielen Dank für deine Mühe und den angepassten Code.
Im Sub Sammeldatei geht es hauptsächlich darum, die Tabelle anzupassen, da diverse Spalten ausgeblendet sind und falsche Titel haben. Den Code habe ich einfach runtergeschrieben und noch nicht überarbeitet. Wichtig war erstmal, dass das Tabellenblatt nachher so aussieht wie gewünscht.
Ab dem Hinweis "Daten werden kopiert" wird es erst interessant. Es sollen Datensätze in die Datei "Sammeldatei" übertragen werden. Diese liegt auf einem Netzlaufwerk und ist nicht offen.
Es befinden sich schon Datensätze darin, deshalb muss die erste freie Zeile gesucht werden.
Die Kürzung und Optimierung des Codes kann ich selber vornehmen. Mach dir dafür nicht extra Arbeit.
Was mich wirklich interessiert ist die Frage, warum es bei Workbook open zum Abbruch kommt. Dieser Abbruch ist nicht auf allen PCs, sondern nur bei zwei Kollegen. Des Weiteren kommt der Abbruch ausschließlich, wenn der Code beim Klicken auf die Schaltfläche ausgeführt wird. Im Einzelschritt läuft alles problemlos durch. Erst nachdem ich vor das Workbook open Ereignis eine Msgbox eingestellt habe, läuft der Code ohne Probleme.
Die Google-Suche brachte nur den Hinweis, dass bei Betätigen der Schalfläche andere Excel Funktionen nicht ausgeführt werden können. Was ich nicht verstehe, warum es bei einigen funktioniert und bei anderen nicht.
VG Hartmut
Anzeige
Naja,
29.08.2017 17:18:24
Michael
Hartmut,
...Du solltest Deinen Code (evtl. vgl. mit meinem überarbeiteten "Hauptdatei") hinsichtlich korrekter Referenzierungen nochmal überarbeiten. Der von Dir beschriebene Fehler klingt nach falschen Referenzierungen auf Mappen und oder Blätter... Arbeite nicht einfach drauflos mit "ActiveSheet", wenn Du nicht immer sicherstellen kannst, dass das entsprechende Blatt auch aktiv ist - bestimme besser direkt das Blatt, in dem oder mit dem etwas passieren soll, á la ThisWorkbook.Worksheets("Final")...
Mehr kann ich an der Stelle nicht empfehlen.
LG
Michael
AW: Naja,
30.08.2017 08:33:23
Hartmut_M
Vielen Dank Michael für die Unterstützung und die Tipps. Werde den Code nochmal sauber durcharbeiten. Mal sehen, was passiert.
VG Hartmut
Anzeige
Alles klar! Viel Erfolg, owT
30.08.2017 09:37:42
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige