Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Zeilen markieren, wenn FeldX ausgewählt ist
#1
Question 
hi,

ich möchte jeweils die Zeilen 6-40 markieren, wenn ich eine Spalte von 35 bis 43 auswähle. Das habe ich zum VBA-Code der Tabelle hinzugefügt:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 
  Select Case Target.Column
 
    Case 35, 36, 37, 38, 39, 40, 41, 42, 43
   
      ThisWorkbook.ActiveSheet.Rows(Target.Row).Select
   
    Case Else
 
  End Select
 
  Select Case Target.Row
 
  Case 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40
   
  ThisWorkbook.ActiveSheet.Rows(Target.Row).Select
 
  End Select
 
End Sub
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.


Julia :)
Antworten Top
#2
Moin Julia!
Zitat:Kann man verstehen was ich meine?
Eher nicht.
Was ist der tiefergehende Sinn Deiner Übung?

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:
  • o0Julia0o
Antworten Top
#3
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.
Antworten Top
#4
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


Angehängte Dateien
.xlsm   Fadenkreuz_erweitert.xlsm (Größe: 25,45 KB / Downloads: 7)
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:
  • o0Julia0o
Antworten Top
#5
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.

Julia :)
Antworten Top
#6
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:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target
   If .CountLarge > 1 Then Exit Sub
   If Not Intersect(Target, Range("A6:Q40")) Is Nothing Then
      Application.EnableEvents = False
      Cells(.Row, "A").Resize(1, 17).Select
      .Activate
      Application.EnableEvents = True
   End If
End With
End Sub

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)
Antworten Top
#7
Ergänzung:
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:
  • o0Julia0o
Antworten Top
#8
Auch Hallo,

war viel zu langsam aber um die Julia nicht sehr zu verwirren ihr Code etwas angepasst.

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  
  Select Case Target.Row
    Case 6 To 40
'  Case 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40
      Application.EnableEvents = False
      Cells(Target.Row, 35).Resize(, 8).Select
      Application.EnableEvents = True
'  MsgBox Target.Row
'  ThisWorkbook.ActiveSheet.Rows(Target.Row).Select

  End Select

End Sub
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • o0Julia0o
Antworten Top
#9
ok, super! Das werde ich schon hinbekommen nach und nach, danke Dir!
Antworten Top
#10
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.

Julia :)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste