Clever-Excel-Forum

Normale Version: Excel VBA - Suche auf anderem Blatt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi Leute,

vielleicht ein ganz simples Problem, aber ich versuche mittels Makro einen Begriff auf einem nicht aktivierten Tabellenblatt zu löschen - geht das nicht?

Code:
Sub suchen()


Dim c As Range
Dim firstaddress As String
Dim sbegriff As String
Dim Datum As Date
Dim Startwoche As String
Dim Startwoche_Name As String
Dim Suchvariable As Range
Dim Startspalte As String
Dim i As Integer




sbegriff = InputBox("Bitte Suchbegriff eingeben")
Datum = InputBox("Datum")

Startwoche = CStr(WorksheetFunction.IsoWeekNum(Datum))
Set Suchvariable = ThisWorkbook.Sheets(Startwoche).Range("A1:G3").Find(what:=Datum, LookIn:=xlValues, lookat:=xlWhole)

With ThisWorkbook.Sheets(Startwoche).Range(Cells(2, Suchvariable.Column), Range("G3"))
    Set c = .Find(sbegriff, LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
        firstaddress = c.Address
        Do
            Range(Cells(c.Row, c.Column), Cells(c.Row, c.Column)) = ""
            Set c = .FindNext(c)
            Loop Until c Is Nothing
    End If
End With
End Sub


Vielen Dank im Voraus :)
Hallöchen,

Du hast einen Mix aus anderem Blatt und aktivem Blatt. Trenne das mal so:

With ThisWorkbook.Sheets(Startwoche)
With .Range(.Cells(2, Suchvariable.Column), .Range("G3"))
Hi Andre,

vielen Dank für die Rückmeldung. So genau verstehe ich das Problem noch nicht. Kannst du mir das erläutern, wo der Bezug zum "aktiven" Tabellenblatt" ist?

Code:
sbegriff = InputBox("Bitte Suchbegriff eingeben")
Datum = InputBox("Datum")

Startwoche = CStr(WorksheetFunction.IsoWeekNum(Datum))
Set Suchvariable = ThisWorkbook.Sheets(Startwoche).Range("A1:G3").Find(what:=Datum, LookIn:=xlValues, lookat:=xlWhole)

With ThisWorkbook.Sheets(Startwoche)
With .Range(Cells(2, Suchvariable.Column), Range("G3"))
    Set c = .Find(sbegriff, LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
        firstaddress = c.Address
        Do
            Range(Cells(c.Row, c.Column), Cells(c.Row, c.Column)) = ""
            Set c = .FindNext(c)
            Loop Until c Is Nothing
    End If
End With
End With

das funktioniert zumindest so nicht .... Angel
Alle Cells und Range ohne den "." Punkt davor gehen auf das Aktive Blatt. der Rest auf den Bezug mit With

du hast das Beispiel nicht korrekt übernommen.
Hallöchen,

die Punkte musst Du auch noch im Do-Loop-Codebereich beachten.

Das With ist u.a. dazu, um dir einiges an Schreibarbeit zu sparen Smile Du musst aber den zugehörigen Rest so schreiben, als würde der vordere Teil auch da stehen.

Mit nur einem With hättest Du es so schreiben müssen, wobei man über die Notwendigkeit von ThisWorkbook reden könnte Smile:

With ThisWorkbook.Sheets(Startwoche).Range(ThisWorkbook.Sheets(Startwoche).Cells(2, Suchvariable.Column), ThisWorkbook.Sheets(Startwoche).Range("G3"))
Ergibt Sinn, danke euch. 

Das Thisworkbook ist bei mir so drin - bei meinem VBA-Selbststudium habe ich damit gestartet und nun schreibe ich es immer. Schaden kann es denke ich nicht :).
Was ich bisher allerdings nie verstanden hatte : den Unterschied von worksheets und sheets. Aber das ist ein anderes Thema. 

Gruß
worksheets beinhaltet nur Arbeitsblätter. In Sheets können auch andere Blattarten drin sein.
Hallöchen,

Worksheets sind nur die Tabellen. Sheets sind alle Blätter - Tabellen, Diagrammblätter, Makro- und Dialogblätter aus Excel4 Zeiten, ...