Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Curser in Richtige Spalte springen. VBA





Frage

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 1 von bokap1975

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

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

Hi Rolf,

habs ausprobiert. Funktioniert aber nicht. Fehler beim debuggen schreibt er mir.????

Viele Grüß Boris

Antwort 4 von Bokap1975

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

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

hi rolf,

so ist´s super.

vielen dank
boris

Antwort 7 von gast123

hi all

ueber die findmethode waere ein einzeiler ausreichend,ohne objekte ohne variablen

gruss gast123

Antwort 8 von meinTipp

@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

Nachtrag:
Natürlich die Find-Methode nicht mehr als einmal verwenden!
Das mach jedes Makro langsamer gegenüber einer Zwischenspeicherung in einer Range.