Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1412to1416
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

Objektfehler bei Find-Methode

Objektfehler bei Find-Methode
04.03.2015 09:56:52
Eva
Hallo zusammen,
das Ziel meines Makros ist das bilden von Mittelwerten einer Hystereseschleife. Das Makro habe ich in einem Forum gefunden, was auch mit den dort angegebenen Werten einwandfrei funktioniert. Wenn ich das ganze mit meinen Daten durchlaufen lasse bekomme ich eine Fehlermeldung bei der Find-Methode: Objektvariable oder With-Blockvariable nicht festgelegt.
Anbei ein Ausschnitt aus dem veränderten Code, der in der fett markierten Zeile den Fehler auswirft.
Vielen Dank im Voraus für eure Hilfe!
Function Hysterese(RngWegKraft As Range)
'RngWegKraft ist ein Bereich mit zwei Spalten: Strom VMF
'mit aufsteigendem Index fällt der Strom zunächst von ca. 1,2 auf ca. -1,2 und steigt dann wieder bis ca. 1,2.
Dim MinA As Double 'Min Strom
Dim iMinA As Long 'Index Min Strom
Dim OKL As Variant 'Obere Kennlinie(A, Vs)
Dim UKL As Variant 'Untere Kennlinie(A, Vs)
Dim Hys As Variant 'Hysterese(A, Vs)
Dim i As Long, j As Long, n As Long, m As Long 'Indexe
'Minimum finden und die Daten in Obere Kennlinie und Untere Kennlinie aufteilen
MinA = Application.WorksheetFunction.Min(RngWegKraft.Columns(1))
iMinA = RngWegKraft.Columns(1).Find(MinA, , xlValues, xlWhole).Row - RngWegKraft.Row + 1
OKL = RngWegKraft.Resize(iMinA, 2).Value
UKL = RngWegKraft.Offset(iMinA - 1, 0).Resize(RngWegKraft.Rows.Count - iMinA + 1, 2).Value

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Objektfehler bei Find-Methode
04.03.2015 10:00:00
Eva
Edit:
Mir ist auch aufgefallen, dass die Application.WorksheetFunction.Min nicht den Minimalwert sonderen den Maximalwert zurückgibt. An was kann das liegen?
Vielen Dank nochmal!

AW: Objektfehler bei Find-Methode
04.03.2015 10:56:07
Rudi
Hallo,
An was kann das liegen?
evtl sind deine Zahlen keine Zahlen sondern Text.
Gruß
Rudi

AW: Objektfehler bei Find-Methode
04.03.2015 11:18:10
Eva
Hallo Rudi,
danke für den Hinweis.
Habe gerade die Originaldatei angesehen, die ist als Standard formatiert. Ich habe dann meine Datei auch als Standard formatiert, aber kam der gleiche Fehler und "Min" zeigt immer noch den Maxwert. Vielleicht erkennt er meine negativen Zahlen nicht?

Anzeige
AW: Objektfehler bei Find-Methode
04.03.2015 11:36:38
Rudi
Hallo,
der Hund ist hier begraben:
'Bereich mit Weg/Kraft - Daten
With WsHys
Set rngReihe = .Range(.Cells(Rows.Count, 1), .Cells(Rows.Count, 2).End(xlUp))
End With

richtig ist
'Bereich mit Weg/Kraft - Daten
With WsHys
Set rngReihe = .Range(2, 1), .Cells(Rows.Count, 2).End(xlUp))
End With
Gruß
Rudi

AW: Objektfehler bei Find-Methode
04.03.2015 11:51:47
Eva
Ahja, super jetzt erkennt er das Minimum.
Habe es folgendermaßen eingesetzt
'Bereich mit Weg/Kraft - Daten
With WsHys
Set rngReihe = .Range(.Cells(2, 1), .Cells(Rows.Count, 2).End(xlUp))
End With
Aber es gibt immer noch Probleme beim finden der Zeile (iMinA), in der das Minimum steckt.
Also hier:
'Minimum in VMF finden und die Daten in Obere Kennlinie und Untere Kennlinie aufteilen
MinA = Application.WorksheetFunction.Min(RngWegKraft.Columns(1))
iMinA = RngWegKraft.Columns(1).Find(MinA, , xlValues, xlWhole).Row - RngWegKraft.Row + 1

Anzeige
siehe Erichs AW. owT
04.03.2015 11:59:28
Rudi

AW: Objektfehler bei Find-Methode
04.03.2015 12:11:33
Eva
Tausend dank dir schon mal!!!

AW: Objektfehler bei Find-Methode
04.03.2015 10:10:43
Daniel
Hi
wenn das Makro mit den "Originaldaten" funktioniert und mit deinen nicht, dann ist das Problem nicht das Makro, sondern deine Daten.
Da du die Daten wahrscheinlich nicht ändern kannst, musst du das Makro an deine Daten anpassen.
Wenn du dazu unsrere Hilfe benötigst, solltest du uns aber auch deine Daten zeigen, weil wir hier immer noch nicht hellsehen können (auch wenn viele das vermuten).
Am besten ist, du lädst die Datei mit dem Makro und deinen Daten mal hoch.
Gruß Daniel

AW: Objektfehler bei Find-Methode
04.03.2015 11:06:14
Eva
Hallo Daniel,
ja, da hast du Recht.
Einmal die Dateien, die funktionieren:
Fs funktioniert.xlsm
https://www.herber.de/bbs/user/96145.xlsm
Fs Test.xls
https://www.herber.de/bbs/user/96144.xls
Hier steigen die Daten in Spalte 2 erst bis zum Maximum an und sollen erst ab diesem Maximum in "Hinweg und Rückweg" aufgeteilt werden.
Und die, die nicht funktionieren (angepasst):
VsA funktioniert nicht.xlsm
https://www.herber.de/bbs/user/96146.xlsm
VsA Test.xls
https://www.herber.de/bbs/user/96147.xls
Meine Daten sollen komplett berücksichtigt werden. Erst fallen die Daten in Spalte 2 bis zu einem Minimum, was die Obere Kennlinie darstellt, und steigen dann wieder bis zu einem Maximum (Untere Kennlinie)
Bei den später auszuwertenden Daten werden mehrere Messungen nebeneinander sein, aber ich hoffe, dass ich das dann selbst hinbekomme!
Vielen Dank für die Hilfe und falls mehr Erklärung benötigt wird, sagt Bescheid.

Anzeige
zwei Probleme
04.03.2015 11:40:23
Erich
Hi,
du bestimmst den auszuwertenden Bereich mit

'Bereich mit Weg/Kraft - Daten
With WsHys
Set rngReihe = .Range(.Cells(Rows.Count, 1), .Cells(Rows.Count, 2).End(xlUp))
End With
Damit erhaltze ich den Bereich $A$2243:$B$1048576
Das bedeutet, dass du nur den einen Wert in B2243 auswertest, MIN und MAX sind gleich B2243.
Du willst aber wohl eher den Bereich $A$2:$B$2243. Den bekommst du damit

'Bereich mit Weg/Kraft - Daten
With WsHys
Set rngReihe = .Range(.Cells(2, 1), .Cells(.Rows.Count, 2).End(xlUp))
End With
Das nächste Problem ist, dass Find() den Dezimalwert wohl nicht findet.
Ich schlage vor, hier stattdessen Application.Match (VERGLEICH) einzusetzen:

'Minimum in VMF finden und die Daten in Obere Kennlinie und Untere Kennlinie aufteilen
MinA = Application.WorksheetFunction.Min(RngWegKraft.Columns(2))
'   iMinA = RngWegKraft.Columns(2).Find(MinA, , xlValues, xlWhole).Row - RngWegKraft.Row + 1
iMinA = Application.Match(MinA, RngWegKraft.Columns(2), 0)
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: zwei Probleme
04.03.2015 12:09:02
Eva
Hallo Erich,
jetzt hatten sich Einträge überschnitten.
Den Bereich hatte ich schon angepasst, so wie du es auch geschrieben hattest.
Match habe ich folgendermaßen eingesetzt:
'Minimum in VMF finden und die Daten in Obere Kennlinie und Untere Kennlinie aufteilen
MinA = Application.WorksheetFunction.Min(RngWegKraft.Columns(1))
iMinA = Application.Match(MinA, RngWegKraft.Columns(1), 0)
Also nur die Columns(2) in (1) getauscht.
Super es läuft wieder ein Stück mehr :)
Jetzt hackt es beim interpolieren in der Fett markierten Zeile "Index außerhalb des gültigen Bereichs"
'Minimum in VMF finden und die Daten in Obere Kennlinie und Untere Kennlinie aufteilen
MinA = Application.WorksheetFunction.Min(RngWegKraft.Columns(1))
iMinA = Application.Match(MinA, RngWegKraft.Columns(1), 0)
'   iMinA = RngWegKraft.Columns(1).Find(MinA, , xlValues, xWhole).Row - RngWegKraft.Row + 1
OKL = RngWegKraft.Resize(iMinA, 2).Value
UKL = RngWegKraft.Offset(iMinA - 1, 0).Resize(RngWegKraft.Rows.Count - iMinA + 1, 2).Value
'Größen der Datenfelder
n = UBound(OKL, 1)
m = UBound(UKL, 1)
ReDim Hys(1 To n, 1 To 2)
'Datenpunkte der Hysterese berechnen
For i = 1 To n
Hys(i, 1) = OKL(i, 1)                           'Strom
j = 1                                           'Suche nach der richtigen Stelle im Feld  _
UKL
Do While UKL(j, 1) >= Hys(i, 1) And j  Hys(i, 2) = UKL(j, 2) + (UKL(j - 1, 2) - UKL(j, 2)) / (UKL(j - 1, 1) - UKL(j, 1)) *  _
(Hys(i, 1) - UKL(j, 1))
End If
'Mittelwert: (UKL + OKL) / 2
Hys(i, 2) = (Hys(i, 2) + OKL(i, 2)) / 2
Next
'Rückgabe des Ergebnisses
Hysterese = Hys
End Function

Anzeige
AW: zwei Probleme
04.03.2015 13:25:04
Rudi
Hallo,
stoppt bei j=1. UKL(0,2) gibt es nicht.
Gruß
Rudi
Es hakt! Gehackt werden Nüsse oder Unkraut oder...

AW: zwei Probleme
04.03.2015 14:15:52
Eva
Hallo Rudi,
danke nochmal für deine Hilfe. Das >= Zeichen musste noch umgedreht werden. Das Makro läuft jetzt durch!
(das Hacken hat sich schon in meinen Fingern beim Schreiben verhakt ;) )
Das Ergebnis ist noch nicht ganz richtig, aber das müsste ich jetzt hinbekommen.
Danke an alle Helfer.
'Datenpunkte der Hysterese berechnen
For i = 1 To n
Hys(i, 1) = OKL(i, 1)                           'Strom
j = 1                                           'Suche nach der richtigen Stelle im Feld  _
UKL
Do While UKL(j, 1) 
j = j + 1
Loop

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige