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

VBA: Gültigkeit der .Find-Methode

VBA: Gültigkeit der .Find-Methode
20.11.2015 15:01:44
Mumbaba
Hallo liebe Experten,
ich suche nun schon seit einigen Stunden nach der Ursache der Fehlermeldung im Code:
Sub Find_Peak()
Dim Peak As String
Dim MaxCell, SearchColumn As Range
Dim n, NumberOfColumns As Integer
Worksheets("Tabelle1").Activate
With Worksheets("Tabelle1")
NumberOfColumns = .Range(Cells(21, 23), Cells(21, 23).End(xlToRight)).Columns.Count
For n = 1 To NumberOfColumns
Set SearchColumn = Worksheets("Tabelle1").Range(Cells(22, 22 + n), Cells(22, 22 + n). _
End(xlDown))
Peak = WorksheetFunction.Max(SearchColumn)
MsgBox "Peak = " & Peak
Set MaxCell = SearchColumn.Find(Peak, LookIn:=xlValues, LookAt:=xlWhole)
MaxCell.Select
Next n
End With
End Sub
Der VBA-Code hängt in der Zeile fest, in der ich "MaxCell" selektieren will, weil angeblich diese Zelle nicht vorhanden wäre.
Die zugehörige Fehlermeldung lautet "Objekt- oder With-Blockvariable nicht festgelegt."
Ich habe natürlich auch schon probiert, den zu suchenden Wert (Peak)zu Beginn in verschiedenster Form zu deklarieren, was aber nicht zum gewünschten Ergebnis geführt hat.
In der MsgBox wird ja auch der richtige Wert angezeigt.
Das Problem hängt jedoch offensichtlich an den Werten, die in der entsprechenden Tabelle stehen. Wenn es sich nur um gerade Zahlen handelt, funktioniert der Code, nur bei Kommazahlen fängt er an zu streiken.
Ich freue mich über jeden Lösungsansatz!

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Gültigkeit der .Find-Methode
20.11.2015 16:19:16
Daniel
Hi
Dein Fehler ist:
Dim Peak As String
da du mit Zahlen arbeitest, ist besser
Dim Peak As Double
das Problem ist die Excelianische Sprachverwirrung.
wenn du eine Zahl in eine String-Variable schreibst, dann muss VBA die Zahl in einen Text (String) wandeln.
Hierbei wendest es das lokale und damit deutsche Schema mit dem Komma als Dezimalzeichen an, so dass aus der Kommazahl 1,2 der Text "1,2" wird.
die Suchfunktion vergleicht aber nun die internationalen Zellinhalte mit dem Suchbegriff und in der internationalen Schreibeise ist nun mal der Punkt das Dezimalzeichen und damit stimmt dann dein Suchbegriff "1,2" nicht mehr mit der Zahl "1.2" überein.
Die Lösung ist, wie schon gesagt die Variable Peak als Zahlenvariable zu deklarieren und nicht als Text, damit entfällt die Umwandlungsprobelmatik
Gruß Daniel

Anzeige
AW: VBA: Gültigkeit der .Find-Methode
23.11.2015 11:29:00
Mumbaba
Hallo Daniel,
vielen Dank für die schnelle Antwort.
Jedoch hatte ich schon auf diesen Fehler hin geprüft - Der Maximalwert (Peak) wird ja auch erkannt, egal, ob ich ihn als Double oder als String suche.
Der Wert wird auch in der richtigen Spalte gesucht, aber irgendwas ist immernoch faul...
LG, Mumbaba

AW: VBA: Gültigkeit der .Find-Methode
25.11.2015 18:04:11
Daniel
Hi
naja, wie Luc schon erkannt hat, hat dein Code noch ein paar mehr Macken, aber prinzipell funktioniert er auch mit Kommazahlen, wenn ich Peak als Double formatiere.
Gruß Daniel

Außerdem sind noch mehr Fehler gemacht ...
20.11.2015 18:24:03
Luc:-?
…worden, Mumbaba,
zB der gerade erst wieder mal anderswo aufgetretene triviale VBA-Anfänger-Fehler, bei vorangestelltem With Worksheets(…) zwar .Range, aber nicht auch .Cells zu schreiben, was hier allerdings irrelevant ist, weil das Blatt zuvor aktiviert wurde. Dann kann allerdings auch die With-Konstruktion und somit der Pkt vor Range entfallen.
Ein weiterer Fehler besteht in dem häufig zu beobachtenden VBA-Anfänger-Fehler, zu glauben, dass bspw As Range für alle Variablen nach dem führenden Dim der Zeile gilt. Dem ist mitnichten so! Komma-getrennt können grdsätzlich alle Variablen nach nur einem Dim aufgeführt wdn. D.h., dass jeder Variable ein As … zugeordnet wdn muss (dafür gibt's auch Kurzschreibungen und global Einstellbares zur Namensform). Alles ohne das ist grdsätzlich Variant!
Der 3. weitere Fehler besteht idR (hier nur nötig, falls die Peak-Zelle ausgeblendet ist) darin, die per .Find gesetzte Objekt-Variable nicht auf Nothing zu überprüfen, bevor ihr eine Objekt-Methode oder -Eigenschaft zugeordnet wird.
Gruß, Luc :-?
Besser informiert mit …
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige