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

Objektvariable oder With-Blockvariable nicht gefunden

Objektvariable oder With-Blockvariable nicht gefunden
29.10.2023 11:20:51
TanjaU
Hallo ins Forum,

ich versuche gerade, aus einem Formular heraus Daten in ein sogenanntes Archiv zu verschieben.

Die Originaldaten werden aus der Tabelle tb_Datenbank in das Formular tb_Eingabeformular eingegeben und sollen dann in das Archiv tb_Datenbank1 abgelegt werden.
Nun bekomme ich in einer Zeile (fett markiert) die Fehlermeldung "fehlende Objektvariable" angezeigt. Ich hoffe, ihr könnt mir hier weiterhelfen. Danke.

Option Explicit

Sub Schüler_Archivieren_EingabeDB()

'Tabelle einlesen
Dim tbl As ListObject
Set tbl = tb_datenbank.ListObjects(1)

Dim Zeile As Long

'Schüler anlegen, bearbeiten oder archivieren?
If tb_Eingabeformular.Shapes.Range(Array("txt_Anlegen", "img_Anlegen")).Visible = True Then
'Schüler anlegen

'Zeile hinzufügen
tbl.ListRows.Add

'Zeile in Variable speichern
Zeile = tbl.DataBodyRange.Rows.Count


'Schüler archivieren
Else

Zeile = Range("Tabelle42[ID]").Find(What:=tb_Eingabeformular.Range("F12").Value _
, LookIn:=xlValues, LookAt:=xlWhole).Row - tbl.HeaderRowRange.Row



End If

'Datenbank befüllen
With tb_Eingabeformular
tbl.DataBodyRange(Zeile, 1).Value = .Range("F12").Value
tbl.DataBodyRange(Zeile, 2).Value = .Range("F17").Value
tbl.DataBodyRange(Zeile, 3).Value = .Range("F19").Value
tbl.DataBodyRange(Zeile, 4).Value = .Range("F21").Value
tbl.DataBodyRange(Zeile, 5).Value = .Range("F23").Value
tbl.DataBodyRange(Zeile, 6).Value = .Range("F25").Value
tbl.DataBodyRange(Zeile, 7).Value = .Range("F27").Value
tbl.DataBodyRange(Zeile, 13).Value = .Range("F33").Value
tbl.DataBodyRange(Zeile, 15).Value = .Range("F35").Value
tbl.DataBodyRange(Zeile, 17).Value = .Range("F37").Value
tbl.DataBodyRange(Zeile, 18).Value = .Range("F39").Value
tbl.DataBodyRange(Zeile, 20).Value = .Range("F50").Value
tbl.DataBodyRange(Zeile, 21).Value = .Range("F52").Value
tbl.DataBodyRange(Zeile, 22).Value = .Range("F54").Value
tbl.DataBodyRange(Zeile, 27).Value = .Range("F60").Value
tbl.DataBodyRange(Zeile, 28).Value = .Range("F62").Value
tbl.DataBodyRange(Zeile, 29).Value = .Range("F64").Value
tbl.DataBodyRange(Zeile, 30).Value = .Range("F66").Value
tbl.DataBodyRange(Zeile, 26).Value = .Range("F68").Value
tbl.DataBodyRange(Zeile, 8).Value = .Range("I17").Value
tbl.DataBodyRange(Zeile, 9).Value = .Range("I19").Value
tbl.DataBodyRange(Zeile, 10).Value = .Range("I21").Value
tbl.DataBodyRange(Zeile, 11).Value = .Range("I23").Value
tbl.DataBodyRange(Zeile, 12).Value = .Range("I25").Value
tbl.DataBodyRange(Zeile, 14).Value = .Range("I33").Value
tbl.DataBodyRange(Zeile, 16).Value = .Range("I35").Value
tbl.DataBodyRange(Zeile, 19).Value = .Range("I37").Value
tbl.DataBodyRange(Zeile, 23).Value = .Range("I50").Value
tbl.DataBodyRange(Zeile, 24).Value = .Range("I52").Value
tbl.DataBodyRange(Zeile, 25).Value = .Range("I54").Value
tbl.DataBodyRange(Zeile, 31).Value = .Range("I60").Value
tbl.DataBodyRange(Zeile, 32).Value = .Range("I62").Value
tbl.DataBodyRange(Zeile, 33).Value = .Range("I64").Value
tbl.DataBodyRange(Zeile, 34).Value = .Range("I66").Value
tbl.DataBodyRange(Zeile, 35).Value = .Range("I68").Value
tbl.DataBodyRange(Zeile, 36).Value = Date
End With


'Navigieren zu Tabellenblatt Datenbank
tb_Datenbank1.Select
ActiveWindow.ScrollRow = tbl.DataBodyRange(Zeile, 1).Row
tbl.DataBodyRange(Zeile, 1).Select

End Sub

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Objektvariable oder With-Blockvariable nicht gefunden
29.10.2023 11:50:55
daniel
Hi

Der Fehler kommt, wenn der gesuchte Schüler nicht vorhanden ist. Dann kann .Find keine Zelle ermitteln und von "keiner Zelle" kannst du keine Zeilennummer abfragen (.row).

Du musst hier also zuerst prüfen, ob dein Schüler überhaupt in der Liste vorhanden ist.

Bei .Find macht man das am elegantesten so, dass man das Ergebnis zunächt einer RangeVariablen zuweist ohne gleich weiter in die Tiefe zu gehen:

Dim rngZeile as Ranger

Set rngZeile = Range("Tabelle42[ID]").Find(...)

Dann bekommst du im Falle eines nicht-findens zunächst keinen Fehler, sondern rngZeile bleibt leer. Das kann man dann aber abfragen, um dann im Code differenziert zu handeln um den Fehler zu vermeiden:

If rngZeile is Nothing then 

MsgBox "Schüler nicht gefunden"
Else
Zeile = rngZeile.Row - tbl.HeaderRowRange.Row
End if


Was passieren soll, wenn der Schüler nicht gefunden wird, musst du natürlich noch genauer ausprogrammieren.

Gruß Daniel
Anzeige
AW: Objektvariable oder With-Blockvariable nicht gefunden
29.10.2023 13:24:11
TanjaU
Hallo Daniel,

vielen Dank, das war es - und es klappt.

Gruß
Tanja

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige