Fehlermeldung bei Makro

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Fehlermeldung bei Makro
von: Imran
Geschrieben am: 01.10.2015 09:49:58

Hallo,
ich hatte vor ca. einer Woche schon einmal hier im Forum nachgefragt, ob mir jemand bei einem Code helfen könnte, der es mit ermöglicht, durch einen Makroklick, einen neuen Eintrag in einer Liste anzulegen. Leider hab ich irgendwann keine Antworten mehr bekommen :/ Hoffe ihr könnt mir hier noch weiterhelfen.
Das ist der Code, den ich bekommen hatte:
Option Explicit


Sub Main()
    Dim lngLastRow As Long
    Dim strTMP As String
    On Error GoTo Fin
    With Tabelle1
        lngLastRow = .Cells(.Rows.Count, 2).End(xlUp).Row
        strTMP = Split(Split(.Cells(lngLastRow, 2).Value, "(")(1), ")")(0)
        If Left(strTMP, 2) = "00" Then
            strTMP = "00" & strTMP + 1
        ElseIf Left(strTMP, 1) = 0 Then
            strTMP = "0" & strTMP + 1
        Else
            strTMP = strTMP + 1
        End If
        If Len(strTMP) > 3 Then strTMP = Right(strTMP, 3)
        .Cells(lngLastRow + 1, 2).Value = "(" & strTMP & ")_ "
        Application.Goto .Cells(lngLastRow + 1, 2), True
        SendKeys "{F2}"
    End With
Fin:
    If Err.Number <> 0 Then MsgBox "Error: " & _
        Err.Number & " " & Err.Description
End Sub

Wenn ich ihn ausführe, bekomm ich den Fehler:
"Error:9 Index außerhalb des gültigen Bereichs."
Kann mir jemand erklären,was es damit auf sich hat ?
Vielen Dank !

Bild

Betrifft: AW: Fehlermeldung bei Makro
von: ChrisL
Geschrieben am: 01.10.2015 09:59:57
Hi
Wenn in Spalte B der letzte Wert nicht den Anforderungen entspricht d.h.
... Klammer Zahl Klammer ...
z.B. Text (1) Text
dann läuft das Programm auf einen Fehler.
cu
Chris

Bild

Betrifft: AW: Fehlermeldung bei Makro
von: Imran
Geschrieben am: 01.10.2015 10:04:00
Oh entschuldige, das hätte ich vielleicht noch dazu schreiben sollen.
Meine Spalte B besteht aus "(580)" Zahlen und dann noch andere Einträgen danach, wie zum Beispiel "Schraube xy".
Und das Makro soll unter genau den letzten "Zahl (xx)" Eintrag einen neuen Eintrag mit der nächst größeren Nummer hinzufügen.

Bild

Betrifft: AW: Fehlermeldung bei Makro
von: ChrisL
Geschrieben am: 01.10.2015 10:10:49


Sub Main()
      Dim lngLastRow As Long
      Dim strTMP As String
      Dim i As Long
      On Error GoTo Fin
      With Tabelle1
          lngLastRow = .Cells(.Rows.Count, 2).End(xlUp).Row
          For i = lngLastRow To 1 Step -1
            If InStr(1, .Cells(i, 2), "(") <> 0 Then Exit For
          Next i
          i = i + 1
          .Rows(i).Insert
          lngLastRow = i - 1
          strTMP = Split(Split(.Cells(lngLastRow, 2).Value, "(")(1), ")")(0)
          If Left(strTMP, 2) = "00" Then
              strTMP = "00" & strTMP + 1
          ElseIf Left(strTMP, 1) = 0 Then
              strTMP = "0" & strTMP + 1
          Else
              strTMP = strTMP + 1
          End If
          If Len(strTMP) > 3 Then strTMP = Right(strTMP, 3)
          .Cells(lngLastRow + 1, 2).Value = "(" & strTMP & ")_ "
          Application.Goto .Cells(lngLastRow + 1, 2), True
          SendKeys "{F2}"
      End With
Fin:
      If Err.Number <> 0 Then MsgBox "Error: " & _
          Err.Number & " " & Err.Description
  End Sub


Bild

Betrifft: AW: Fehlermeldung bei Makro
von: Imran
Geschrieben am: 01.10.2015 10:25:21
Danke !
An sich funktioniert der Code, nur ich bekomme den Fehler "Error: 13 Typen unveränderlich".
Und trotzdem wird nur eine Leere Zeile eingefügt, und nicht "(nächsteZahl)_".
Tut mir Leid, wenn ich ein wenig nerve, aber ich hab echt kaum Ahnung. Aus dem Grund bin ich dir SEHR dankbar für deine Hilfe !

Bild

Betrifft: AW: Fehlermeldung bei Makro
von: ChrisL
Geschrieben am: 01.10.2015 10:46:33
Ist OK, aber wird Zeit für eine Beispieldatei...

Bild

Betrifft: AW: Fehlermeldung bei Makro
von: Imran
Geschrieben am: 01.10.2015 10:49:46
Hier die Beispieldatei.
https://www.herber.de/bbs/user/100521.xlsx'
Danke !

Bild

Betrifft: AW: Fehlermeldung bei Makro
von: ChrisL
Geschrieben am: 01.10.2015 12:44:41
Mit dieser Beispieldatei funktioniert der Code. Kann den Fehler leider nicht nachvollziehen.

Bild

Betrifft: AW: Fehlermeldung bei Makro
von: Imran
Geschrieben am: 01.10.2015 14:34:16
Stimmt, auf der Beispieldatei funktioniert es...ich kann mir aber nicht erklären, woran es liegen könnte. Meine Hauptdatei hat viel mehr Spalten, aber daran kann es ja nicht liegen. Er nutzt ja die richtige Spalte, aber setzt eine leere Zeile, und zeigt dern Error 13 an..

Bild

Betrifft: AW: Fehlermeldung bei Makro
von: ChrisL
Geschrieben am: 01.10.2015 17:27:53
Kann es sein, dass du eine Klammer hast, wo keine Zahl sondern Text drin steht?

Bild

Betrifft: AW: Fehlermeldung bei Makro
von: Imran
Geschrieben am: 02.10.2015 10:58:52
Genau das ist es ! Ich habe unter der letzten Zahl, drei Platzhalter (XXX),(YYY),(ZZZ) reserviert, in die ich Preise eintrage. Kann man die irgendwie umgehen, oder soll ich sie löschen bzw mir etwas anderes einfallen lassen ?

Bild

Betrifft: AW: Fehlermeldung bei Makro
von: Imran
Geschrieben am: 02.10.2015 11:08:23
Wenn ich sie lösche, dann funktioniert der Code !
Kann ich sie, aber trotzdem umgehen ?
ZB über Codezeilen, die explizit (XXX),(YYY),(ZZZ) ausschließen ?

Bild

Betrifft: AW: Fehlermeldung bei Makro
von: Imran
Geschrieben am: 02.10.2015 11:29:59
Ok, ich hab sie einfach in eckige Klammern gesetzt !
Das funktioniert jetzt genau so, wie ich es mir vorgestellt habe !
Nur eine Sache noch !
Wenn ich das Makro ausführe, bekomme ich den
"Lauftzeitfehler '1004': Die Methode 'Undo' für das Objekt '_Application' ist fehlgeschlagen."
Das kann ich aber einfach beenden, ohne es zu debuggen, und dann funktioniert das Makro ganz normal.
Außerdem tritt der Fehler "Laufzeitfehler '424': Objekt erforderlich" auf, wenn ich manuell eine neue zeile einfüge. Auch das kann ich beenden und danach normal ausführen.
Hier werde ich auf "AlterWert = target.Value" im Code hingewiesen.
Wenn ich debugge, weißt der auf meinen Code in der Arbeitsmappe hin. Ich habe mir ein Protokoll erstellt, der alle Änderungen aufnimmt.
Das ist der Code:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  Dim ErsteFreieZeile As Long
  Dim AlterWert As Variant, NeuerWert As Variant
  Dim rngNeuSel As Range
  If Sh.Name = "Protokoll" Then Exit Sub
  If Intersect(Target, Sh.Range("A1:AN2000")) Is Nothing Then Exit Sub
'------
  'Ereignisbehandlung ausschalten:
  Application.EnableEvents = False
  'Zwischenspeichern des neuen Wertes und der neuen Zellmarkierung
  NeuerWert = Target.Value
  Set rngNeuSel = Selection
  'Rückgängigmachen der letzten Aktion (=Zellwertänderung und Zellmarkierung):
  Application.Undo '<-- Des Pudels Kern, um alten Zellwert wieder zu bekommen
  'Alten Zellwert zwischenspeichern
  AlterWert = Target.Value
  'Neuen Zellwert aus der Zwischenspeicherung zurückholen in die geänderte Zelle
  Target.Value = NeuerWert
  'Ebenso die neue Zellmarkierung wieder neu setzen
  On Error Resume Next
  rngNeuSel.Activate
  On Error GoTo 0
'------
  With Sheets("Protokoll")
    ErsteFreieZeile = .Cells(Rows.Count, 1).End(xlUp).Row + 1
    .Cells(ErsteFreieZeile, 1) = Sh.Name
    .Cells(ErsteFreieZeile, 2) = Target.Address(0, 0)
    .Cells(ErsteFreieZeile, 3) = Target.Value
    .Cells(ErsteFreieZeile, 4) = AlterWert            '<---- Ausgeben
    .Cells(ErsteFreieZeile, 5) = Date
    .Cells(ErsteFreieZeile, 6) = Time
    .Cells(ErsteFreieZeile, 7) = Environ("username")
  End With
'------
  'Ereignisbehandlung wieder einschalten:
  Application.EnableEvents = True
End Sub


Bild

Betrifft: AW: Fehlermeldung bei Makro
von: ChrisL
Geschrieben am: 02.10.2015 13:58:34
Hi
Mach bitte einen neuen Beitrag. Gleich vorweg: Ohne aussagekräftige Beispieldatei wird sich auch hier kaum etwas machen lassen bzw. macht es keinen Spass sich anhand eines Codes ein Dateibeispiel zusammen zu reimen, das dann vielleicht doch nicht stimmt.
cu
Chris

Bild

Betrifft: AW: Fehlermeldung bei Makro
von: ChrisL
Geschrieben am: 02.10.2015 13:47:28
Ich glaube so müsste es gehen:

Sub Main()
Dim lngLastRow As Long
Dim strTMP As String
Dim i As Long
On Error GoTo Fin
With Tabelle1
    lngLastRow = .Cells(.Rows.Count, 2).End(xlUp).Row
    For i = lngLastRow To 1 Step -1
      If InStr(1, .Cells(i, 2), "(") <> 0 And _
      IsNumeric(Mid(.Cells(i, 2), InStr(1, .Cells(i, 2), "(") + 1, 1)) Then Exit For
    Next i
    i = i + 1
    .Rows(i).Insert
    lngLastRow = i - 1
    strTMP = Split(Split(.Cells(lngLastRow, 2).Value, "(")(1), ")")(0)
    If Left(strTMP, 2) = "00" Then
        strTMP = "00" & strTMP + 1
    ElseIf Left(strTMP, 1) = 0 Then
        strTMP = "0" & strTMP + 1
    Else
        strTMP = strTMP + 1
    End If
    If Len(strTMP) > 3 Then strTMP = Right(strTMP, 3)
    .Cells(lngLastRow + 1, 2).Value = "(" & strTMP & ")_ "
    Application.Goto .Cells(lngLastRow + 1, 2), True
    SendKeys "{F2}"
End With
Fin:
If Err.Number <> 0 Then MsgBox "Error: " & _
    Err.Number & " " & Err.Description
End Sub


Bild

Betrifft: AW: Fehlermeldung bei Makro
von: Daniel
Geschrieben am: 01.10.2015 17:37:08
Hi
wenns in der Beispieldatei funktioniert, dann solltest du überprüfen, wie sich die Beispieldatei von der Originaldatei unterscheidet.
des weitern solltest du dir mal genauer anschauen, wo und wann genau der Fehler passiert und welchen Wert die Variablen dann haben.
sollte beispielsweise der Fehler nicht schon beim ersten schleifendurchlauf sondern erst beim 10. durchlauf passieren, dann muss man die Werte, die beim letzen funktionierenden Durchlauf verwendet wurden, mit denen vergleichen, bei denen der Fehler passiert ist.
Gruß Daniel

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Fehlermeldung bei Makro"