Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1944to1948
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
Excel VBA - Fehlermeldung - Spalte finden
15.09.2023 12:26:44
MaRi86
Guten Tag Zusammen,

ich habe in diesem Forum schon viel Hilfe und Lösungen gefunden. Allerdings komme ich nun nicht weiter und finde auch keine Lösung für mein Problem.
Vielleicht könnt ihr mir helfen?
Ich bekomme bei nachfolgendem Skript immer folgende Fehlermeldung
"Laufzeitfehler '91: Objektvariable oder With-Blockvariable nicht festgelegt"

Ich habe auch schon verschiedene Websiten konsultiert und verschiedene Skriptanpassungen vorgenommen (ein paar seht ihr noch im Skript). Leider bekomme ich diesen Fehler bisher nicht behoben und mir gehen die Ideen aus ... seht ihr noch etwas? vielleicht offensichtliches, was ich aus betriebsbildheit bisher übersehen habe?

Das Script soll bei Änderung einer ComboBox (cbVorlage) in einer UserForm den Wert der ComboBox(strVorlage = cbVorlage.Value) nehmen, in der Zeile 1 der Mappe wsHS finden (Ergebnis = ....) und die Nummer der Spalte in der Variablen z ablegen. Der Debugger markiert die Zeile ....
Ergebnis = wsHS.Rows(1).Find(what:=strVorlage, LookIn:=xlValues, lookat:=xlWhole)

Vielen Dank im Voraus für eure Unterstützung.
Grüße
Richard



Option Explicit

Dim wb As Workbook
Dim wsHS As Worksheet, wsHT As Worksheet

Dim i As Long, z As Long
Dim Ergebnis As Range
Dim strVorlage As String




Private Sub Definition()

Set wb = ThisWorkbook
Set wsHT = wb.Worksheets("Hilfstabelle")
Set wsHS = wb.Worksheets("Hochschulen")

End Sub




Private Sub cbVorlage_Change()

Call Definition
strVorlage = cbVorlage.Value

'Ergebnis = Application.Match(strVorlage, Range("1:1"), 0)
'Ergebnis = wsHS.Rows(1).Find(strVorlage)
'Ergebnis = wsHS.Rows(1).Find(what:=strVorlage, LookIn:=xlValues)
Ergebnis = wsHS.Rows(1).Find(what:=strVorlage, LookIn:=xlValues, lookat:=xlWhole)
z = Ergebnis.Column

End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA - Fehlermeldung - Spalte finden
15.09.2023 12:31:42
onur
Du hättest nach "VBA Gültigkeit von Variablen" googlen sollen, dann hättest du z.B. bei Wikipedia das hier gefunden:
Die Gültigkeit und die Lebensdauer der Werte der Variablen werden durch den Ort und die Art ihrer Deklaration festgelegt.

Deklaration innerhalb einer Prozedur
Die Variable hat ihre Gültigkeit ausschließlich für diese Prozedur und kann aus anderen Prozeduren nicht angesprochen werden.
Deklaration im Modulkopf
Die Variable gilt für alle Prozeduren dieses Moduls, eine Weitergabe als Parameter ist nicht notwendig.
Deklaration im Modulkopf eines Standardmoduls als Public
Die Variable gilt für alle Prozeduren der Arbeitsmappe, soweit das die Prozedur enthaltende Modul nicht als Private deklariert ist.
Anzeige
Excel VBA - Fehlermeldung - Spalte finden
15.09.2023 13:22:22
daniel
Hi
du hast Ergebnis als Range und somit als Objektvariable deklariert.
Objektvariablen müssen immer mit SET zugewiesen werden.
Nur bei einfachen Wertvariablen erfolgt die Zuweisung ohne eigenständigen Befehl:

set Ergebnis = wsHS.Rows(1).Find(...)


nach .Find solltest du aber überprüfen, ob der gesuchte Wert auch gefunden wurde, wenn nicht durch andere Maßnahmen sichergestellt ist, dass des einen Treffer geben muss (bspw die Combobox ist nur mit Werten befüllt worden, die auch in der durchsuchten Zeile vorkommen)

if Not Ergebnis is nothing then

z = Ergebnis.Column
end if


wenn du sicher bist, dass der gesuchte Wert auch vorkommt, kannst du z aber auch direkt ermitteln, und da z eine einfache Zahlvariable ist, dann ohne Set:

z = wsHS.Rows(1).Find(...).Column


Gruß Daniel
Anzeige
Excel VBA - Fehlermeldung - Spalte finden
15.09.2023 13:28:39
MaRi86
Hallo Daniel,

vielen Dank. Das hat mir sehr geholfen!
Excel VBA - Fehlermeldung - Spalte finden
15.09.2023 15:05:29
GerdL
Hallo MaRi!
Dim bolNoChange As Boolean

Dim wsHS As Worksheet


Private Sub UserForm_Initialize()

Set wsHS = ThisWorkbook.Worksheets("Hochschulen")
wsHS.Cells(1, 3) = 1 'Test
wsHS.Cells(1, 4) = 2 'Test

cbVorlage.Clear
cbVorlage.AddItem 1 'Test
cbVorlage.AddItem 2 'Test
bolNoChange = True
cbVorlage.ListIndex = -1

End Sub

Private Sub cbVorlage_Change()

Dim Ergebnis As Range, Z As Long


If cbVorlage.ListIndex > -1 Then bolNoChange = False

Set Ergebnis = wsHS.Rows(1).Find(what:=CVar(cbVorlage), LookIn:=xlValues, lookat:=xlWhole)

If Not Ergebnis Is Nothing Then Z = Ergebnis.Column

MsgBox Z


End Sub


Du kannst bei Bedarf Variablen auch in einem allgemeinen Modul mit "Public As .." deklarieren.
Dann sind sie langlebiger.

Gruß Gerd
Anzeige
Excel VBA - Fehlermeldung - Spalte finden
15.09.2023 12:51:05
MaRi86
Hallo onur,

vielen Dank für deinen Tipp. Leider erhalte ich die exakt gleiche Fehlermeldung.
Die Variablen sind im Modulkopf deklariert.
Die Prozedur ist Public und ruft nun keine anderen Prozeduren mehr auf. Die Arbeitsmappen werden jetzt innerhalb der Prozedur festgelegt.

Option Explicit


Dim wb As Workbook
Dim wsHS As Worksheet

Dim z As Long
Dim Ergebnis As Range
Dim strVorlage As String


Public Sub cbVorlage_Change()


Set wb = ThisWorkbook
Set wsHS = wb.Worksheets("Hochschulen")

strVorlage = cbVorlage.Value

Ergebnis = wsHS.Rows(1).Find(what:=strVorlage, LookIn:=xlValues, lookat:=xlWhole)
z = Ergebnis.Column

End Sub

Anzeige
AW: Excel VBA - Fehlermeldung - Spalte finden
15.09.2023 13:19:56
onur
Und was soll DAS hier sein?
Public Sub cbVorlage_Change()

95 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige