Curser in Richtige Spalte springen. VBA
hallo zusammen.
ich habe eine Tabell mit sehr vielen Spalten in denen ich immer wieder was eintragen muß. diese Spalten haben in zeile A Überschriften. z. B. Fenster, Rahmen, Türen usw. Jetzt wäre es sehr hilfreich, dass wenn ich in die Zelle A2 z.B Türen eingebe ich direkt in die Spalte springe wo die Überschrift entsprechend ist. Am besten noch in die nächste freie Zeile der gesamten Tabelle.
Wäre super wenn mir jemand hilft.
Antwort schreiben
Antwort 1 von bokap1975 vom 27.02.2020, 14:55 Options
hallo,
habs schon so in etwa selbst raus bekommen.
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("A2") = "Fenster" Then Range("C10").Select
End Sub
und so weiter.
grüße boris
Antwort 2 von meinTipp vom 28.02.2020, 09:16 Options
Hallo Boris,
versuche es damit:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rgWo As Range
Dim loZeile, loSpalte As Long
If Target.Count > 1 Or Target.Address <> "$A$2" Then Exit Sub
Set rgWo = Rows(1).Find(What:=Range("A2").Value, After:=Range("A1"), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If rgWo Is Nothing Then
MsgBox Range("A2").Value & " wurde in den Spaltenüberschriften nicht gefunden"
Else
loSpalte = rgWo.Column
loZeile = Cells(Cells.Rows.Count, loSpalte).End(xlUp).Row
Cells(loZeile + 1, loSpalte).Select
End If
End Sub
Gruss Rolf
Antwort 3 von Bokap1975 vom 28.02.2020, 09:45 Options
Hi Rolf,
habs ausprobiert. Funktioniert aber nicht. Fehler beim debuggen schreibt er mir.????
Viele Grüß Boris
Antwort 4 von Bokap1975 vom 28.02.2020, 09:51 Options
sorry.
Fehler war - Laufzeitfehler 448.
beim debuggen war folgender bereich markiert.
Set rgWo = Rows(1).Find(What:=Range("A2").Value, After:=Range("A1"), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Viele Grüße boris
Antwort 5 von meinTipp vom 28.02.2020, 10:15 Options
das kann mit deiner Excel-Version zu tun haben. Unter 2003 funktioniert es.
Zeichne mal ein Makro auf wenn du im Arbeitsblatt die Suchfunktion benutzt. Schau mal nach welches benannte Argument bei dir nicht vorhanden ist.
Ich tippe mal auf Searchformat.
Lasse dieses Argument einfach weg.
Also so:
Set rgWo = Rows(1).Find(What:=Range("A2").Value, After:=Range("A1"), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False)
Antwort 6 von bokap1975 vom 28.02.2020, 10:57 Options
hi rolf,
so ist´s super.
vielen dank
boris
Antwort 7 von gast123 vom 28.02.2020, 12:53 Options
hi all
ueber die findmethode waere ein einzeiler ausreichend,ohne objekte ohne variablen
gruss gast123
Antwort 8 von meinTipp vom 28.02.2020, 19:48 Options
@gast123
ja dann lass mal den Code sehen.
Das man den Code in der "Else" Bedingung in eine Zeile pressen kann, ist unumstritten. Die Lesbarkeit leidet doch sehr darunter und macht es nicht so VBA-Erfahrenen sehr schwer den Code nachzuvollziehen.
Ich bin jetzt sehr gespannt auf deinen Code (natürlich mit dem Abfangen des Fehlers, wenn nichts gefunden wurde).
Mit freundlichen Grüssen
Rolf
Antwort 9 von meinTipp vom 28.02.2020, 19:54 Options
Nachtrag:
Natürlich die Find-Methode nicht mehr als einmal verwenden!
Das mach jedes Makro langsamer gegenüber einer Zwischenspeicherung in einer Range.