• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Code VBA selectie & wissen korter schrijven

Status
Niet open voor verdere reacties.

Marky76

Gebruiker
Lid geworden
26 okt 2002
Berichten
424
Beste,

In onderstaande code worden cellen in kolom B gewist en dit voor ieder werkblad.
Dus iedere keer selecteer ik een werkblad en dan wis ik een range in kolom B

Zou ik dit korter kunnen maken met "Application Union" of met "Arrays"?




Code:
Sub Wissen()
    
    
    If MsgBox("Weet u zeker dat u door wilt gaan?", vbYesNo + vbQuestion + vbDefaultButton2) = vbYes Then
        
    Sheets("OCTA").Activate
    Range("B4:B31").ClearContents
    
    Sheets("Fuel Fortis").Activate
    Range("B4:B31").ClearContents
    
    Sheets("PAT MAZ").Activate
    Range("B4:B33").ClearContents
    
    Sheets("COUVIN").Activate
    Range("B4:B31").ClearContents
    
    Sheets("OCTA").Activate
    Range("B4").Activate
    
           
   ' Application.StatusBar = False
        
    End If
'De eerste twee Set zijn een manier om te wissen en de derde is een andere manier manier.
End Sub


Hier wou ik het op een andere manier doen, dus met een lus, om daar ook mee te leren
werken, maar de deze doet het niet. Zie niet onmiddelijk wat ik fout heb gedaan.


Code:
Sub Wissen2()

Dim ws As Worksheets

For Each ws In Worksheets
 Range("B4:B31").Select
Next ws
Selection.ClearContents

End Sub


En dan nog een klein vraagje, omdat ik de code nog niet onder de knie heb kan ik sommige dingen niet goed uit elkaar houden.

Als ik een blad wil selecteren doe je Sheets("naam").activa, maar soms zie ik andere
codes Worksheets staan, wanneer wordt nu Sheets gebruikt en wanneer Worksheets,
daar ben ik nog vaak mee in de war.

Groeten, Mark
 

Bijlagen

  • Fortis Octa.zip
    11 KB · Weergaven: 29
De tweede zat in de richting


Code:
Sub Wissen2()

Dim ws As Worksheet
For Each ws In Worksheets
 ws.Range("B4:B31").ClearContents
Next ws

End Sub
Let op de ws voor Range
En zo veel als mogelijk Select, Activate en Selection vermijden.


Mvg

Piet
 
Sheets("PAT MAZ").Activate
Range("B4:B33").ClearContents

is dat een foutje in je beginpost, maw moet dat ook range B4 tot B31 zijn zoals op de andere tabbladen?
1. Indien nee, moet je dit anders verwerken in je loop doorheen de tabbladen.
2. Staan er nog andere tabbladen in je bestand waar de range B1:B31 NIET verwijderd mag worden? Zo ja, dan moet je in je loop de naam van je tabblad checken alvorens te verwijderen.
 
Finch,

Stel dat het tweede werkbald dan niet mag gewist worden, hoe bouw je dit dan in?

(Die ene range tot 33 is geen foutje, er ietsje meer te wissen.)

Groeten, Mark
 
Finch,

Stel dat het tweede werkbald dan niet mag gewist worden, hoe bouw je dit dan in?

(Die ene range tot 33 is geen foutje, er ietsje meer te wissen.)

Groeten, Mark

Tabblad niet wissen:

Binnen je loop doorheen de worksheets ga je dan afvangen of er op het desbetreffende blad mag gewist worden. Dat ofwel door een actie uit te voeren wanneer de naam niet in de lijst voorkomt, of omgekeerd, wanneer de naam wel in de lijst voorkomt.
Je kan die controle uitvoeren op de naam, de index of de vba naam van die worksheet.

vb.
Code:
for each ws in worksheets
[INDENT]If ws.name="test" then[/INDENT]
[INDENT][INDENT]***CODE***[/INDENT][/INDENT]
[INDENT]End If[/INDENT]
next

OF wanneer juist niet aan de sheetname moet worden voldaan

Code:
for each ws in worksheets
[INDENT]If ws.name<>"test" then[/INDENT]
[INDENT][INDENT]***CODE***[/INDENT][/INDENT]
[INDENT]End If[/INDENT]
next

Hieronder wat code om de sheetnaam, index en VBA naam te kennen.

Code:
Sub test()
Dim ws As Worksheet
Dim msg As String
msg = "Naam" & vbTab & "Index" & vbTab & "VBA naam" & vbCrLf & vbCrLf

For Each ws In Worksheets
    msg = msg & ws.Name
    msg = msg & vbTab & ws.Index
    msg = msg & vbTab & ws.CodeName & vbCrLf
Next
MsgBox msg, vbInformation + vbOKOnly, "Sheets in bestand"

End Sub

Een check op de VBA naam (ws.codename) is het veiligst omdat die naamgeving heb je meestal zelf onder controle, die van de tabnamen op de tabjes onderaan (ws.name) kan men wijzigen.

Die check kan je dan ook gebruiken om de afwijkende sheets qua te wissen bereik te filteren en de aangepaste bewerkingen op uitvoeren.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan