Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Laufzeitfehler ´-2147417848 (80010108)´

Forumthread: Laufzeitfehler ´-2147417848 (80010108)´

Laufzeitfehler ´-2147417848 (80010108)´
04.06.2023 00:57:14
Bernd

Hallo Zusammen,

ich hoffe das ihr mir bei meinem folgenden Problem helfen könnt, und mit vor allem erklären könnt, wie der Fehler entsteht was ich falsch gemacht habe und auf was ich achten sollte.
Ich bin VBA-Anfänger verstehe zwar den Code, wenn ich Ihn lese, oder ein Tutorial abarbeite, um weiter zu lernen, aber hier kann ich mir nicht erklären was passiert:

Fehlermeldung:
Laufzeitfehler ´-2147417848 (80010108)´:
Die Methode ´Value´für das Objekt ´Range´ ist fehlgeschlagen

Das Makro besteht aus einem Tabellenblatt das als Datenbank dient. Über einen Button in dem Tabellenblatt wird eine Userform mit Listbox aufgerufen.
Auf der Userform funktioniert bisher nur die ListBox. Nach Klick auf den Button „Neuer Eintrag“ öffnet sich eine andere Userform
in dieser können Daten eingetragen werden um sie dann mit einem Maus Klick auf Speichern in das Tabellenblatt eintragen zu lassen.
Und hier ist das Problem direkt nach Klick auf Speichern bricht das Makro mit obiger Fehlermeldung ab.
Excel bricht dann auch komplett ab schließt sich und startet sich neu.

Wenn ich die zweite Userform zum Daten Eintragen alleine über die VBA-Oberfläche starte, Daten eingebe und auf Speichern Klicke funktioniert die Datenübernahme in das Tabellenblatt. Über die erste UserForm eben leider nicht. Ich hoffe ihr könnt mir helfen und diesen Mysteriösen Fehler finden. Ich selbst bin am Verzweifeln.
Vielen Dank Schonmal im Voraus.

Excel Version aus Office 365


Grüße Bernd

Arbeitsmappe: https://www.herber.de/bbs/user/159454.xlsm

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler ´-2147417848 (80010108)´
04.06.2023 01:33:39
onur
Kann passieren, wenn man "intelligente" Tabellen benutzt.
Wandele die "intelligente" Tabelle einfach in Bereich um.


AW: Laufzeitfehler ´-2147417848 (80010108)´
04.06.2023 02:55:56
ralf_b
https://www.herber.de/bbs/user/159455.xlsm

wenn man intelligente Tabellen nutzt, dann aber auch deren Objekte.
Hinweis: Datensätze löscht man nicht. Sie werden als gelöscht markiert.
Was weg ist, ist weg. Für Auswertungen, die man meist bei Datenbanken machen will, ist löschen suboptimal.

Die Neuer Eintrag und Ändern-Userform ist überflüssig. Das kannst du auch in der Haupt-UF machen.


Anzeige
AW: Laufzeitfehler ´-2147417848 (80010108)´
04.06.2023 03:55:59
Bernd
Hallo onur
Hallo ralf_b

Vielen dank für eure Hilfen.

@onur
Ich habe deine Lösung getestet und die Intelligente Tabelle umgewandelt, funktioniert wie gewünscht. Danke dafür.

@ ralf_b
Danke für deine Anpassungen, auch wenn ich da noch nicht ganz dahintersteige aber ich werde mir das morgen mal intensiv angucken und versuchen nachzu vollziehen was du eingefügt hast. Falls du Zeit und Lust hast würde ich dich gerne bitten deine Anpassungen im Code zu kommentieren. Das würde mir weiterhelfen ihn zu verstehen.

Welche der Beiden Lösungen ich nutze entscheide ich morgen und ob ich die Anpassungen von ralf_b nachvollziehen kann, denn eigentlich ist es egal ob ich eine Intelligent oder "normale" Tabelle nutze.

Zur Erklärung was das Makro überhaupt für einen Zweck hat.
Diese Tabelle dient nur dazu Informationen zu Sammeln und nach eingabe eines suchbegriffs in der oberen Textbox, und anschließendem auswählen des Eintrages in der Listbox der Haupt UF soll mir das Makro alle hinterlegten Informationen in den Textfeldern rechts in der Haupt UF Anzeigen. Es soll dort nur Text ausgegeben werden mehr nicht. Eingabe eines Fehlercodes das eine defekte Maschine Produziert und in den Textfeldern dann die Klar Meldung was der Fehler zu bedeuten hat. Ich stelle mir vor das mir das Zeit spart statt in PDF oder Papier Ordnern nach den Infos zu wühlen.
Deshalb sollen die Feldern rechts in der Haupt UF nicht veränderbar sein, daher benötige ich die zweite UF um Daten Eintragen/Bearbeiten zu können. Ob ich die Löschen funktion nutze oder sie lösche weis ich im augenblick noch nicht da nur ich das Makro nutzen werde, ausserdem werden es höchstens knapp um die 150 Einträge.

Grüße Bernd


Anzeige
AW: Laufzeitfehler ´-2147417848 (80010108)´
04.06.2023 12:50:59
ralf_b
denn eigentlich ist es egal ob ich eine Intelligent oder "normale" Tabelle nutze.

Nein, ist es nicht. Wenn du das automatisierst spielt es schon eine gewisse Rolle. Wie alles im Leben hat auch bei Excel jedes Ding so seine Vor- und Nachteile.
Bei intelligenten Tabellen sehe ich es als Vorteil das man die Tabellengrenzen nicht immer neu ermitteln muß und die Referenzierung der Spalten und Zeilen im Listobject ortsunabhängig von der Lage der Tabelle im Blatt stattfindet.
Wenn man aber gewohnt ist mit rows.count... die Tabellengrenzen zu ermitteln und in for Schleifen immer die erste Datenzeile fest vorgegeben werden muß ...for i = 2 to....
dann ist schon ein Umdenkprozess nötig, um sich mit Listobjects, Listrows, Listcolumns und deren Untermenge Databodyrange oder Headerrowrange anzufreunden.

Die Schwierigkeit bei deinen zusätzlichen Userforms ist die Übergabe der aktiven Zeile. Ich habe hier die Tag Eigenschaft der Hauptuserform verwendet.
Das sie ein Textwert ist, muß der Tag erst noch auf Zahl umgesetzt werden bevor man ihn als Zeilennummer oder Indexnummer der Datenzeilen in der intelligentenTabelle benutzt.
Und für die Referenz der Zeile in der Listbox ist eine Reduzierung des Zahlenwertes notwendig. Listboxindex =0 ist die erste Zeile, Tabellenzeile 1 ist der Index = 1

Das Listboxfüllen habe ich aufgeteilt. Ich schätze daher stammte auch dein Fehler mit dem Absturz. Ich erhielt noch einen Stapel-Fehler. Das deutet auf eine sich selbst aufrufende Funktion hin, die dann den Speicher vollschreibt und Tschüß Excel.
Im Initialize wird nur die Größe und die erste Belegung festgelegt. Im weiteren Verlauf reicht nur eine Aktualisierung. Ich habe die Quelle der Listbox umgestellt von .Rowssource auf .List. Es reicht hier aus die Intelligente Tabelle nochmal der List zuzuordnen und die Listbox auf die aktive Zeile zu setzen. Vorteil der intelligenten Tabelle: Keine Bestimmung der Größe notwendig.

Die Textboxen in der Haupt-UF werden durch das Changeereignis der Listbox gefüllt. Die aktive Zeile kommt hier wieder zum tragen.

Was deine Unter-UF's angeht, halte ich sie immer noch für überflüssig. Du als Nutzer des Programmes wirst sicher nicht aus Versehen die Daten bearbeiten. Womit eine einfache Msgbox , mit einer Rückfrage bei Änderungen der Textboxen, ausreicht. Das verhindert auch Probleme bei der Informationsübertragung von UF zu UF und vereinfacht die Programmierung.

gruß

rb


Anzeige
AW: Laufzeitfehler ´-2147417848 (80010108)´
04.06.2023 23:01:29
Bernd
Hallo Ralf

Vielen Danke für deine Erklärung.
Listobjects, Listrows, Listcolumns, Databodyrange, Headerrowrange werde ich mir genauer angucken und mir lesestoff dazu ergoogeln.

Du als Nutzer des Programmes wirst sicher nicht aus Versehen die Daten bearbeiten

Da hast du vermutlich recht.

Das verhindert auch Probleme bei der Informationsübertragung von UF zu UF und vereinfacht die Programmierung.

Hier gibst du mir zu denken.
Jede gesparte UF mit deren Code macht das Programm nicht nur schlanker sondern natürlich auch übersichtlicher.
Die Textboxen auf der Haupt UF sind ja vorhanden. Über diese Textboxen müsste es ja möglich sein Daten anzeigen zu lassen Neue Daten hinzuzufügen und Daten zu Ändern.
Ich werde mir das Morgen Abend mal in ruhe angucken und versuchen das umzusetzen.

Vielen Dank für deine Mühe
Grüße Bernd


Anzeige
AW: Laufzeitfehler ´-2147417848 (80010108)´
05.06.2023 11:26:32
Alwin WeisAngler
Hallo Bernd,
du musst auch noch folgendes Bedenken:
Wenn du im Suchfenster die Auswahl in der Listboxausgabe eingrenzt und die markierte Zeile der Listbox dann egal ob in andere Userform oder nicht übergibst, musst du an Hand der ID oder was anderen eindeutig Indentifizierbaren vorgehen. So wie es jetzt ist, läuft das schief.
Auch das neu Eintragen macht man bei formatierten Tabellen mit .ListRows.Add.
Ansonsten gilt, was ralf_b bereits angemerkt hat.
Anbei mal ein Weg, wie ich es machen würde.
https://www.herber.de/bbs/user/159469.xlsm

Gruß Uwe

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Laufzeitfehler -2147417848 (80010108) in Excel VBA beheben


Schritt-für-Schritt-Anleitung

  1. Identifiziere den Fehler:

    • Der Laufzeitfehler -2147417848 (80010108) tritt häufig auf, wenn eine Methode oder Eigenschaft in VBA nicht korrekt aufgerufen wird. In deinem Fall geschieht das beim Zugriff auf das Range-Objekt.
  2. Überprüfe deine Tabellen:

    • Stelle sicher, dass du nicht auf eine "intelligente" Tabelle zugreifst, während du versuchst, Daten zu bearbeiten. Wenn du eine intelligente Tabelle verwendest, konvertiere sie in einen normalen Bereich, wie von Benutzern im Forum empfohlen.
  3. Code anpassen:

    • Überprüfe den Code der UserForms und achte darauf, dass die richtigen Daten übergeben werden. Stelle sicher, dass du die aktive Zeile und den richtigen Index verwendest.
  4. Testen:

    • Starte das Makro erneut und prüfe, ob der Fehler weiterhin auftritt. Falls ja, analysiere, an welcher Stelle der Fehler ausgelöst wird.

Häufige Fehler und Lösungen

  • Fehler bei der Datenübergabe:

    • Wenn die Daten zwischen UserForms nicht korrekt übergeben werden, kann das zu einem Absturz von Excel führen. Achte darauf, dass du die aktive Zeile korrekt referenzierst.
  • Intelligente Tabellen:

    • Achte darauf, dass du beim Arbeiten mit intelligenten Tabellen die richtigen Objekte verwendest. Ein häufiger Fehler ist das Löschen von Datensätzen, was in intelligenten Tabellen zu einem error 2147417848 führen kann.
  • Nicht korrekte Indizes:

    • Überprüfe, ob du die Indizes in der ListBox korrekt anpasst. Der Index in der ListBox beginnt bei 0, während Excel-Tabellen bei 1 starten.

Alternative Methoden

  • Verwendung von .ListRows.Add:

    • Anstatt eine neue UserForm zum Eintragen von Daten zu verwenden, kannst du die Methode .ListRows.Add verwenden, um neue Einträge direkt in der intelligenten Tabelle hinzuzufügen.
  • Vermeidung von mehreren UserForms:

    • Statt mehrere UserForms zu nutzen, kannst du eine einzige Haupt-UserForm verwenden, um alle Daten anzuzeigen und zu bearbeiten. Dies vereinfacht die Programmierung und verhindert Fehler bei der Datenübertragung.

Praktische Beispiele

  • Einfügen eines neuen Eintrags in eine intelligente Tabelle:
Sub NeuerEintrag()
    Dim tbl As ListObject
    Set tbl = ThisWorkbook.Sheets("DeinTabellenblatt").ListObjects("DeineTabelle")

    tbl.ListRows.Add
    tbl.ListRows(tbl.ListRows.Count).Range.Cells(1, 1).Value = "Neuer Wert"
End Sub
  • Daten aus einer ListBox auf eine TextBox übertragen:
Private Sub ListBox1_Click()
    TextBox1.Value = ListBox1.List(ListBox1.ListIndex, 0)
    TextBox2.Value = ListBox1.List(ListBox1.ListIndex, 1)
End Sub

Tipps für Profis

  • Verwende Debugging: Nutze die Debugging-Funktion in VBA, um den Code Schritt für Schritt durchzugehen. So kannst du genau sehen, wo der Fehler auftritt.

  • Kommentiere deinen Code: Füge Kommentare zu deinem Code hinzu, um die Funktionalitäten besser zu verstehen, besonders wenn du mit mehreren UserForms arbeitest.

  • Informiere dich über ListObjects: Lerne die verschiedenen Eigenschaften von ListObjects, ListRows und deren Untermenge wie Databodyrange und Headerrowrange kennen. Dies ist besonders wichtig, wenn du mit intelligenten Tabellen arbeitest.


FAQ: Häufige Fragen

1. Was ist der Laufzeitfehler -2147417848? Der Laufzeitfehler -2147417848 tritt häufig auf, wenn ein Objekt oder eine Methode in VBA nicht korrekt aufgerufen wird.

2. Wie kann ich intelligentes Tabellenformat in Excel umgehen? Du kannst eine intelligente Tabelle einfach in einen normalen Bereich umwandeln, um die Komplikationen bei der Anwendung von Methoden zu vermeiden.

3. Kann ich mehrere UserForms verwenden? Ja, jedoch wird empfohlen, die Anzahl der UserForms zu minimieren, um die Programmierung zu vereinfachen und Fehler zu vermeiden.

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