Anzeige
Archiv - Navigation
696to700
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
696to700
696to700
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Range object benutzen?

Range object benutzen?
17.11.2005 08:54:33
Maike
Hallo ihr alle,
Ich habe anscheinend so einige Probleme damit, zu verstehen, wie das mit den Range Objekten funkioniert. Ich habe r_myRange als Range definiert. Wenn ich dem aber einen Bereich, bzw. nur eine Adresse aus einem Bereich zuordnen will, weigert er sich vehement. Ich verstehe es einfach nicht.
Kann mich vielleicht mal jemand aufklären was ich daran falsch mache?
Sub Propellerkurve()
Dim i_P_max As Integer
Dim r_myRange As Range
Sheets("Höchstwerte").Activate
v_untergr_Auswahl = Sheets("Höchstwerte").Range("A65536").End(xlUp).Row
' in Spalte D werden die Werte für Leistung berechnet
' Formel hierfür: Drehzahl * Drehmoment incl. Einheitenumrechnung
ActiveSheet.Range("D2").FormulaR1C1 = "= RC[-3]/60 * RC[-2] * 6.28/1000"
ActiveSheet.Range("D2").AutoFill Destination:=Range("D2:D" & v_untergr_Auswahl), _
Type:=xlFillDefault
v_Maximum = WorksheetFunction.Max(Range("D2:D" & v_untergr_Auswahl))
Debug.Print v_Maximum
Set r_myRange = ActiveSheet.Range("D2:D" & v_untergr_Auswahl).Find _
(v_Maximum)
Debug.Print r_myRange.Address
i_P_max = r_myRange.Value
Ich versuche die Adresse für den maximalwert in Spalte D zu bekommen, weil ich über diese Adresse später auch noch auf benachbarte Spalten zugreifen möchte.
Dankbar für jede Hilfe
Gruß Maike

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range object benutzen?
17.11.2005 09:23:28
Erich
Hallo Maike,
vermutlich will Find bei dir gerade nicht in Werten, sondern in Formeln suchen, du brauchst aber die Suche in den Werten, also
Set r_myRange = ActiveSheet.Range("D2:D" & v_untergr_Auswahl).Find _
(v_Maximum, LookIn:=xlValues)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Range object benutzen?
17.11.2005 09:38:51
Maike
Hallo Erich
Leider klappt es so auch nicht.
laut fehlermeldung ist die Objektvariable oder with-Blockvariable nicht festgelegt.
in r_myRange sthet noch "Nothing".
Gruß Maike
AW: Range object benutzen?
17.11.2005 10:14:12
haw
Hallo Maike,
wenn die Objektvariable r_myRange nach der Find-Anweisung noch immer den Wert Nothing hat, dann wurde der Suchbegriff nicht gefunden. Das kann natürlich verschiedene Ursachen haben. Einmal, wie Erich schon schrieb, dass in Formeln statt Werten gesucht wird, dann dass der Suchwert, in der Zelle, aus der er ausgelesen wird ein Text ist und in der Suchmatrix eine Zahl oder umgekehrt usw.
In dem Beispiel aus der Hilfe wird auch demonstriert, dass man das Ergebnis abfragen sollte (If Not c Is Nothing ...):
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Interior.Pattern = xlPatternGray50
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address firstAddress
End If
End With
Gruß
Heinz
Anzeige
AW: Range object benutzen?
17.11.2005 11:01:11
Maike
Hallo ihr zwei.
Ja, ich denke inzwischen auch, dass es am nicht_finden liegt.
Ist vermutlich der fall, weil der wert in v_Maximum ein Wert mit vielen Kommastellen ist die ich gar nicht brauche. Ich werde jetzt versuchen durch runden der Werte dahinzukommen, dass mein Porgrämmchen wieder alles findet :-).
Danke für die Hilfe.
Ich melde mich dann nochmal ob es geklappt hat.
Gruß Maike
AW: Range object benutzen?
17.11.2005 10:29:21
Erich
Hallo Maike,
ergänzend zu Heinz' Beitrag:
Wie ist v_Maximum deklariert? (sollte Double sein, Variant ist zwar unschön, müsste aber auch funzen)
Ist vielleicht auf dem Blatt ein Bereich markiert, so dass Excel versuchen könnte, innerhalb der Markierung zu suchen?
Vorschlag:
Schreib mal in eine leere Zelle die Formel
=MAX(D2:D65536)
Dann kannst du per Kopieren das Formelergebnis in die Zwischenablage bringen und dann Excel in Spalte D danach suchen lassen. Im Suchdialog kannst du sehen, wie die Optionen eingestellt sein müssen, damit der Wert gefunden wird.
Wenn du das erfolgreiche Suchen per Makroaufzeichnung in ein Makro schreiben lässt, kannst du von dort die Optionen in dein Makro übernehmen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Range object benutzen?
17.11.2005 10:46:00
Luschi
Hallo Maike,
der Fehler ist eigentlich hundsgemein. Deine Formeln in der Soalte D liefern Werte vom Typ Double. Deshalb muß im Findbefehl der 2. und 3. Parameter weggelassen werden und der 4. Parameter muß "xlPart" lauten. Zudem habe ich von der Tabelle, in der gesucht wird, ein Objekt gebildet und beziehe mich im Vba-Code dann auf dieses Objekt. Das schützt vor Schreibfehlern und Mißverständnissen bei den Range/Find/Activate usw-Befehlen.
Sub Propellerkurve()
Dim i_P_max As Double, v_untergr_Auswahl As Long, _
r_myWS As Worksheet, r_myRange As Range
Set r_myWS = ThisWorkbook.Worksheets("Tabelle1")
v_untergr_Auswahl = r_myWS.Range("A65536").End(xlUp).Row
' in Spalte D werden die Werte für Leistung berechnet
' Formel hierfür: Drehzahl * Drehmoment incl. Einheitenumrechnung
r_myWS.Range("D2").FormulaR1C1 = "= RC[-3]/60 * RC[-2] * 6.28/1000"
r_myWS.Range("D2").AutoFill Destination:=r_myWS.Range("D2:D" & v_untergr_Auswahl), _
Type:=xlFillDefault
v_Maximum = WorksheetFunction.Max(r_myWS.Range("D2:D" & v_untergr_Auswahl))
Debug.Print v_Maximum
'Achtung --> der Suchwert ist vom Typ Double - deshalb "xlPart" erforderlich
Set r_myRange = r_myWS.Range("D2:D" & v_untergr_Auswahl).Find(v_Maximum, , , xlPart)
Debug.Print r_myRange
If Not r_myRange Is Nothing Then
i_P_max = r_myRange.Value
Else
i_P_max = -1000
End If
Debug.Print i_P_max
Set r_myRange = Nothing
Set r_myWS = Nothing
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
Probier ich aus
17.11.2005 11:14:27
Maike
Werde es mal mit double probieren :-)
das mit dem bilden von Objekten für die Tabellenblätter werde ich später noch machen.
Dann ziehe ich das einmal für das ganze Projekt durch.
Danke
Gruß Maike
AW: Find-Parameter weglassen?
17.11.2005 12:57:04
Erich
Hallo Luschi,
deiner Bemerkung "muß im Findbefehl der 2. und 3. Parameter weggelassen werden" möchte ich doch widersprechen. Zitat aus der VBA-Hilfe zur "Find-Methode":
Hinweise
Die Angaben für LookIn, LookAt, SearchOrder und MatchByte werden jedesmal gespeichert, wenn Sie diese Methode verwenden. Falls Sie beim nächsten Aufruf dieser Methode keine Werte für die Argumente angeben, werden die gespeicherten Werte verwendet. Die Angabe dieser Argumente ändert die Einstellungen im Dialogfeld Suchen, und eine Änderung der Einstellungen im Dialogfeld Suchen ändert die gespeicherten Werte, die verwendet werden, wenn Sie die Argumente nicht angeben. Um Probleme zu vermeiden, sollten Sie bei jeder Verwendung dieser Methode diese Argumente ausdrücklich angeben.
Hier - finde ich - hat die Hilfe so richtig Recht. Diese Parameter wegzulassen hieße, sich dem Zufall auszuliefern.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Find-Parameter weglassen?
17.11.2005 14:05:26
Maike
Hallo ihr lieben Helfer!
Ich habe mich jetzt die Lösung gefunden:
ActiveSheet.Range("D2").FormulaR1C1 = "=ROUND( RC[-3]/60 * RC[-2] * 6.28/1000,1)"
benutze ich um schon die Einträge in die Tabelle zu runden. Dann findet er auch ordentlich, weil ihn keine nachkommastellen verwirren.
Den Datentyp Double habe ich vorsichtshalber auch schon beherzigt, auch wenn er alleine keine Lösung lieferte.
bei der Find funktion alle Parameter anzugeben werde ich auch versuchen zu berücksichtigen.
Noch einmal vielen Dank für eure Hilfe.
dann mach ich mich mal an den nächsten Fehler *grins*
Gruß Maike
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige