Opgelost VBA script uitvoeren voor enkele sheets maar niet voor alle sheets

  • Onderwerp starter Onderwerp starter Tont
  • Startdatum Startdatum
Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

Tont

Gebruiker
Lid geworden
17 jan 2024
Berichten
42
Ik zou graag willen dat onderstaand VBA script alleen wordt uitgevoerd op de tabbladen "Begane grond", "Eerste verdieping", "Tweede verdieping" en "Derde verdieping" maar niet op het tabblad "Vertrokken"
Wat moet er worden aangepast?

Sub Macro1()
Dim sh As Worksheet, c As Range, eersteadres As String, naam As String, y As Long
naam = Application.InputBox("welk naam zoek je", "Zoeken", "hier ingeven")
For Each sh In Sheets
sh.Columns(1).Range("A1:A6").Interior.Color = 15773696
sh.Columns(1).Range("B1:B6").Interior.Color = 65535
sh.Columns(1).Range("C1:C6").Interior.Color = 15773696
'sh.Cells.Interior.Color = xlNone
Set c = sh.Columns(2).Find(naam, , , 1)
If Not c Is Nothing Then
eersteadres = c.Address
y = y + 1
Do
c.Offset(, -1).Resize(, 3).Interior.Color = vbGreen
Set c = sh.Columns(2).FindNext(c)
Application.Goto c
Loop While Not c Is Nothing And c.Address <> eersteadres
End If
Next sh
If y = 0 Then MsgBox "niet gevonden"
End Sub
 

Bijlagen

Geen 'script' nodig:

Zet alle gegevens in 1 werkblad
Gebruik autofilter.

Een goede struktuur is 95% van het werk.
 
Hallo AHulpje en snb,

De verschillende tabbladen in het Excel sheet moeten blijven bestaan omdat ze ook afzonderlijk worden geraadpleegd.
Als ik jouw code toevoeg, AHulpje, krijg ik een melding:
Objectvariabele of blokvariabele With is niet ingesteld.
Misschien heb ik jouw toevoeging op de verkeerde plek gezet?
 
Code:
For Each sh In Sheets
    If sh.Name <> "Vertrokken" Then
        ...
        ...
        ...
    End If
Next sh
 
Ik had inderdaad jouw code regels niet op de juiste plek toegevoegd! Het werkt nu.
Maar nog even voor mij:

Nu heb je met de regel

If sh.name <> "Vertrokken" Then
aangegeven dat de VBA code niet moet worden uitgevoerd op het tabblad "Vertrokken",

maar het is nu niet zo dat je met een regel

If sh.name = "Begane grond", "Eerste verdieping", "Tweede verdieping", "Derde verdieping" Then
je kunt aangeven dat de code die dan volgt wel moet worden uitgevoerd voor deze vier tabbladen.

Als ik die regel in de macro zet krijg ik een melding Syntaxisfout.
Moet zo'n regel echt helemaal anders of is het een klein dingetje wat ik niet goed heb gedaan?
 
Kan zo:
Code:
    For Each sh In Sheets
        If sh.Name = "Begane grond" Or _
           sh.Name = "Eerste verdieping" Or _
           sh.Name = "Tweede verdieping" Then
           ...
        End If
    Next
 
Moet zo'n regel echt helemaal anders of is het een klein dingetje wat ik niet goed heb gedaan?
Yep. Hou het, kortom simpel :).
 
Ipv al die Or-statements zet de tabbladen die je wil behandelen in een Array.
Behandel dan elk element van die Array.

Code:
Sub Macro1()
    Dim sh As Worksheet, c As Range, eersteadres As String, naam As String, y As Long, myarr, el
    naam = Application.InputBox("welk naam zoek je", "Zoeken", "hier ingeven")
    myarr = Array("Begane grond", "Eerste verdieping", "Tweede verdieping", "Derde verdieping")
    For Each el In myarr
        With Sheets(el)
            With .Columns(1)
                .Range("A1:A6,C1:C6").Interior.Color = 15773696
                .Range("B1:B6").Interior.Color = 65535
            End With
            Set c = .Columns(2).Find(naam, , , 1)
            If Not c Is Nothing Then
                eersteadres = c.Address
                y = y + 1
                Do
                    c.Offset(, -1).Resize(, 3).Interior.Color = vbGreen
                    Set c = .Columns(2).FindNext(c)
                    Application.Goto c
                Loop While Not c Is Nothing And c.Address <> eersteadres
            End If
        End With
    Next el
    If y = 0 Then MsgBox "niet gevonden"
End Sub
 
  • Leuk
Waarderingen: HSV
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan