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

Zeilennr. als Variable VBA

Zeilennr. als Variable VBA
15.12.2014 17:37:19
Lisa
Hallo zusammen.
ich habe folgendes Anliegen:
wie geht das, wenn ich in Blatt A eine Zeitreihe von 0:15 bis 0:00 habe und mir die Zeile von 0:15 merken will, sodass ich die selbe Zeile auf einem anderen Blatt mit der gleichen Zeitreihe ansprechen kann?
Set Eingabezeile = Prognose.Sheets("Prognose").Range("a16") 'Zeile mit der ersten Uhrzeit
'[Dann werden Werte aus Blatt A kopiert und anschließend Blatt B aktiviert]
ActiveSheet.Cells(Eingabezeile.Row, Eingabespalte.Column).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sprich ich kopiere Werte aus Blatt A (0:15 bis 0:00) und füge diese in Blatt B wieder neben der Zeitreihe (0:15 bis 0:00) ein.
Die zwei Zeitreihen befinden sich aber in unterschiedlichen Zeilen.
So wie ich es oben habe, fügt es mir die Werte in Blatt B ab Zeile 16 ein, das will ich aber so gar nicht :/

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilennr. als Variable VBA
15.12.2014 20:00:46
Claus
Hallo Lisa,
du könntest eine Variable definieren:
dim aktivezeile as Variant
Dann im Blatt A dort wo du copy machst direkt davor:
aktivezeile = ActiveCell.Row
und jetzt in deiner zeile
ActiveSheet.Cells(Eingabezeile.Row, Eingabespalte.Column).Select
das "Row" durch die Variable aktivezeile ersetzen, also:
ActiveSheet.Cells(Eingabezeile.aktivezeile, Eingabespalte.Column).Select
Probier es mal aus, ich bin ziemlich schlecht in VB, aber da jetzt so lang niemand geantwortet hat dachte ich, so könntest du es mal versuchen.
Rückmeldung wäre nett.
Liebe Grüße
Claus

Anzeige
*verzweifelt*
16.12.2014 08:47:56
Lisa
Hallo Claus und vielen Dank für den Ansatz.
allerdings bekomme ich eine Fehlermeldung in der letzten Zeile:
Laufzeitfehler '438:
Obejekt unterstützt diese Eigenschaft oder Methode nicht.
außerdem würde er sich hierbei ja wieder nur die "harte" Zeilen nummer merken.
wenn ich Blatt A die Zeitreihe bei Zeile 16 beginnt und bei Blatt B bei Zeile 3...
wie bekomme ich das hin, dass ich quasi Daten jeweils neben der Zeitreihe eintragen kann? *verzweifelt*
das muss doch mit einer variable gehen, die checkt in welcher Zeile der erste Wert der Zeitreihe ist und das als Zeile deklariert, oder?
Bitte dringend um Hilfe :/

Anzeige
AW: *verzweifelt*
16.12.2014 08:53:24
Claus
Hallo Lisa,
oh sorry, wie gesagt, ich bin auch nicht so gut in VBA. Also ich stelle es auf "Frage offen", vielleicht hat ja heute jemand von denen Zeit, die es richtig drauf haben. (Zudem hab ich jetzt auch grade keine Zeit)
Grüßle Claus

Eingabezeile.Offset(x).Row für x=Zeilen-...
16.12.2014 09:32:11
Luc:-?
…Verschiebung nach oben (-) bzw unten (+), Lisa,
also die Differenz zwischen den beiden Anfangszeilen.
Gruß, Luc :-?

AW: Eingabezeile.Offset(x).Row für x=Zeilen-...
16.12.2014 09:59:03
Lisa
klar kann ich es "hart" eintragen... aber das ist einer recht unschöne Lösung :/
bei jeder kleinen Änderung müsste nachgepflegt werden

Wieso 'hart'? Ändern sich denn d.Anfangszeilen ...
16.12.2014 10:20:50
Luc:-?
…auch ständig, Lisa?
Dann solltest du aber was an der Organisation ändern oder musst auch noch die beiden Anfangszeilen suchen und ihre Nrn vgln.
Luc :-?

Anzeige
Problem mit Objekt-Definition
16.12.2014 10:36:42
Lisa
Die Datei wird ab Januar übergeben. Daher sollten nicht alle Änderungen nachgepflegt werden müssen.
Einzelne Änderungen müssen natürlich eingepflegt werden.
Mich ärgert nur, dass es eigentlich gehen müsste...
Hier das Problem:

Set Anfang_Zeitraum = Prognose.Sheets("Prog_Master").Range("a16")
Set Eingabezeile = Selection.Find(What:=Anfang_Zeitraum.Value, after:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False)
ActiveSheet.Cells(Eingabezeile.Row, PW_Eingabespalte_Tag1.Column).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

sobald Eingabezeile.Row angesteuert werden soll kommt die Fehlermeldung:
Objektvariable nicht festgelegt.
Daher muss es weiter oben an dem "Anfang_Zeitraum.Value" in der .Find-Methode liegen.
allerdings versteh ich nicht was daran nicht funktioniert, da z.B.
hier:
'Tag1 als Zeile definieren
Set PW_Tag1 = Selection.Find(What:=PW_Tag1.Value, after:=OF, LookIn:= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
auch der Tag gesucht wird und in
ActiveSheet.Cells(PW_Tag1.Row + 1, PW.Column).Select

als Zeile genutzt wird.
EIGENTLICH müsste es funktionieren o.Ô
außerdem:
wie muss ich Anfang_Zeitraum definieren wenn es 00:15 z.B. ist?
als Range oder Variant?
(PS: die Zuordnung für Anfang_Zeitraum funktioniert prinzipiell. Die Überwachung zeigt einen Wert an. Allerdings wird dieser in der Selection.Find nicht gefunden

Anzeige
Das mag an zusätzlichen Dezimalen liegen, ...
19.12.2014 12:58:35
Luc:-?
…Lisa,
deshalb am besten hier Texte vgln → mit vbFkt Format bzw WorksheetFunction.Text (ggf einzeln) erzeugbar. Uhrzeit ist eine DezimalZahl: 1/(24*60^2) für 15min ⇒ 0,010416667 (6-Periode auf EndZiffer 7 gerundet!)
Ansonsten das mit .Find gefundene Objekt kontrollieren: If Not Eingabezeile Is Nothing Then o.Ä.
Gruß, Luc :-?
Besser informiert mit …

Ergänzung: Bei formatierten Zellen kann ...
19.12.2014 13:13:40
Luc:-?
…natürlich auch gleich mit .Cells(…).Text vgln wdn, also hier dann Anfang_Zeitraum.Text nicht …Value, was ggf aber auch nicht fktioniert. In diesem Fall bleibt nur der EinzelVgl Zelle für Zelle per For Each zelle In Selection. Dort kann dann zelle.Text vgln wdn, wenn zelle As Range deklariert wurde.
Mit Tag fktioniert es, weil es sich dabei um Ganzzahlen handeln dürfte. Mit den Gleitkommazahlen einer Uhrzeit ist's aber meist nicht möglich.
Schö4AdWE, Luc :-?

Anzeige
AW: Zeilennr. als Variable VBA
16.12.2014 09:36:35
Andre
Hallo Lisa,
Stell doch mal eine Beispielmappe rein, das macht es einfacher zu helfen.
Gruß
Andre

Das dürfte kaum erforderlich sein! Gruß owT
16.12.2014 09:49:41
Luc:-?
:-?

AW: Zeilennr. als Variable VBA
16.12.2014 09:52:21
Lisa
kann ich leider nicht. Da bei jeder erstellten Datei Firmenangaben in den Eigenschaften gespeichert werden.
allerdings habe ich einen (m.E. nach) guten Ansatz:

Dim Anfang_Zeitraum As Double
'Dim AktiveZeile As Variant
Dim Eingabezeile As Variant
Set Prognose = ActiveWorkbook
Sheets("Prog_Master").Activate
Anfang_Zeitraum = Prognose.Sheets("Prog_Master").Range("a16") 'Zeile mit der ersten Uhrzeit!
'NEUE SUCHE PW
Datenbasis.Activate
Worksheets("Einlesen").Activate
ActiveSheet.Range("BQ:cl").Select
'Tag1 als Zeile definieren
Set PW_Tag1 = Selection.Find(What:=PW_Tag1.Value, after:=OF, LookIn:= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
ActiveSheet.Cells(PW_Tag1.Row + 1, PW.Column).Select
ActiveSheet.Range(Selection, ActiveSheet.Cells(Selection.Row + 95, Selection.Column)).Select
Selection.Copy
Windows("Prognose.xlsm").Activate
Sheets("PW").Select
ActiveSheet.Range("A:X").Select
Set PW_Eingabespalte_Tag1 = Selection.Find(What:=PW_Tag1.Value, after:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
Set Eingabezeile = Selection.Find(What:=Anfang_Zeitraum, after:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False)
ActiveSheet.Cells(Eingabezeile.Row, PW_Eingabespalte_Tag1.Column).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Also alles funktioniert. Außer, dass "Eingabezeile" nie einen Wert einließt, Überwachung meldet immer "Nothing"
übersehe ich hier etwas?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige