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

Laufzeitfehler 91

Laufzeitfehler 91
26.09.2015 10:14:07
Andreas
Hallo,
ich hoffe ihr könnt mir helfen. Ich erstelle zur Zeit eine Qualifikationsmatrix mit VBA wo Führungskräfte Kompetenzen auswählen können die für ihr Team wichtig sind. Dazu habe ich die Sammlung in einem Userform erstellt, welches ganz normal über einen Button im Excel-Sheet aktiviert werden kann. Allerdings haut es mir jetzt jedes mal bei Aktivierung dieses Buttons den Laufzeitfehler 91 rein. Ich versuche schon lange, dass wieder hinzubekommen, allerdings hab ich gar keine Erklärung woran es liegt. Könnt ihr mir helfen?
Ich habe bereits alle Rahmen umbenannt u.s.w ...

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 91
26.09.2015 10:54:28
Nepumuk
Hallo,
geh mal im VAB-Editor auf Extras - Optionen - Reiter Allgemein und aktiviere unter "Unterbrechen bei Fehlern" die Option "In Klassenmodul". Dann starte dein UserForm, zeig uns die Prozedur welche den Fehler auslöst und kennzeichne die gelb unterlegte Zeile.
Gruß
Nepumuk

AW: Laufzeitfehler 91
26.09.2015 13:26:19
Andreas
Hi Nepumuk,
danke schon mal für die schnelle Rückmeldung. Diese Zeile ist dann gelb makiert:
ctrl.Value = Tabelle7.Cells(CompetencyColumn.Row, 2) 'Change the value in the next cell accordingly

AW: Laufzeitfehler 91
26.09.2015 13:36:27
Andreas
So ist es vllt verständlicher:
For Each ctrl In UserForm1.Controls
If TypeOf ctrl Is MSForms.CheckBox Then 'If control is a checkbox
Set CompetencyColumn = Tabelle7.Range("A:A").Find(ctrl.Caption) 'Find the competency in the source list
ctrl.Value = Tabelle7.Cells(CompetencyColumn.Row, 2) 'Change the value in the next cell accordingly
End If
Next

Anzeige
AW: Laufzeitfehler 91
26.09.2015 16:03:59
Nepumuk
Hallo,
es liegt ganz sicher an CompetencyColumn, wo wird diese Objektvariable gesetzt?
Übrigens solltest du Checkboxen nicht mit TypeOf abfragen sondern mit TypeName.
Grund: Checkboxen, OptionButtons und ToggleButtons liefern beim Vergleich TypeOf MSForms.CheckBox alle Wahr zurück das sie aus dieser Checkbox-Klasse entstammen.
Der Vergleich mit TypeOf MSForms.OptionButton und TypeOf MSForms.ToggleButton liefert hingegen die richtigen Ergebnisse.
Gruß
Nepumuk

AW: Laufzeitfehler 91
26.09.2015 17:22:46
Andreas
Hi Nepumuk,
ja es liegt aufjedenfall an diesem Abschnitt, denn wenn ich diesen rausnehme, lässt sich das Userform problemlos öffnen. Die ComepetencyColumn wird direkt in diesem Makro abgefragt. Siehst du unten wo ich das Makro angegeben habe.
Danke für den Tip mit den Checkboxen!
Grüße,
Andreas

Anzeige
AW: Laufzeitfehler 91
26.09.2015 17:45:59
Nepumuk
Hallo,
ja abgefragt, aber wo wird ihr das Objekt zugewiesen?
Gruß
Nepumuk

AW: Laufzeitfehler 91
26.09.2015 19:00:27
Andreas
Hallo,
zugewiesen wird sie hier:
Private Sub UserForm_Initialize()
Dim ctrl As MSForms.Control
Dim CompetencyColumn As Range
Dim intRow As Integer
intRow = 1

AW: Laufzeitfehler 91
26.09.2015 19:04:12
Nepumuk
Hallo,
da deklarierst du eine leere Objektvariable, aber wo ist die Set-Anweisung damit die Variable auch ein Objekt enthält?
Gruß
Nepumuk

AW: Laufzeitfehler 91
26.09.2015 19:37:59
Nepumuk
Hallo,
die Zeile:
Set CompetencyColumn = Tabelle7.Range("A:A").Find(ctrl.Caption) 'Find the competency in the source list
hab ich glatt übersehen. Wenn der Fehler auftritt, dann wird der Suchbegriff nicht gefunden.
Gruß
Nepumuk

Anzeige
AW: Laufzeitfehler 91
26.09.2015 19:50:20
Andreas
Hab mich schon gefragt was du meintest.
Hm ja... es scheint an den select all-Feldern zu liegen die er nicht findet, was mir dennnoch komisch vorkommt, denn sie soll er eigentlich auch nicht betrachten. Dazu hab ich nämlich folgendes eingebaut:
If TypeOf ctrl Is MSForms.CheckBox Then 'Check if control is a checkbox and not a "select all" checkbox
If Not ctrl.Caption = "Select All" Then
Set CompetencyColumn = Tabelle7.Range("A:A").Find(ctrl.Caption)
Funktioniert das so nicht?
Gruß

AW: Laufzeitfehler 91
26.09.2015 19:56:22
Nepumuk
Hallo,
doch das würde ich auch so machen. Sicher dass sich kein Leerzeichen am Ende der Caption eingeschmuggelt hat?
Gruß
Nepumuk

