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

suchfunktion mit vba

suchfunktion mit vba
11.05.2023 16:10:39
EasyD

Hallo liebes Forum,

ich kann gerade nicht erkennen, warum es mir meine - eigentlich funktionierende - Suchfunktion zerschossen hat.

In Zelle B5 gebe ich einen zu suchenden Wert ein.
Die Suchspalte ist C (Auftragsnummern)
Das Blatt ist zu größten Teilen mit Zellschutz versehen, die Spalte C aber nicht.
Die Suchspalte ist teil einer intelligenten Tabelle - dürfte aber m.E. keine Rolle spielen, hat ja auch schon funktioniert.

Kann Jemand ohne die Datei erkennen, warum "Objektvariable oder With-Blockvariable nicht festgelegt" ist?
Ich hab ein Brett vorm Kopf...

Mein Code:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Suchfunktion für Auftragsnummern

Dim Drop As Object
Dim S As Range

If Target = Cells(5, 2) Then

Columns("C:C").Select

Set S = Selection.Find(What:=Cells(5, 2).Value, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate

If Not S Is Nothing Then
Cells(ActiveCell.Row, ActiveCell.Column - 1).Activate
Else
MsgBox "Auftrag wurde nicht gefunden!"
End If
Else

'mach noch was anderes....

Application.ScreenUpdating = True
End If

End If

End Sub

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: suchfunktion mit vba
11.05.2023 16:16:53
onur
Du postest werder eine Datei noch verrätst du, WO genau der Fehler auftritt?


AW: suchfunktion mit vba
11.05.2023 16:28:08
peterk
Hallo

Set S ohne .Activate (S ist ein Range!)

Peter


AW: suchfunktion mit vba
12.05.2023 08:10:53
EasyD
Hi Peter

vielen Dank - das war's offensichtlich
jetzt hab ich nur noch keine Erklärung, warum der Code ursprünglich mal lief...
ich weiß aber auch nicht mehr, was ich an der Datei noch geändert hatte.

sei's drum - läuft!
Danke!


AW: suchfunktion mit vba
11.05.2023 16:32:03
ralf_b
ein end if zuviel

    
    Application.ScreenUpdating = True
End If

End If


Anzeige
AW: suchfunktion mit vba
12.05.2023 08:04:31
EasyD
Hallo,

keine Datei, da vertraulich, wie so oft...
der Fehler liegt in dem Codeschnipsel, den ich gepostet habe...

trotzdem danke


AW: suchfunktion mit vba
12.05.2023 08:13:36
EasyD
ach verflixt.... Antwort an der falschen Stelle ....

wegen des End Ifs - hab beim kopieren nicht aufgepasst.
das End If war Teil des ..."mach noch was anderes...."

aber Danke!


AW: suchfunktion mit vba
11.05.2023 16:30:39
GerdL
Moin
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Suchfunktion für Auftragsnummern


Dim S As Range

If Target = Cells(5, 2) Then
    
    Set S = Columns("C:C").Find(What:=Cells(5, 2).Value, After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)

    If Not S Is Nothing Then
        S.Offset(-1, 0).Activate
    Else
        MsgBox "Auftrag wurde nicht gefunden!"
    End If

End If



End Sub
Gruß Gerd


Anzeige
AW: suchfunktion mit vba
12.05.2023 08:09:48
EasyD
Perfekt wie immer Gerd,

herzlichen Dank!

das Problem war offensichtlich das .Activate in Verbindung mit der Range S... s.a. Peters Anmerkungen


AW: suchfunktion mit vba
11.05.2023 19:39:45
Yal
Hallo Easy,

Ich würde nicht den "ScreenUpdating = True" innerhalb des Ifs reinbringen.
Falls in einem "Worksheet_Change" eine Zelle geschrieben wird, ist ratsam einen "Application.EnableEvents = False" zu verwenden (am Ende auch zurücksetzen).
Ein Großenteil der Find-Parameter sind Default-Value, die man einfach weglassen darf.
Wenn verschiedene Adressen verschiedene Aktionen auslösen sollen, hilft vielleicht ein Select Case.

Aber die Lösung hat Peterk: Set und Activate gehören nicht zusammen. Set: Zuweisung eines Objekt zu einer Variable, Activate: zu durchführende Aktion ohne Rückgabewert.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Suchfunktion für Auftragsnummern
Dim S As Range

    Application.ScreenUpdating = False
    Select Case Target.Address
    Case "$B$5"
        Set S = Columns("C:C").Find(What:=Target.Value)
        If Not S Is Nothing Then
            S.Offset(0, -1).Select
        Else
            MsgBox "Auftrag wurde nicht gefunden!"
        End If
    Case "$C$2", "$D$5" 'nur ein Bespiel
        '...
    Case Else
        '...
    End If
    Application.ScreenUpdating = True
End Sub
(ok: eigentlich nicht anderes als was GerdL schon vorgeschlagen hatte. Mir ist wohl langweilig ;-)

VG
Yal


Anzeige
AW: suchfunktion mit vba
12.05.2023 08:19:54
EasyD
Hallo Yal

ist natürlich prima, wenn ich deine Langeweile für meinen Erkenntnisgewinn ausnutzen kann ;)

Vielen Dank
Ja, Gerd hat's gehabt, bzw Peter
die Variable in Kombi mit dem .Activate...

Und ich find's Klasse, wenn man neben der Lösung für's Problem auch noch zusätzliche Anregungen bekommt! Dafür liebe ich dieses Forum!

Ich habe allerdings nicht vor, nach dem Fund des Paramters irgendwas zu machen (außer .activate)

wegen des EnableEvents muss ich nochmal nachdenken - ich verstehe was du meinst, bin mir aber noch nicht sicher, ob es wirklich notwendig ist für meine Suchfunktion.... aber ich glaube auch es schadet nicht und dein Rat erscheint logisch.

wen du noch einnen Tipp hast, welchen der Suchparameter du weglassen würdest? Ich bin der Meinung, die parameter die noch drin sind, werden gebraucht. ich verstehe allerdings auch nicht wirklich, wie die Parameter funktionieren:
a) ich will in Formeln suchen (die Auftragsnummern sind teilweise rechnerisch ermittelt, teilweise sind es Werte)
b) ich will in Werten und in Teilwerten suchen

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige