AW: Markierung in Reihen mit Makro auslesen
11.09.2005 07:18:23
Christoph
Hallo Marcus,
das Anklicken einer Zelle (linke Maustaste - Einfach-Klick) im benannten Bereich kann nur über "SelectionChange" abgefragt werden. Möglich wäre z.B. auch Doppelklick, aber dabei würde sich der eigentliche Code nicht ändern.
Wenn die Nummern der ausgewählten Zeilen aber erst später eingetragen werden sollen, dann hier noch mal ein weiterer Ansatz (s.u.)
Variante1:
-------------
Das Makro "Test1" schreibt anschließend alle zuvor ausgewählten Zeilen in A1 (durch Komma getrennt). Der vorhandene Eintrag in A1 wird zuvor gelöscht.
Variante2:
-------------
Das Makro "Test2" schreibt die Werte in SpalteA untereinander. Die vorhandenen Einträg in SpalteA werden zuvor gelöscht.
Wenn du die Werte - wie du schreibst - anschließend weiterverarbeitest, ist es nicht zwingend erforderlich, diese zuvor in die Tabelle zu schreiben, sondern du könntest den String bzw. das Array auch direkt für die Verarbeitung nutzen.
Wenn ein zusammenhängender Bereich über mehrere Zeilen markiert wird, wird nichts eingetragen.
Gruß
Christoph
in das Modul des Tabellen-Blattes (hier Tabelle1)
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target
If .Rows.Count > 1 Then Exit Sub
If .Row < 11 Or .Row > 50 Then Exit Sub
If InStr(strRow, .Row) = 0 Then
strRow = strRow & .Row & ","
End If
End With
End Sub
und in ein allgemeines Modul den folgenden Code:
Option Explicit
Public strRow As String
Sub Test1()
Sheets("Tabelle1").Range("A1") = ""
If Len(strRow) > 0 Then
Sheets("Tabelle1").Range("A1") = _
Left(strRow, Len(strRow) - 1)
End If
strRow = ""
End Sub
Sub Test2()
Dim arr
Sheets("Tabelle1").Columns(1).ClearContents
If Len(strRow) > 0 Then
arr = Split(strRow, ",")
Sheets("Tabelle1").Range("A1:A" & UBound(arr) + 1) = _
Application.Transpose(arr)
End If
strRow = ""
End Sub