Anzeige
AW: Laufzeitfehler 91
27.09.2015 11:00:58
Andreas
Guten Morgen,
leider ja, bin gestern Abend und heute Morgen nochmal restlos alle Captions durchgegangen... Daran liegt es leider nicht.
Gruß,
Andreas

AW: Laufzeitfehler 91
26.09.2015 19:57:07
Daniel
Hi
denk mal drüber nach, anstelle der Checkboxen eine Multi-Select-Listbox zu verwenden.
(die Select-All-Checkbox natürlich nicht).
in einer Listbox lassen sich solche Funktionen wesenltlich einfacher programmieren, weil du einfach mit einer Schleife über die Listboxeinträge laufen kannst, und somit automatisch nur die Häkchen in der Schleife hast, die du brauchst.
Gruss Daniel

AW: Laufzeitfehler 91
26.09.2015 19:19:17
Daniel
Hi
schon mal geprüft, ob die Überschrift der Checkbox (ctrl.Caption) überhaupt in der Tabelle7.Spalte A vorhanden ist
in der .Find-Funktion erzeugt das noch keinen Fehler, aber die Range-Variable, der du die gefundene Zelle zuweisen willst, wird auf "Nothing" gesetzt und der Fehler kommt, sobald du die Range-Variable dann verwenden willst.
ergänze mal folgende codezeilen um das zu prüfen:
Set CompetencyColumn = Tabelle7.Range("A:A").Find(ctrl.Caption) 'Find the competency in the source list
If CompetencyColumn is Nothing then
Msgbox ctrl.Caption & " ist nicht in Tabelle7 Spalte A vorhanden."
Stop
end if

ctrl.Value = Tabelle7.Cells(CompetencyColumn.Row, 2) 'Change the value in the next cell accordingly

Gruss Daniel

Anzeige
AW: Laufzeitfehler 91
26.09.2015 19:42:00
Andreas
Hallo Daniel,
du hast Recht. Die Caption ist nicht vorhanden, der Grund ist auch recht einfach. Ich habe Select-All-Checkboxen eingebaut, welche er dann dort nicht findet...
Gruß,
Andreas

AW: Laufzeitfehler 91
26.09.2015 19:46:48
Daniel
wenn du die Checkboxen mit einer Ausgabezelle verknüpfst, kannt du dir diese Art von Code sparen.
in der Ausgabezelle steht der Checkboxzustand mit WAHR/FALSCH und die Zelle wird beim Klick auf die Checkbox automatisch mit geändert (ebenso ändert sich der Checkboxzustand, wenn du den Zellwert änderst)
das zuweisen passiert, indem du die Zelladresse der Ausgabezelle in die Eigenschaft "ControlSource" schreibst. (hier mit Blattnamen: Tabelle1!A1)
Gruss Daniel

Anzeige
AW: Laufzeitfehler 91
27.09.2015 11:04:42
Andreas
Hallo Daniel,
der Punkt ist ja, dass die Select All Felder eigentlich gar keine Rolle spielen sollten. Das sollte wie folgt umgangen werden:
If Not ctrl.Caption = "Select All" Then
Set CompetencyColumn = Tabelle7.Range("A:A").Find(ctrl.Caption) 'Search if competency is already in source list.
Wenn ich mir es jetzt aber als MSGBOX ausgeben lasse, gibt er mir an, dass er die Select-All nicht findet...

AW: Laufzeitfehler 91
27.09.2015 12:14:59
Nepumuk
Hallo,
lad mal eine Kopie des Userforms (einfach per Drag&Drop im Projektexplorer in eine neue Mappe ziehen) hoch.
Gruß
Nepumuk

AW: Laufzeitfehler 91
27.09.2015 12:28:14
Andreas
Hi,
das ist leider schwierig, da die Kompetenzen und Qualifikationen firmenintern sind. Hast du sonst keine Idee woran es liegen kann?
Gruß,
Andreas

Anzeige
AW: Laufzeitfehler 91
27.09.2015 12:34:26
Nepumuk
Hallo,
Hast du sonst keine Idee woran es liegen kann?
Ja.
Gruß
Nepumuk

AW: Laufzeitfehler 91
28.09.2015 14:41:58
Daniel
Hi
ohne deine Datei zu kennen, ist es schwierig die Fehlerursache zu finden.
Es macht auch keinen Sinn, dir einzelne Fehlermöglichkeiten zuzurufen, da trotzdem ja nicht sicher ist, dass du die auch so überprüfst hast, wie wir das gemeint haben.
Du kannst ja die Namen sonstige Personenbezogenen Daten durch "Max Mustermann" ersetzen oder löschen.
Gruß Daniel

AW: Laufzeitfehler 91
28.09.2015 14:41:58
Daniel
Hi
ohne deine Datei zu kennen, ist es schwierig die Fehlerursache zu finden.
Es macht auch keinen Sinn, dir einzelne Fehlermöglichkeiten zuzurufen, da trotzdem ja nicht sicher ist, dass du die auch so überprüfst hast, wie wir das gemeint haben.
Du kannst ja die Namen sonstige Personenbezogenen Daten durch "Max Mustermann" ersetzen oder löschen.
Gruß Daniel
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige