Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
612to616
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
612to616
612to616
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Bereich bestimmen

Bereich bestimmen
19.05.2005 14:58:15
axel
Hallo,
hoffentlich kann mir jemand weiterhelfen, habe ein Problem, auf dessen Lösung ich alleine nicht komme.
Wie kann man durch Festlegen einer Zelle mittels einer Msgbox nur die Position der zugehörigen Zeile bestimmen? Die Spalte ist dynamisch und ändert sich beim Durchlaufen einer For-to-Schleife. Anhand der so ermittelten Position soll ein Bereich definiert werden, der ermittelten Zelle beginnt und in der Zelle + n-Zeilen tiefer aufhört.
Hoffentlich versteht ihr was ich meine.
Vielen Dank für Lösungsvorschläge.

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

Betreff
Datum
Anwender
Anzeige
AW: Bereich bestimmen
19.05.2005 15:37:36
Martin
Hallo Axel,
schau Dir mal die Row-Eigenschaft an.
Gruß
Martin Beck
AW: Bereich bestimmen
19.05.2005 17:37:42
Lars
Hallo Axel,
probier das Mal, ich hoffe es reicht so?

Sub Makro1()
Suche = InputBox("Hier bitte Suchparameter eingeben")
If Suche = "" Then End
Cells.Find(What:=Suche, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False).Activate
TrefferZeile = ActiveCell.Row
TrefferSpalte = ActiveCell.Column
Range(Cells(TrefferZeile - 3, TrefferSpalte - 3), Cells(TrefferZeile + 3, TrefferSpalte + 3)).Activate
End Sub

Lars
Anzeige
AW: Bereich bestimmen
20.05.2005 00:16:46
axel
Hallo Martin und Lars,
danke für Eure Tipps. Habe versucht sie in mein Makro einzubauen. Allerdings bekomme ich jetzt immer eine Fehlermeldung "Die Methode 'Cells' für das Objekt '_Global' ist fehlgeschlagen." Habe schon alles mögliche rumprobiert. Der Fehler kommt immer wieder in der Zeile die ich aus Lars Makro sinngemäss übernommen habe. Bei mir lautet sie:
Reihe = Range(cells(StartBremssimulator.Row, n), cells(StartBremssimulator.Row + a, n)).Activate
Ich hoffe das mein Problem damit deutlich wird, auch wenn die Zeile aus dem Zusammenhang gerissen ist.
Ich habe das auch mit diesem cells.Find ausprobiert. Es kommt aber die gleiche Fehlermeldung. Woran kann das liegen? Könnt ihr mir bitte nochmal helfen?
Danke, Axel
Anzeige
AW: Bereich bestimmen
20.05.2005 12:08:55
Martin
Hallo Axel,
poste mal den kompletten Code.
Ein Activate mit gleichzeitiger Zuweisung an eine Variable ist schon seltsam.
Gruß
Martin Beck
AW: Bereich bestimmen
20.05.2005 16:27:55
Hajo_Zi
Hallo Martin,
Du hast doch ein Vorschlag zu weiteren Lösung gemacht. Lasse doch Axel entscheiden o die Frage noch offen. Das hätte den Vorteil, Du hättest schon mal eine Rückmeldung.
Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
Betriebssystem XP Home SP2 und Excel Version 2003 SP1.



