# 2 Zeilen mit ActiveCell.Row ausgeben



## Michael81 (26. September 2012)

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:

```
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


----------



## HonniCilest (27. September 2012)

Ich hoffe ich habe es richtig verstanden:

```
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
```


----------



## Michael81 (27. September 2012)

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.


```
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
```


----------



## Zvoni (28. September 2012)

Hast du es mal mit voll qualifizierter Eigenschaft versucht?

*Me*.Range("P9")=X
usw.


----------



## HonniCilest (28. September 2012)

> 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.


----------



## Michael81 (29. September 2012)

HonniCilest hat gesagt.:


> 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.


----------



## Zvoni (30. September 2012)

Wenn du mehrere Tabellenblätter hast, woher soll Range wissen wo es hingehört?


----------



## Michael81 (30. September 2012)

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


----------



## Michael81 (30. September 2012)

> 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.


----------



## HonniCilest (1. Oktober 2012)

z.B. mit Offset:


```
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
```


----------



## Michael81 (2. Oktober 2012)

Danke, ich werde es morgen auf der Arbeit mal testen.


----------

