Clever-Excel-Forum

Normale Version: VBA Find bei verbunden Zellen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo wertes Forum,

ich habe ein Problem bei der Suche nach einem Text.
Folgende Situation:
Ich habe einen größeren Report, in dem der Übersichtlichkeit halber Überschriften in verbundenen Zellen stehen habe.
Das ist ganz praktisch, da der Report zusätzlich gruppierte Spalten hat und damit die Spaltenüberschrift immer sichtbar ist, egal ob Spalten ein- oder ausgeblendet sind.

Jetzt suche ich aber genau nach den Texten in diesen verbundenen Zellen, um mein Makro im Report in den richtigen Spalten etwas schreiben zu lassen.
Code:
    IntZeileKopf = .Cells.Find(What:="Mitarbeiter nach Tätigkeit", After:=ActiveCell, LookIn:=xlValues, LookAt _
        :=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row

Das führt natürlich zum Laufzeitfehler 91 (Objektvariable oder With-Blockvariable nicht festgelegt).
Auf der Suche nach einer Lösung habe ich gefunden, dass des .Cells durch .Range ersetzt werden soll.
Code:
    IntZeileKopf = .Range.Find(What:="Mitarbeiter nach Tätigkeit", After:=ActiveCell, LookIn:=xlValues, LookAt _
        :=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row
führt aber zum Fehler beim Kompilieren (Argument ist nicht optional).

Wie löse ich das am Besten? Auf die verbundenen Zellen möchte ich eigentlich nicht verzichten, das es wie beschrieben am übersichtlichsten ist.

Vielen Dank für Eure Hilfe,
Lutz
Hallo,

zeige bitte eine Beispieldatei.
Hallo Klaus-Dieter,

anbei die Datei und der Code
Code:
Public Sub A_Ausgabe()

Dim IntZeileKopf As Integer, IntSpalteCompletedOrders As Integer
Dim IntLetzteZeileAusgabe As Integer, IntZeileAusgabe As Integer
Dim RngAusgabe As Range

Dim WkbAusgabe, WksTag

Set WkbAusgabe = ThisWorkbook
Set WksTag = WkbAusgabe.Worksheets("Tagesansicht")

With WksTag
    .Outline.ShowLevels ColumnLevels:=3
   
    IntZeileKopf = .Cells.Find(What:="Mitarbeiter nach Tätigkeit", After:=ActiveCell, LookIn:=xlValues, LookAt _
        :=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row
    IntSpalteCompletedOrders = .Cells.Find(What:="Completed Process Orders", After:=ActiveCell, LookIn:=xlValues, LookAt _
        :=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Column
    IntLetzteZeileAusgabe = .UsedRange.SpecialCells(xlCellTypeLastCell).Row

    Set RngAusgabe = .Cells(IntLetzteZeileAusgabe + 1, 1)
End With

End Sub
Gruß,
Lutz
Hallo,

schau Dir mal unten den Code an, vielleicht kannst Du Deinen dann anpassen.
Melde Dich bei Erfolg oder Misserfolg.

Code:
Sub SUCHEN()
   Dim IntZeileKopf As Range
   With Sheets("Tabelle1").Range("A1:C1")
       Set IntZeileKopf = .Find("Mitarbeiter nach Tätigkeit", LookIn:=xlValues, LookAt _
           :=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
   End With
   
   If Not IntZeileKopf Is Nothing Then
      MsgBox "Fund in Zeile: " & IntZeileKopf.Row & " Spalte " & IntZeileKopf.Column
   Else
      MsgBox "Kein Ergebnis bei der Suche!"
   End If

End Sub
Hallo,

das habe ich nicht verstanden. Genau genommen stehen deine Überschriften in Spalte C2 und in Spalte Z2. Die kannst du doch direkt adressieren. Falls du die Überschriften in Zeile 3 meinen solltest, vertsehe ich den Zusammenhang mit den verbundenen Zellen nicht.
Hallo atilla,

vielen Dank für den Tip.
Dein Code lief und auf der Suche nach dem Warum habe ich .Cells durch .UsedRange ersetzt und läuft :19: .


Hallo Klaus-Dieter,

da mein Chef seine Reports immer mal wieder angepasst haben möchte, kann hier und da mal ne Spalte dazukommen oder weggelassen werden. Und durch die Suche nach gewissen Überschriften, erspare ich mir dann das Anpassen der jeweiligen Adressen.

Guß,
Lutz