"Wer Rechtschreibfehler findet, darf sie behalten!"
Dies gilt auch für Bert.
Anzeige
AW: @Hajo - offt opic
20.05.2005 17:04:44
Martin
Hallo Hajo,
eigentlich wollte ich mich in die Diskussionen im Off-Topic nicht einmischen, da ich (okay, Selbsteinschätzung) ein geduldiger und toleranter Mensch bin.
Ich habe Axel gebeten, den kompletten Code zu posten, weil ich anhand der einen Codezeile keinen vernünftigen Vorschlag zur Problemlösung machen konnte. Es liegt von mir also kein Lösungsvorschlag vor! Ich hielt es aber für möglich, dass andere Forumsteilnehmer in der Lage sind, Axels Problem ohne Zusatzinformationen zu lösen, und habe daher den Thread bewußt als "offen" markiert.
Ich bilde mir ein, mich hier vernünftig und höflich zu verhalten. Daher bitte ich Dich, mich zukünftig nicht mehr zu bevormunden, wie Du es heute zweimal getan hast (https://www.herber.de/forum/messages/614271.html).
Gruß
Martin Beck
Anzeige
AW: Bereich bestimmen
20.05.2005 23:00:01
axel
Hallo Martin,
danke für Deine Mühe. Ich versteh zwar nicht so richtig, worum es in der Auseinandersetzung zwischen Dir und Hajo geht. Ich erwarte hier wirklich auch keine Komplettlösung meines Problems. Aber manchmal gehts halt auch nicht weiter. Ich bin so froh, dass es dieses Forum gibt und dass einem völig unbekannte Leute uneigennützig weiterhelfen. Meine Programmierkenntnisse sind noch ziemlich rudimentär (vor ein paar Jahren hatte ich mal Turbopascal an der Schule und ein bisschen Delphi, aber davon ist nicht viel hängengeblieben). Ich hatte das Problem hier schonmal angesprochen, damals konnte mir "Cardexperte" weiterhelfen. Ich dachte ich komm dann allein zur Lösung, aber ich schaffs nicht.
Ich kann den Code mal hier posten. Aber mittlerweile habe ich soviel drin rumprobiert, hoffentlich verstehst Du, was ich damit machen will und es verwirrt nicht so sehr. Es geht eigentlich um eine Diagrammerstellung mit Werten aus 3 Tabellen.
Achso, das "Activate" hab ich einfach aus Lars Code übernommen. Ich habs auch ohne probiert, aber das hat mich genauso wenig weitergebracht.

Sub Abfrage()
If MsgBox("Diagrammerstellung?", vbQuestion + vbYesNo, "Hallo!") = vbNo Then
MsgBox " Ende...", vbExclamation
End                'Programm wird beendet
Else
Call Diagrammerstellung
End If
End Sub


Sub Diagrammerstellung()
' Diagrammerstellung Makro
' Makro am 24.04.2005 von   aufgezeichnet
' Tastenkombination: Strg+a
Dim Geschwvektor As Range
Dim Spaltenauswahl As Range
Dim sim As Range
Dim Vergleich As Range
Dim Reihe As Range
Set Geschwvektor = Application.InputBox( _
prompt:="Auswahl des Geschwindigkeitsvektors.", _
Title:="Auswahl des Geschwindigkeitsvektors", Type:=8)
Set Spaltenauswahl = Application.InputBox( _
prompt:="Für Anzahl der Diagramme bitte entsprechende Anzahl Zellen auswählen.", _
Title:="Auswahl der Spalten", Type:=8)
Set sim = Application.InputBox( _
prompt:="Auswahl Zelle Start Werte", _
Title:="Auswahl der Zelle", Type:=8)
Set Vergleich = Application.InputBox( _
prompt:="Auswahl Zelle Start Vergleich", _
Title:="Auswahl der Zelle", Type:=8)
Dim cell As Object
Dim b As Integer
b = 0
For Each cell In Spaltenauswahl
b = b + 1
Next cell
Dim cell2 As Object
Dim a As Integer
a = 0
For Each cell2 In Geschwvektor
a = a + 1
Next cell2
For n = 2 To b
Charts.Add
ActiveChart.ChartType = xlXYScatterLines
' Auswahl Spalten 2 bis n
ActiveChart.SetSourceData Source:=Sheets("Zug").Range(Sheets("Zug").Cells(1, n), _
Sheets("Zug").Cells(a, n)), PlotBy:=xlColumns
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = Geschwvektor   'das bleibt ja immer gleich
ActiveChart.SeriesCollection(2).XValues = Geschwvektor   'das bleibt ja immer gleich
' Auswahl Spalten 2 bis n werden (Variable n)
'Reihe = "=Zug!R18C" & n & ":R30C" & n
'Das hab ich einfach aus Lars Code rauskopiert.
Cells.Find(What:=sim, After:=sim, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False).Activate
Reihe = Range(Cells(sim.Row, n), Cells(sim.Row + a, n)).Activate
ActiveChart.SeriesCollection(2).Values = Reihe
ActiveChart.SeriesCollection(3).XValues = Geschwvektor
Reihe = Range(Cells(Vergleich, n), Cells(Vergleich + a, n))
ActiveChart.SeriesCollection(3).Values = Reihe
ActiveChart.Location Where:=xlLocationAsObject, Name:="Zug"
With ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = _
"Geschwindigkeit [km/h]"
.Axes(xlValue, xlPrimary).HasTitle = False
End With
With ActiveChart
.HasAxis(xlCategory, xlPrimary) = True
.HasAxis(xlValue, xlPrimary) = True
End With
ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic
ActiveChart.SeriesCollection(3).Select
ActiveChart.SeriesCollection(3).AxisGroup = 2
ActiveChart.Legend.Select
ActiveChart.Axes(xlValue, xlSecondary).Select
Selection.TickLabels.NumberFormat = "0.000E+00"
With ActiveChart.Axes(xlValue, xlSecondary)
.MinimumScaleIsAuto = True
.MaximumScaleIsAuto = True
.MinorUnitIsAuto = True
'.MajorUnit = 0.000001             'Skalierung automatisiert
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With
ActiveChart.Axes(xlValue).MajorGridlines.Select
ActiveChart.Axes(xlValue).MajorGridlines.Select
ActiveChart.Axes(xlValue).Select
ActiveChart.PlotArea.Select
ActiveChart.Axes(xlValue).MajorGridlines.Select
Selection.Delete
ActiveChart.Legend.Select
ActiveChart.Legend.LegendEntries(1).LegendKey.Select
With Selection.Border
.Weight = xlThin
.LineStyle = xlNone
End With
With Selection
.MarkerBackgroundColorIndex = xlAutomatic
.MarkerForegroundColorIndex = xlAutomatic
.MarkerStyle = xlAutomatic
.Smooth = False
.MarkerSize = 5
.Shadow = False
End With
ActiveChart.Legend.LegendEntries(2).LegendKey.Select
With Selection.Border
.Weight = xlThin
.LineStyle = xlAutomatic
End With
With Selection
.MarkerBackgroundColorIndex = xlAutomatic
.MarkerForegroundColorIndex = xlAutomatic
.MarkerStyle = xlNone
.Smooth = False
.MarkerSize = 5
.Shadow = False
End With
Next
MsgBox "Durchlauf beendet"
Exit Sub
End Sub

Anzeige
AW: Bereich bestimmen
21.05.2005 09:58:17
Martin
Hallo Axel,
wird denn nach der Zeile
Cells.Find(What:=sim, After:=sim, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False).Activate
die richtige Zelle markiert? Das Kannst Du testen, indem Du danach die Zeile
MsgBox ActiveCell.Address
einfügst. Mir ist allerdings unklar, wieso Du hier überhaupt mit Find etwas suchst, da Du den Range Sim ja schon weiter oben über Inputbox definiert hast. Vielleicht ist die Zeile komplett überflüssig, teste das mal.
Wenn alles OK ist versuche mal statt
Reihe = Range(Cells(sim.Row, n), Cells(sim.Row + a, n)).Activate
Set Reihe = Range(Cells(sim.Row, n), Cells(sim.Row + a, n))
Gruß
Martin Beck
P.S. Der Hinweis an Hajo hat nichts mir Dir zu tun, keine Sorge.
Anzeige
AW: Bereich bestimmen
21.05.2005 11:48:36
axel
Hallo Martin,
vielen Dank für Deine Antwort. Das Cells.Find ist im Programmcode wirklich überflüssig, aber es war ja auch mehr eine Probe. Das set reihe hat mir leider auch nichts genützt. Aber ich glaube, ich bin einer Lösung schon näher gekommen. Ich hab jetzt die cells näher definiert:
Reihe = Range(Sheets("Zug").cells(sim.Row, n), Sheets("Zug").cells(sim.Row + a, n))
Damit erhalte ich keine Fehlermeldungen mehr und mein Makro läuft soweit ziemlich flüssig.
Allerings ist das ganze jetzt auf das Arbeitsblatt "Zug" ziemlich festgelegt. Ich möchte aber das Makro in jedem Arbeitsblatt, was ich gerade geöffnet habe, ausführen. Das Makro habe ich bereits in meiner persönlichen Makroarbeitsmappe abgelegt und kann es über ein Symbol aufrufen.
Allerdings klappt es nicht, wenn ich Sheets("Zug") einfach durch ActiveSheet ersetze. Dann kommt die Fehlermeldung "Objekt unterstützt diese Eigenschaft oder Methode nicht."
Gibt es da noch Möglichkeiten dass zu ändern?
Dann habe ich gleich noch 2 Fragen:
1. Wenn das Makro die Schleife durchläuft und auf einen leeren Bereich "stösst" , dann bricht das Makro mit einer Fehlermeldung ab. Was kann man tun, damit dieser leere Bereich einfach übersprungen wird oder anstatt dem Diagramm, welches eigentlich für diesen Bereich erstellt werden soll, eine Meldung in eine Zelle oder ein leeres Diagrammblatt geschrieben wird?
2. Wie kann ich Diagramme verteilt über einen Bereich im Arbeitsblatt nebeneinander und untereinander anordnen? Momentan wirft mir das Makro die vielen erstellten Diagramme alle übereinander.
Ich hoffe Du oder andere Forumsteilnehmer könnt mir nochmal helfen. Dann hätte ichs vielleicht endlich mal geschafft.
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige