Es wird jetzt jedoch ebenfalls jeweils die Zeile 6-40 markiert, wenn ich diese auswähle. Selbst, wenn ich nicht in den Spalten 35 bis 40 das Feld anklicke. Kann man verstehen was ich meine?
Wenn ich shift+Leertaste drücke, kann ich in die Zelle, in der ich mich befinde eine Eingabe machen. Das funktioniert mit dem Code (ThisWorkbook.ActiveSheet.Rows(Target.Row).Select) nicht, da ich dann die Eingabe nicht in der zuletzt ausgewählten Zelle mache, sondern in der 1. Zelle der Zeile. Mein Ziel ist es, wenn ich hinten in den Spalten bin, dass ich dann leichter sehe, in welche Spalte ich mich befinde. Doch hineinschreiben können möchte ich ja trotzdem noch etwas. Gibt es da eine bessere Variante?
Wenn ich in den Spalten 35-40 bin, muß ich dort keine Eingabe machen. Daher habe ich die Spalten 1-34 ausgeklammert(weil ich ja bei Markierung leider nicht in die Zelle schreiben kann, sondern nur in die 1. Spalte der nun durch den Code markieren Zeile). Jedoch benötige ich die Markierung für die Zeilen 1-5 & 41-10485776 nicht. Daher der 2. Teil des Codes mit den Zeilen. Welcher jedoch leider dazu führt, dass auch wenn ich in Spalte 1-34 bin, die ganze Zeile markeiert wird.
18.03.2017, 13:14 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2017, 13:16 von o0Julia0o.)
hi, RPP63 - ich habe denn Sinn oben nochmal ergäntzt. Also: Wenn ich shift+Leertaste drücke, kann ich in die Zelle, in der ich mich befinde eine Eingabe machen. Das funktioniert mit dem Code (ThisWorkbook.ActiveSheet.Rows(Target.Row).Select) nicht, da ich dann die Eingabe nicht in der zuletzt ausgewählten Zelle mache, sondern in der 1. Zelle der Zeile. Mein Ziel ist es, wenn ich hinten in den Spalten bin, dass ich dann leichter sehe, in welche Spalte ich mich befinde. Doch hineinschreiben können möchte ich ja trotzdem noch etwas. Gibt es da eine bessere Variante?
Wenn ich in den Spalten 35-40 bin, muß ich dort keine Eingabe machen. Daher habe ich die Spalten 1-34 ausgeklammert(weil ich ja bei Markierung leider nicht in die Zelle schreiben kann, sondern nur in die 1. Spalte der nun durch den Code markieren Zeile). Jedoch benötige ich die Markierung für die Zeilen 1-5 & 41-10485776 nicht. Daher der 2. Teil des Codes mit den Zeilen. Welcher jedoch leider dazu führt, dass auch wenn ich in Spalte 1-34 bin, die ganze Zeile markeiert wird.
Oh ja, die gibt es. :21: Eine Suche nach Fadenkreuz könnte Dir helfen. Ich habe mal drei interessante Möglichkeiten in einer Datei beigefügt. (Erklärung der Methoden in den einzelnen Sheets)
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28 • o0Julia0o
18.03.2017, 13:34 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2017, 13:34 von o0Julia0o.)
wow! Genau so etwas wäre perfekt*. Doch leider ist der Code auch ziemlich komliziert für mich. Er besteht ja auch 2 Codes.
Code:
Private Sub Worksheet_Change(ByVal Target As Range) If ActiveCell <> vbNullString Then With Application .EnableEvents = False .Undo .EnableEvents = True End With MsgBox "Es dürfen nur einzelne Zellen geändert werden!" End If End Sub
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) On Error GoTo EventsAn Application.EnableEvents = False With Target Union(Range(.Cells(1), .Cells(.Cells.Count)).EntireColumn, _ Range(.Cells(1), .Cells(.Cells.Count)).EntireRow).Select .Activate End With EventsAn: Application.EnableEvents = True End Sub
Wo muß ich denn jetzt ändern, wenn die Markierung nur auftauchen soll, wenn ich in eine Zelle in der Matrix A6:AQ40 markiere? Wenn dann über diese Matrix hinaus markiert wird ist aber nicht ganz so schlimm. *Oh - ach nee. Der löscht ja alles, wenn ich in Zelle A20 etwas löschen möchte. Ich möchte ja nur eine optische Markierun wenn ich in A20 mich befinde. Eintippen in A20 geht. Aber wenn ich Entf-Taste drücke, wird die ganze Zeile & Spalte gelöscht.
Im Grunde ist die Bedingte Formatierung ja super - jedoch muß ich dort bereits andere Dinge per Bedingter Formatierung machen, und das würde sich dann gegenseitig ausschließen.
Naja, dies sollte Dir Möglichkeiten aufzeigen, die Du an Deine Bedürfnisse anpassen kannst. Wenn Du noch nicht soweit bist, gibt es heute wegen Wochenende auch etwas pfannenfertiges. ;) Du brauchst für Dein konkretes Beispiel nur ein Ereignismakro:
PrivateSub Worksheet_SelectionChange(ByVal Target As Range)
With Target
If .CountLarge > 1ThenExitSubIfNot Intersect(Target, Range("A6:Q40")) IsNothingThen
Application.EnableEvents = False
Cells(.Row, "A").Resize(1, 17).Select
.Activate
Application.EnableEvents = TrueEndIfEndWithEndSub
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Zitat:wenn ich in eine Zelle in der Matrix A6:AQ40 markiere
Du kannst doch hoffentlich den obigen Code auf Deine Bedürfnisse anpassen? Kleiner Tipp: Es sind zwei Änderungen notwendig. (Intersect und Resize) Dazu die Preisfrage: Spalte AQ hat welche Spaltennummer?
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28 • o0Julia0o
18.03.2017, 15:18 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2017, 15:18 von o0Julia0o.)
ich probiere auch gerade nochmal mit der bedingten Formatierung herum(siehe P.S. - ist gelöst):
So habe ich das bei Tabellenblatt1:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect(Target, Range("A4:AQ40")) Is Nothing Then ThisWorkbook.Names.Add Name:="AktiveZeile", RefersToR1C1:=Target.Row ThisWorkbook.Names.Add Name:="AktiveSpalte", RefersToR1C1:=Target.Column Else On Error Resume Next ThisWorkbook.Names("AktiveZeile").Delete ThisWorkbook.Names("AktiveSpalte").Delete On Error GoTo 0 End If End Sub
Das funktioniert.
Und so bei einem andereren Tabellenblatt in den Tabellencode geschrieben:
Code:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A5:AE40")) Is Nothing Then ThisWorkbook.Names.Add Name:="AktiveZeile1", RefersToR1C1:=Target.Row ThisWorkbook.Names.Add Name:="AktiveSpalte1", RefersToR1C1:=Target.Column Else On Error Resume Next ThisWorkbook.Names("AktiveZeile1").Delete ThisWorkbook.Names("AktiveSpalte1").Delete On Error GoTo 0 End If End Sub
Das funktioniert nicht. Es wird nichts markiert. Ich habe den Target-Bereich anders. Und den Namen AktiveZeile1 und AktiveSpalte1 geändert. Wenn ich den Namne wie im 1. Tabellenblatt belasse, also AktiveZeile & AktiveSpalte, dann wurde zwar etwas markeirt - aber durch Markierung einer Zelle in Tabellenblatt1 & nicht im Tabellenblatt wo es sollte. Hier mal die weiteren Einstellungen:
Oder muß der Name auf jeden Fall AktiveSpalte heißen? Nur komisch, dass dann die Zelle aus Tabelle1 gilt, das ist ja im Ergebnis dann unsinnig. Im Namensmanager wird gar kein Name AktiveZeile1 oder AktiveSpalte1 erstellt. Aber wohl AktiveZeile udn AktiveSpalte.
P.S. Gelöst. Hatte Private Sub Worksheet_Change(ByVal Target As Range) gewählt, was natürlich falsch war.