Discussion:
Markierung ändern mit VBA
(zu alt für eine Antwort)
Jörg Kaiser
2007-10-13 15:00:22 UTC
Permalink
Hallo

Es werden in einem Tabellenblatt per makro Werte aus der
Zwischenablage ( zeilenweise ) in Spalte A - H eingefügt. Ausser in
Spalte G, diese wird nicht befüllt.. Nach dem Einfügen ist somit z.B.
die Zeile 6 von A - H selektiert und A 6 ist die aktive Zelle.
G6 sollte nun selektiert werden. Mit Offset bekomme ich das auch hin,
nur wenn ich mehrere Zeilen einfüge weiß ich nicht wie das gelöst
werden könnte.
Ich möchte z.B. ab A6 3 Zeilen einfügen und danach sollte G 6 - G 8
selektiert sein um danach weitere Berechnungen durchführen zu lassen.
Zu beachten wäre noch, dass dies dynamisch gehalten werden soll.
( nicht auf G6 - G8 beschränkt, da das Tabellenblatt immer weiter
befüllt wird)

Für Eure Hilfe wäre ich sehr dankbar.

Mit freundlichen Grüßen Jörg
Eberhard Funke
2007-10-13 15:57:03 UTC
Permalink
Post by Jörg Kaiser
Es werden in einem Tabellenblatt per makro Werte aus der
Zwischenablage ( zeilenweise ) in Spalte A - H eingefügt. Ausser in
Spalte G, diese wird nicht befüllt.. Nach dem Einfügen ist somit z.B.
die Zeile 6 von A - H selektiert und A 6 ist die aktive Zelle.
G6 sollte nun selektiert werden. Mit Offset bekomme ich das auch hin,
nur wenn ich mehrere Zeilen einfüge weiß ich nicht wie das gelöst
werden könnte.
Ich möchte z.B. ab A6 3 Zeilen einfügen und danach sollte G 6 - G 8
selektiert sein um danach weitere Berechnungen durchführen zu lassen.
Zu beachten wäre noch, dass dies dynamisch gehalten werden soll.
( nicht auf G6 - G8 beschränkt, da das Tabellenblatt immer weiter
befüllt wird)
Hallo Jörg,

ich verstehe das mal versuchsweise so:
A6 ist die aktive Zelle, und jetzt sollen G6:H6 selecktiert werden.

range("G"& activecell.Row & ":G" & activecell.row+2).select
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Jörg Kaiser
2007-10-13 16:35:58 UTC
Permalink
Post by Eberhard Funke
Hallo Jörg,
A6 ist die aktive Zelle, und jetzt sollen G6:H6 selecktiert werden.
range("G"& activecell.Row & ":G" & activecell.row+2).select
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Hallo Eberhard

Erst mal DANKE für Deine Mühe.
Bei einer Eingabe von 3 Zeilen funktioniert dies. Wie ich aber
( vielleicht etwas umständlich) geschrieben habe,sollte es dynamisch
sein. Das bedeutet ich füge mal 1 Zeile, mal 5 , 15 oder 25 ein und
Excel soll dies erkennen und demzufolge in der Spalte G auch die
Anzahl der Zellen markieren, wie viele Zeilen eingefügt worden.
zB 5 Zeilen eingefügen Aktive Zelle war A 10 somit ist A10 - H14
markiert ( durch einfügen ) - nun soll G10 - G14 markiert werden.
Beim nächsten mal werden zB 8 Zeilen eingefügt. A15 ist aktiv somit
ist A15 - H22 markiert( durch einfügen ) - nun soll G15 - G22
markiert werden
Also die Anzahl der einzufügenden Zeilen ändert sich laufend.

MfG Jörg
Eberhard Funke
2007-10-13 19:17:38 UTC
Permalink
Post by Jörg Kaiser
Post by Eberhard Funke
Hallo Jörg,
A6 ist die aktive Zelle, und jetzt sollen G6:H6 selecktiert werden.
range("G"& activecell.Row & ":G" & activecell.row+2).select
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Bei einer Eingabe von 3 Zeilen funktioniert dies. Wie ich aber
( vielleicht etwas umständlich) geschrieben habe,sollte es dynamisch
sein. Das bedeutet ich füge mal 1 Zeile, mal 5 , 15 oder 25 ein und
Excel soll dies erkennen und demzufolge in der Spalte G auch die
Anzahl der Zellen markieren, wie viele Zeilen eingefügt worden.
zB 5 Zeilen eingefügen Aktive Zelle war A 10 somit ist A10 - H14
markiert ( durch einfügen ) - nun soll G10 - G14 markiert werden.
Beim nächsten mal werden zB 8 Zeilen eingefügt. A15 ist aktiv somit
ist A15 - H22 markiert( durch einfügen ) - nun soll G15 - G22
markiert werden
Also die Anzahl der einzufügenden Zeilen ändert sich laufend.
Hallo Jörg,

vielleicht geht's eleganter, aber so funktioniert's auch:

Range("G" & Selection.Row & ":G" & Selection.Row _
+ Selection.Rows.Count - 1).Select
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Jörg Kaiser
2007-10-13 19:38:21 UTC
Permalink
Post by Eberhard Funke
Hallo Jörg,
Range("G" & Selection.Row & ":G" & Selection.Row _
+ Selection.Rows.Count - 1).Select
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de- Zitierten Text ausblenden -
- Zitierten Text anzeigen -
Hallo Eberhard
Funktioniert genau wie ich es mir vorgestellt habe.
Vielen Dank !!!

Meinen Dank auch an Boris und Alexander die sich meinem Problem
angenommen haben.

MfG Jörg
Eberhard Funke
2007-10-13 19:44:33 UTC
Permalink
Post by Jörg Kaiser
Post by Eberhard Funke
Range("G" & Selection.Row & ":G" & Selection.Row _
+ Selection.Rows.Count - 1).Select
Funktioniert genau wie ich es mir vorgestellt habe.
Hallo Jörg,

mit Alexander's Vorschlag sieht's besser aus:

ActiveCell.Offset(0, Selection.Rows.Count) _
.Resize(Selection.Row - 1, 1).Select
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Alexander Wolff
2007-10-13 16:54:45 UTC
Permalink
Post by Eberhard Funke
A6 ist die aktive Zelle, und jetzt sollen G6:H6 selecktiert werden.
range("G"& activecell.Row & ":G" & activecell.row+2).select
Bequemer ist da übrigens .Resize()
--
Moin+Gruss Alexander - MVP für MS Excel - www.xxcl.de - mso2000sp3 --7-2
{Boris}
2007-10-13 16:07:00 UTC
Permalink
Hi Jörg,
Post by Jörg Kaiser
Es werden in einem Tabellenblatt per makro Werte aus der
Zwischenablage ( zeilenweise ) in Spalte A - H eingefügt. Ausser in
Spalte G, diese wird nicht befüllt.. Nach dem Einfügen ist somit z.B.
die Zeile 6 von A - H selektiert und A 6 ist die aktive Zelle.
G6 sollte nun selektiert werden. Mit Offset bekomme ich das auch hin,
nur wenn ich mehrere Zeilen einfüge weiß ich nicht wie das gelöst
werden könnte.
Ich möchte z.B. ab A6 3 Zeilen einfügen und danach sollte G 6 - G 8
selektiert sein um danach weitere Berechnungen durchführen zu lassen.
Zu beachten wäre noch, dass dies dynamisch gehalten werden soll.
( nicht auf G6 - G8 beschränkt, da das Tabellenblatt immer weiter
befüllt wird)
Deine Beschreibung klingt sehr nach Recorder-Coding. Das soll kein
Vorwurf sein, denn so haben fast alle mal angefangen (und wenn Du
jetzt kein Anfänger bist, dann stehe ich gerade im Fettnapf ;-) ).
Wenn Du mal genauer beschreibst, was Du vorhast, dann dürfte sich
wahrscheinlich eine Lösung ohne Selektiererei finden lassen.

--
Grüße Boris
Jörg Kaiser
2007-10-13 17:14:00 UTC
Permalink
Post by {Boris}
Hi Jörg,
Deine Beschreibung klingt sehr nach Recorder-Coding. Das soll kein
Vorwurf sein, denn so haben fast alle mal angefangen (und wenn Du
jetzt kein Anfänger bist, dann stehe ich gerade im Fettnapf ;-) ).
Wenn Du mal genauer beschreibst, was Du vorhast, dann dürfte sich
wahrscheinlich eine Lösung ohne Selektiererei finden lassen.
--
Grüße Boris
Hi Boris
Nein Du stehst nicht im Fettnapf !!!

Danke für Dein Hilfsangebot.
Also: Ich kopiere aus einer Datenbank Datensätze händisch die ich in
einem Tabellenblatt per Makro aufarbeiten lasse( brauche nicht alle
Einträge ), um diese Werte dann wiederrum in eine von 25 Arbeitsmappen
einzufügen
Und dies soll dann etwas bequemer werden.
Arbeitsmappe wird geöffnet und danach soll das Makro Starten:
Erste freie Zelle in Spalte A wird gesucht
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
Nun wird eine unterschiedliche Anzahl von Zeilen aus der
Zwischenablage einkopiert.
Genaueres steht noch mal in der Antwort an Eberhard.
Die Selektierung benötige ich um danach folgende Berechnung ausführen
zu lassen:
Dim Ein As Date
Dim Aus As Date
Dim i As Date
Dim dauer As Integer
Dim ausgabe As String
Dim element As Variant

For Each element In Selection

Ein = Cells(element.Row, 5).Value
Aus = Cells(element.Row, 6).Value

dauer = 0
i = Ein

Do While i <= Aus
Select Case Weekday(i, vbMonday)
Case 1 To 5
If TimeValue(i) > TimeValue("05:00") Then
dauer = dauer + 1
End If
Case 6
If TimeValue(i) > TimeValue("05:00") And TimeValue(i)
< TimeValue("14:30") Then
dauer = dauer + 1
End If
End Select
i = i + TimeSerial(0, 1, 0)
Loop

ausgabe = dauer \ 60 & ":" & Format(dauer Mod 60, "00")
element.Value = ausgabe

Next element
Das ist nicht von mir aber es funktioniert wunderbar und daran soll
nichts geändert werden. Aber wie gesagt ich benötige meiner Ansicht
nach dazu die Selektierung.

MfG Jörg
Alexander Wolff
2007-10-13 16:51:30 UTC
Permalink
Ich nehme an, dass Dein Copy händisch geschieht (Zwischenablage ist also
gegeben) und das Paste per VBA. Nun soll der Zeilenumfang der ZwAbl bestimmt
werden. Das könnte entweder direct im DataObject - wohl
State-of-the-Art-Programmierung - oder aber auch via Vorabkopie in ein
leeres Blatt mit anschließendem .CurrentRegion.Rows.Count (sehr
behelfsmäßig!) geschehen, um daraus die Größe der Selektion zu erhalten.
--
Moin+Gruss Alexander - MVP für MS Excel - www.xxcl.de - mso2000sp3 --7-2
Loading...