Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Die Methode Value für.... Automatisierungsfehler

Forumthread: Die Methode Value für.... Automatisierungsfehler

Die Methode Value für.... Automatisierungsfehler
14.02.2017 12:18:53
Xanaa
Hallo,
nach langer Abwesenheit bitte ich noch einmal um Eure geschätzte Hilfe:
Unser Betrieb hat auf Excel 2013 umgestellt.
Nun tritt in einer UserForm ein Problem auf, dem ich nicht auf die Spur komme:
Es werden aus der User Form Eingaben in eine Liste geschrieben. Beim Klick auf den Button zur Übernahme folgt "214717848 (80010108) - Die Methode Value für das Objekt Range ist fehlgeschlagen" .
Ich starte den Debugger, es folgt "Automatisierungsfehler. Das aufgerufene Objekt wurde vom Client getrennt"
Egal wohin ich nun klicke, Excel verabschiedet sich im Nirwana (Neustart / Beenden)
Ich habe das mal komplett einkopiert:
Die Abfrage der leeren Felder funktioniert noch, bei der Variablen "p" hängt es dann ( an der Stelle .Range("A" & p).Value = ComboBox7.Text)
Hat jemand eine Idee für mich? Achtung, ihr müsst mir das für Dumme erklären, hab nicht viel Erfahrung....
Euch schon mal ein großes Dankeschön!
Private Sub CommandButton1_Click()
Dim p As Long
If TextBox1.Text = "" Or _
ComboBox1.Value = "" Or _
ComboBox2.Value = "" Or _
ComboBox3.Value = "" Or _
ComboBox4.Value = "" Or _
ComboBox5.Value = "" Or _
ComboBox6.Value = "" Or _
ComboBox7.Value = "" Then
MsgBox "Bitte alle Felder ausfüllen!", vbInformation, "Hinweis"
Exit Sub
End If
With Sheets("Verbrauchsliste")
p = IIf(IsEmpty(.Range("A65536")), .Range("A65536").End(xlUp).Row, 65536) + 1
 .Range("A" & p).Value = ComboBox7.Text
.Range("B" & p).Value = ComboBox1.Text
ComboBox1.Text = ""
.Range("C" & p).Value = ComboBox2.Text
ComboBox2.Text = ""
.Range("D" & p).Value = ComboBox3.Text
ComboBox3.Text = ""
.Range("E" & p).Value = ComboBox4.Text
ComboBox4.Text = ""
.Range("F" & p).Value = ComboBox5.Text
ComboBox5.Text = ""
.Range("G" & p).Value = TextBox1.Text
TextBox1.Text = ""
.Range("H" & p).Value = ComboBox6.Text
ComboBox6.Text = ""
'usw. für die restlichen ComboBoxen.
ListBox1.RowSource = .Range("A3:H" & p).Address(External:=True)
End With
End Sub

Private Sub ComboBox1_Change()
TextBox2 = Date
End Sub

Private Sub CommandButton2_Click()
If TextBox3.Text "geheim" Then
Application.Quit
Else
Unload Me
End If
End Sub

Private Sub Label12_Click()
End Sub

Private Sub Label8_Click()
End Sub

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim p As Long, q As Long
q = ListBox1.ListCount
If ListBox1.ListIndex MsgBox "Dieser Eintrag kann nicht mehr geändert werden!", vbCritical, "Hinweis"
Exit Sub
End If
p = ListBox1.ListIndex + 3
ComboBox1.Value = Range("B" & p).Value
ComboBox2.Value = Range("C" & p).Value
ComboBox3.Value = Range("D" & p).Value
ComboBox4.Value = Range("E" & p).Value
ComboBox5.Value = Range("F" & p).Value
ComboBox6.Value = Range("H" & p).Value
ComboBox7.Value = Range("G" & p).Value
End Sub

Private Sub TextBox2_Change()
End Sub

Private Sub TextBox4_Change()
End Sub

