Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Laufzeit 1004 Fehler beim Makro kopieren
#1
Hallo!

Ich probier mich gerade ein bisschen mit VBA aus und habe ein Makro geschrieben, dass quasi ein LogIn Protokoll schreiben soll:




Private Sub Workbook_Open()

  Dim ws As Worksheet                                                                         'Variablendeklaration
  Dim lngLastRow As Long                                                                     'Variablendeklaration

  Set ws = Worksheets("Log")                                                               'Namenszuordnung zum Log-Blatt

  ws.Visible = xlSheetVeryHidden                                                            'versteckt

  Tabelle2.Unprotect "*********"                                                         'Tabelle2 Blattschutz aufheben um Eintragen zu können + Passwortentsperrung

  lngLastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1                                    'Erste leere Zeile bestimmen

  With ws
  .Cells(lngLastRow, 1).Value = Format(Now, "DDD, DD.MM.YY hh:mm")                  'Datum und Zeit protokollieren
  .Cells(lngLastRow, 2).Value = Application.UserName                                                 'Benutzernamen protokollieren
  End With

  Tabelle2.Protect "*********"                                                                                 'Tabelle2 Blattschutz einfügen, um Eintragungen zu verhindern + Passwortsicherung



If Tabelle4.Range("E5").Value = "Log" Then                                                               'Öffnungsvorgang für das Logblatt
   Tabelle2.Visible = True
   Else: Exit Sub
   End If



On Error Resume Next                                                                        'Fehlerbehandlung, falls Datei von nicht beschreibbarem Medium geöffnet wird

ThisWorkbook.Save                                                                           'Speichern

End Sub



Das ganze funktioniert auch in meiner Datei und ich wollte das Makro genauso auch in eine andere Datei einfügen, bekomme dort allerdings den Fehler:

Laufzeitfehler 1004

Die Methode 'Rows' für das Objekt '_Global' ist fehlgeschlagen.


Dankbar für jede Hilfe Huh
Antworten Top
#2
Hallo,

vielleicht so?

Code:
Private Sub Workbook_Open()

  Dim ws As Worksheet                                                                         'Variablendeklaration
  Dim lngLastRow As Long                                                                     'Variablendeklaration

  Set ws = Worksheets("Log")                                                               'Namenszuordnung zum Log-Blatt

  ws.Visible = xlSheetVeryHidden                                                            'versteckt

  Tabelle2.Unprotect "*********"                                                         'Tabelle2 Blattschutz aufheben um Eintragen zu k?nnen + Passwortentsperrung

  lngLastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1                                    'Erste leere Zeile bestimmen

  With ws
  .Cells(lngLastRow, 1).Value = Format(Now, "DDD, DD.MM.YY hh:mm")                  'Datum und Zeit protokollieren
  .Cells(lngLastRow, 2).Value = Application.UserName                                                 'Benutzernamen protokollieren
  End With

  Tabelle2.Protect "*********"                                                                                 'Tabelle2 Blattschutz einf?gen, um Eintragungen zu verhindern + Passwortsicherung



If Tabelle4.Range("E5").Value = "Log" Then                                                               '?ffnungsvorgang f?r das Logblatt
   Tabelle2.Visible = True
   Else: Exit Sub
   End If



On Error Resume Next                                                                        'Fehlerbehandlung, falls Datei von nicht beschreibbarem Medium ge?ffnet wird

ThisWorkbook.Save                                                                           'Speichern

End Sub
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#3
Hallo Stefan,

das ist zwar nicht korrekt referenziert, wirft aber trotzdem keinen Fehler 1004 aus. Es kann halt nur zum Problem werden, wenn ws nicht das Aktive Worksheet ist, weil dann halt die erste freie Zelle nicht stimmt. Der Fehler 1004 würde hier nur kommen, wenn lngLastRow 0 wäre, was aber nicht sein kann.

Ich vermute viel mehr, dass der Fehler hier

Code:
ws.Visible = xlSheetVeryHidden
ausgeworfen wird, weil nur ein Blatt vorhanden ist und das kann man nicht ausblenden und führt zum Fehler 1004.

Aber leider hat uns ja der Beitragsersteller nicht mitgeteilt in welcher Codezeile der Fehler ausgeworfen wird.

Gruß Werner
Antworten Top
#4
Er spricht ja (mindestens!) zwei Sheets an, Werner!
Ohnehin seltsam, das Hopping zwischen Name und Codename der Tabellen …
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#5
Ja tut mir leid, ich habe wirklich gestern erst angefangen mit VBA und mir Sachen zurecht gestückelt.

Ich habe es jetzt ein bisschen anders aufgebaut:

Private Sub Workbook_Open()


Tabelle13.Unprotect "********"                                                                                              'Tabelle2 Blattschutz aufheben um Eintragen zu können + Passwortentsperrung


  Dim ws As Worksheet                                                                                                              'Variablendeklaration
  Dim lngLastRow As Long                                                                                                         'Variablendeklaration

  Set ws = Tabelle13                                                                                                                  'Namenszuordnung zum Log-Blatt

  lngLastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1                                                      'Erste leere Zeile bestimmen

  With ws
  .Cells(lngLastRow, 1).Value = Format(Now, "DDD, DD.MM.YY hh:mm")                                   'Datum und Zeit protokollieren
  .Cells(lngLastRow, 2).Value = Application.UserName                                                                 'Benutzernamen protokollieren
  End With


Tabelle13.Protect "********"                                                                                                 'Tabelle2 Blattschutz einfügen, um Eintragungen zu verhindern + Passwortsicherung


If Tabelle1.Range("E5").Value = "Log" Then                                                                              'Öffnungsvorgang für das Logblatt
   Tabelle13.Visible = True
   Else: Exit Sub
   End If


On Error Resume Next                                                                                                               'Fehlerbehandlung, falls Datei von nicht beschreibbarem Medium geöffnet wird

ThisWorkbook.Save                                                                                                                   'Speichern

End Sub

Ich weiß zwar nicht genau woran es jetzt lag, aber damit funktioniert es.
Danke an alle!
Antworten Top
#6
Hallo,

1. die Variablendeklaration gehört in den Kopf der Prozedur und nicht irgendwo in den Code
2. ist deine Variable lngLastRow immer noch nicht sauber referenziert, weil vor Rows.Count das entsprechende Blatt fehlt
3. Variable die mit Set geladen worden sind, sollte man am Ende auch wieder "entladen"

Code:
Private Sub Workbook_Open()
Dim ws As Worksheet, lngLastRow As Long

Set ws = Tabelle13

With ws
   .Unprotect "********"
   lngLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
   .Cells(lngLastRow, 1).Value = Format(Now, "DDD, DD.MM.YY hh:mm")
   .Cells(lngLastRow, 2).Value = Application.UserName
   .Protect "********"
End With

If Tabelle1.Range("E5").Value = "Log" Then
   Tabelle13.Visible = True
Else
   Exit Sub
End If

On Error Resume Next
ThisWorkbook.Save

Set ws = Nothing
End Sub

Gruß Werner
Antworten Top
#7
Thumbs Up 
Das kommt vielleicht etwas spät, aber vielen Dank für die Korrekturen, Werner!
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste