2 Zeilen mit ActiveCell.Row ausgeben

Michael81

Mitglied
Hallo,

ich lese mit i = ActiveCell.Row ein und gebe dann auf einen anderen Tabellenblatt die benötigten daten wieder aus.
Soweit ist das auch keine schwierigkeit. Aber wie komme ich an die Daten wenn 2 Zeilen markiert werden?

Oder wie kann ich wenn eine oder zwei Zeilen markiert sind, bestimmte Felder in Variabel Speichern?

Z.b. Wenn Zeile 5+6 markiert sind, will ich die Felder B,E,F in eine Variabel packen.



Bisher sieht es für eine markierte Zeile so aus:
Code:
Sub drucken()
' drucken Makro

'Fensterflacker abschalten
    Application.ScreenUpdating = False

'um die aktuelle Zeile zu ermitteln
  i = ActiveCell.Row

'Die Variabeln in HR einfügen
  Sheets("hr").Range("B8").Value = Cells(i, 2)
  Sheets("hr").Range("d8").Value = Cells(i, 6)
  Sheets("hr").Range("e8").Value = Cells(i, 10)

'Wenn SM ausgefüllt ist die SM durch ein O austauschen.
     If Cells(i, 8) <> "" Then
         Sheets("hr").Range("c8") = "O"
      Else
   Sheets("hr").Range("c8") = ""
End If

End Sub

Mfg
 
Zuletzt bearbeitet:
Ich hoffe ich habe es richtig verstanden:
Visual Basic:
For Each SingleRow In Selection.Rows
        With SingleRow.Cells(1, 1).EntireRow
            MsgBox .Cells(1, 2) 'B
            MsgBox .Cells(1, 5) 'E
            MsgBox .Cells(1, 6) 'F
        End With
    Next SingleRow
 
Genau das habe ich gesucht. Danke

Aber wieso funktioniert dass mit den Message Boxen, aber nicht wenn ich es versuche im Tabellenblatt aus zu geben.

Code:
Sub testttt()


For Each SingleRow In Selection.Rows
        With SingleRow.Cells(1, 1).EntireRow
            X = .Cells(1, 2) 'B
            Y = .Cells(1, 5)
            Z = .Cells(1, 6)


Range("P9") = X
Range("Q9") = Y
Range("R9") = Z
Range("P10") = X
Range("Q10") = Y
Range("R10") = Z
        End With
    Next SingleRow

End Sub
 
Zuletzt bearbeitet:
Aber wieso funktioniert dass mit den Message Boxen, aber nicht wenn ich es versuche im Tabellenblatt aus zu geben.

Was funktioniert da nicht? Du musst natürlich dafür sorgen, dass deine geschriebenen Werte beim nächsten Durchlauf nicht wieder überschrieben werden.
 
Was funktioniert da nicht? Du musst natürlich dafür sorgen, dass deine geschriebenen Werte beim nächsten Durchlauf nicht wieder überschrieben werden.

Wenn ich das wie in dem Quelltext von mir oeben versuche, bekomme ich immer nur eine Zeile ausgegeben. Zum Beispiel wenn Zeile 5+6 markiert sind, Zeile 5.

Hast du es mal mit voll qualifizierter Eigenschaft versucht?

Me.Range("P9")=X

Ne, da ich das noch nie gesehen hab, bzw. nicht kenne.
 
Das mit den mehreren Tabellenblätter ist ja recht leicht gelöst.
Das habe ich mit if, then, else gemacht.
Die markierten zeilen liegen ja immer auf der Startseite und liegen immer zusammen. Also Zeile 2,3 oder 3,4 usw.
Nur habe ich kein Plan, wie man an den Inhalt der 2 Zeile anspricht.

Mit dem Vorschlag aus Post #2, funktioniert das ja auch. Aber wenn ich dann versuch das in auf dem Tabellenblatt aus zu geben, dann funktioniert das nicht mehr. warum auch immer
 
Zuletzt bearbeitet:
Was funktioniert da nicht? Du musst natürlich dafür sorgen, dass deine geschriebenen Werte beim nächsten Durchlauf nicht wieder überschrieben werden.

Wie bekommt man denn das hin? Ich finde zu dem Thema leider auch keine Erklärung / Tutorial. Sonst würde ich auch nicht hier dumm fragen.
 
z.B. mit Offset:

Visual Basic:
Dim iCount As Integer
    
    iCount = 0
    
    For Each SingleRow In Selection.Rows
        With SingleRow.Cells(1, 1).EntireRow
            Worksheets("Sheet2").Cells(1, 1).Offset(iCount, 0).Value = .Cells(1, 2).Value 'B
            Worksheets("Sheet2").Cells(1, 2).Offset(iCount, 0).Value = .Cells(1, 5).Value 'E
            Worksheets("Sheet2").Cells(1, 3).Offset(iCount, 0).Value = .Cells(1, 6).Value 'F
            
            iCount = iCount + 1
        End With
    Next SingleRow
 
Zurück