Private Sub UserForm_Initialize()
Dim z As Long, lz As Long
With Sheets("Listbox-Felder")
ListBox1.ColumnWidths = "110 Pt;150 Pt;40 Pt; 40 Pt;100 Pt;70 Pt"
For z = 3 To .Cells(65536, 1).End(xlUp).Row
ComboBox1.AddItem .Cells(z, 1).Value
Next z
For z = 3 To .Cells(65536, 2).End(xlUp).Row
ComboBox2.AddItem .Cells(z, 2).Value
Next z
For z = 3 To .Cells(65536, 3).End(xlUp).Row
ComboBox3.AddItem .Cells(z, 3).Value
Next z
For z = 3 To .Cells(65536, 4).End(xlUp).Row
ComboBox4.AddItem .Cells(z, 4).Value
Next z
For z = 3 To .Cells(65536, 5).End(xlUp).Row
ComboBox5.AddItem .Cells(z, 5).Value
Next z
For z = 3 To .Cells(65536, 6).End(xlUp).Row
ComboBox6.AddItem .Cells(z, 6).Value
Next z
For z = 3 To .Cells(65536, 7).End(xlUp).Row
ComboBox7.AddItem .Cells(z, 7).Value
Next z
End With
With Sheets("Verbrauchsliste")
lz = .Cells(65536, 1).End(xlUp).Row
ListBox1.RowSource = .Range("A3:H" & lz).Address(External:=True)
ListBox1.ColumnHeads = True
End With
Me.Top = 0
Me.Left = 0
Me.Height = Application.Height
Me.Width = Application.Width
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If TextBox3.Text "geheim" Then Cancel = True
End Sub

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Automatisierungsfehler
14.02.2017 12:26:18
mumpel
Hallo!
Als Erstes sollte Du mal .Range("A" & Rows.Count) nutzen, damit setzt Du die Zeiger immer auf die mögliche Zeilenanzahl.
Gruß, René
AW: Automatisierungsfehler
14.02.2017 13:40:47
Leo
Hallo Renè,
erst mal vielen Dank.
Wie gesagt, Erklärung bitte für Dumme :-)
Ich habe jetzt die Zeilen
= IIf(IsEmpty(.Range("A65536")), .Range("A65536").End(xlUp).Row, 65536) + 1
.Range("A" & p).Value = ComboBox7.Text
.Range("B" & p).Value = ComboBox1.Text
ComboBox1.Text = ""
.Range("C" & p).Value = ComboBox2.Text
ComboBox2.Text = ""
.Range("D" & p).Value = ComboBox3.Text
ComboBox3.Text = ""
.Range("E" & p).Value = ComboBox4.Text
ComboBox4.Text = ""
.Range("F" & p).Value = ComboBox5.Text
ComboBox5.Text = ""
.Range("G" & p).Value = TextBox1.Text
TextBox1.Text = ""
.Range("H" & p).Value = ComboBox6.Text
ComboBox6.Text = ""
entsprechend geändert in
Range("A" & Rows.Count)
Range("B" & Rows.Count)
usw.
Richtig?
Der Fehler tritt dann nicht mehr auf, allerdings werden auch keine Einträge mehr in der Liste gemacht...
Was mache ich falsch?
Noch mal Dankeschön, auch für das "Dummie - Aushalten" :-)
Anzeige
AW: Automatisierungsfehler
14.02.2017 18:38:28
mumpel
Auch die anderen Zeilenangaben angepasst?
IIf(IsEmpty(.Range("A" & Rows.Count)), .Range("A" & Rows.Count).End(xlUp).Row, Rows.Count) + 1
AW: Automatisierungsfehler
15.02.2017 11:19:35
Leo
Hi,,
ich denke, ich habe das richtig ausgetauscht. Ich bekomme auch keinen Fehler mehr, eben aber auch keinen Eintrag in meiner Liste...
So ein Elend. Kannst Du mir - unverschämterweise - meinen Beitrag mal anpassen, wie es ausshen sollte? Vielleicht mache ich ja ein Fehler in der Anpassung....
Dankeschön!
Anzeige
AW: Automatisierungsfehler
15.02.2017 14:11:46
Michael
Hi,
ich denke, es war insgesamt so gemeint:
Private Sub CommandButton1_Click()
Dim p As Long
If TextBox1.Text = "" Or _
ComboBox1.Value = "" Or _
ComboBox2.Value = "" Or _
ComboBox3.Value = "" Or _
ComboBox4.Value = "" Or _
ComboBox5.Value = "" Or _
ComboBox6.Value = "" Or _
ComboBox7.Value = "" Then
MsgBox "Bitte alle Felder ausfüllen!", vbInformation, "Hinweis"
Exit Sub
End If
With Sheets("Verbrauchsliste")
p = .Range("A" &.rows.count) + 1
' das IIf schließt nur den Fall aus,
' daß die Tabelle bis ca. 1 Mio. zeilen gefüllt ist
msgbox "Die nächste, leere Zeile ist " & p
.Range("A" & p).Value = ComboBox7.Text
.Range("B" & p).Value = ComboBox1.Text
ComboBox1.Text = ""
.Range("C" & p).Value = ComboBox2.Text
ComboBox2.Text = ""
.Range("D" & p).Value = ComboBox3.Text
ComboBox3.Text = ""
.Range("E" & p).Value = ComboBox4.Text
ComboBox4.Text = ""
.Range("F" & p).Value = ComboBox5.Text
ComboBox5.Text = ""
.Range("G" & p).Value = TextBox1.Text
TextBox1.Text = ""
.Range("H" & p).Value = ComboBox6.Text
ComboBox6.Text = ""
'usw. für die restlichen ComboBoxen.
ListBox1.RowSource = .Range("A3:H" & p).Address(External:=True)
End With
End Sub

Allerdings: wenn Du in die Zelle Range("A" & rows.count) bereits geschrieben hast, lösche das dort bitte.
Schöne Grüße,
Michael
Anzeige
AW: Automatisierungsfehler
15.02.2017 14:32:32
Leo
Hallo,
erst mal Dankeschön!
Soweit keine Fehlermeldung, allerdings wird immer die erste Zelle als freie Zelle übernommen, sprich überschrieben. Was mache ich noch falsch?
LG, Leo
Option Explicit ' IMMER!
Private Sub ComboBox5_Change()
End Sub

Private Sub ComboBox7_Change()
End Sub

Private Sub CommandButton1_Click()
Dim p As Long
If TextBox1.Text = "" Or _
ComboBox1.Value = "" Or _
ComboBox2.Value = "" Or _
ComboBox3.Value = "" Or _
ComboBox4.Value = "" Or _
ComboBox5.Value = "" Or _
ComboBox6.Value = "" Or _
ComboBox7.Value = "" Then
MsgBox "Bitte alle Felder ausfüllen!", vbInformation, "Hinweis"
Exit Sub
End If
With Sheets("Verbrauchsliste")
p = .Range("A" & .Rows.Count) + 1
' das IIf schließt nur den Fall aus,
' daß die Tabelle bis ca. 1 Mio. zeilen gefüllt ist
MsgBox "Die nächste, leere Zeile ist " & p
.Range("A" & p).Value = ComboBox7.Text
.Range("B" & p).Value = ComboBox1.Text
ComboBox1.Text = ""
.Range("C" & p).Value = ComboBox2.Text
ComboBox2.Text = ""
.Range("D" & p).Value = ComboBox3.Text
ComboBox3.Text = ""
.Range("E" & p).Value = ComboBox4.Text
ComboBox4.Text = ""
.Range("F" & p).Value = ComboBox5.Text
ComboBox5.Text = ""
.Range("G" & p).Value = TextBox1.Text
TextBox1.Text = ""
.Range("H" & p).Value = ComboBox6.Text
ComboBox6.Text = ""
'usw. für die restlichen ComboBoxen.
ListBox1.RowSource = .Range("A3:H" & p).Address(External:=True)
End With
End Sub
Private Sub ComboBox1_Change()
TextBox2 = Date
End Sub

Private Sub CommandButton2_Click()
If TextBox3.Text  "geheim" Then
Application.Quit
Else
Unload Me
End If
End Sub

Private Sub Label12_Click()
End Sub

Private Sub Label8_Click()
End Sub

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim p As Long, q As Long
q = ListBox1.ListCount
If ListBox1.ListIndex 

Private Sub TextBox2_Change()
End Sub

Private Sub TextBox4_Change()
End Sub

Private Sub UserForm_Initialize()
Dim z As Long, lz As Long
With Sheets("Listbox-Felder")
ListBox1.ColumnWidths = "110 Pt;150 Pt;40 Pt; 40 Pt;100 Pt;70 Pt"
For z = 3 To .Cells(65536, 1).End(xlUp).Row
ComboBox1.AddItem .Cells(z, 1).Value
Next z
For z = 3 To .Cells(65536, 2).End(xlUp).Row
ComboBox2.AddItem .Cells(z, 2).Value
Next z
For z = 3 To .Cells(65536, 3).End(xlUp).Row
ComboBox3.AddItem .Cells(z, 3).Value
Next z
For z = 3 To .Cells(65536, 4).End(xlUp).Row
ComboBox4.AddItem .Cells(z, 4).Value
Next z
For z = 3 To .Cells(65536, 5).End(xlUp).Row
ComboBox5.AddItem .Cells(z, 5).Value
Next z
For z = 3 To .Cells(65536, 6).End(xlUp).Row
ComboBox6.AddItem .Cells(z, 6).Value
Next z
For z = 3 To .Cells(65536, 7).End(xlUp).Row
ComboBox7.AddItem .Cells(z, 7).Value
Next z
End With
With Sheets("Verbrauchsliste")
lz = .Cells(65536, 1).End(xlUp).Row
ListBox1.RowSource = .Range("A3:H" & lz).Address(External:=True)
ListBox1.ColumnHeads = True
End With
Me.Top = 0
Me.Left = 0
Me.Height = Application.Height
Me.Width = Application.Width
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If TextBox3.Text  "geheim" Then Cancel = True
End Sub

Anzeige
Beispieldatei?
16.02.2017 12:05:59
Michael
Hallo Leo,
kannst Du mal ne Beispieldatei mit ein paar (anonymen) Spieldaten hochladen?
Hilfsweise füge mal eine Zeile zwischen dem End If und dem With ein und schreibe
stop
rein, dann springt das Makro während der Ausführung an dieser Stelle in den VBA-Editor, wo Du den Code dann mit F8 zeilenweise (bzw. den Rest dann mit F5) ausführen lassen kannst.
Während der zeilenweisen Abarbeitung wird der Wert von Variablen in einem Tooltip-Fensterchen angezeigt, wenn Du mit dem Mauszeiger drüberfährst.
Ach so: "die erste Zelle"... Heißt das, daß Deine Tabelle noch leer ist, bis auf die Überschrift in Zeile 1? Naja, aber selbst dann ergibt
p = .Range("A" &.rows.count) + 1
für p den Wert 2: eben die erste, freie Zeile.
Kurzum: ich kann das Problem nicht recht nachvollziehen: mit Beispieldatei wird das besser.
Schöne Grüße,
Michael
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Automatisierungsfehler in Excel 2013 beheben


Schritt-für-Schritt-Anleitung

Um den Automatisierungsfehler „Die Methode Value für das Objekt Range ist fehlgeschlagen“ in Excel 2013 zu beheben, folge diesen Schritten:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Finde den entsprechenden Code:

    • Suche die UserForm, die den Fehler verursacht. Der Fehler tritt häufig auf, wenn du versuchst, einen Wert in eine Zelle zu schreiben, die nicht existiert oder nicht korrekt referenziert wird.
  3. Ändere die Zeilenreferenz:

    • Statt .Range("A65536") oder .Range("A" & p) zu verwenden, verwende .Range("A" & Rows.Count). Dies stellt sicher, dass du immer auf die letzte mögliche Zeile verweist. Beispiel:
      p = .Range("A" & Rows.Count).End(xlUp).Row + 1
  4. Überprüfe die Eingabefelder:

    • Stelle sicher, dass alle benötigten Eingabefelder (TextBoxen und ComboBoxen) ausgefüllt sind, bevor du versuchst, die Werte zu speichern. Die Überprüfung kann mit einem einfachen If-Statement erfolgen, wie im ursprünglichen Code.
  5. Fehlerbehandlung einfügen:

    • Füge eine einfache Fehlerbehandlung hinzu, um unerwartete Fehler abzufangen:
      On Error Resume Next
      ' Dein Code hier
      If Err.Number <> 0 Then
      MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
      End If

Häufige Fehler und Lösungen

  • Fehler: Automatisierungsfehler

    • Lösung: Überprüfe, ob die Referenz auf die Zelle korrekt ist. Stelle sicher, dass die Zelle nicht leer ist oder dass du nicht versuchst, in eine Zelle zu schreiben, die durch eine andere Formel oder einen Fehler blockiert ist.
  • Fehler: Kein Eintrag in der Liste

    • Lösung: Stelle sicher, dass du die richtige Zeile für p berechnest. Der Fehler kann auch auftreten, wenn du in eine bereits gefüllte Zelle schreibst. Lösche gegebenenfalls den Inhalt der Zelle, bevor du einen neuen Wert schreibst.

Alternative Methoden

Wenn die oben genannten Lösungen nicht funktionieren, kannst du auch folgende Methoden ausprobieren:

  • Verwendung von Application.ScreenUpdating = False vor dem Schreiben in die Zellen, um die Leistung zu verbessern und unerwartete Fehler zu vermeiden.
  • Verwende eine separate Subroutine für das Schreiben der Werte, um die Hauptlogik zu entlasten.

Praktische Beispiele

Hier ist ein Beispiel für den angepassten VBA-Code, der den Automatisierungsfehler vermeiden sollte:

Private Sub CommandButton1_Click()
    Dim p As Long
    If TextBox1.Text = "" Or _
       ComboBox1.Value = "" Or _
       ComboBox2.Value = "" Then
        MsgBox "Bitte alle Felder ausfüllen!", vbInformation, "Hinweis"
        Exit Sub
    End If

    With Sheets("Verbrauchsliste")
        p = .Range("A" & Rows.Count).End(xlUp).Row + 1
        .Range("A" & p).Value = ComboBox7.Text
        .Range("B" & p).Value = ComboBox1.Text
        ' Weitere Zuweisungen hier...
    End With
End Sub

Tipps für Profis

  • Nutze Option Explicit zu Beginn deiner Module. Dies zwingt dich, alle Variablen zu deklarieren, was hilft, Fehler zu vermeiden.
  • Verwende Debug.Print, um Variablenwerte während der Ausführung zu überwachen.
  • Teste den Code schrittweise im VBA-Editor mit F8, um den Ablauf zu verfolgen und Fehler einfacher zu identifizieren.

FAQ: Häufige Fragen

1. Warum tritt der Automatisierungsfehler auf?
Der Automatisierungsfehler kann auftreten, wenn du versuchst, auf eine nicht vorhandene Zelle zuzugreifen oder ein ungültiges Objekt zu referenzieren.

2. Was ist der Unterschied zwischen .Range("A65536") und .Range("A" & Rows.Count)?
.Range("A65536") ist spezifisch für Excel 2003 und früher, während .Range("A" & Rows.Count) die aktuell maximale Zeilenanzahl in der verwendeten Excel-Version berücksichtigt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige