Actie in macro niet uitvoeren indien aangeroepen door andere macro

Status
Niet open voor verdere reacties.

Joete

Gebruiker
Lid geworden
19 sep 2008
Berichten
87
Ja, het klinkt ingewikkeld, maar dat valt eigenlijk best wel mee, het idee tenminste...de uitvoering kom ik helaas niet uit.

Ik laat een macro lopen wanneer mijn Excel bestand geopend wordt. Deze controleert wat de opslaglocatie is, indien dit een bepaalde map is, dan betreft het een sjabloon en wil ik op voorhand alle info die iemand misschien in het bestand heeft laten staan verwijderen. Dit doe ik dmv het aanroepen van de macro die deze info uit de juiste cellen verwijderd. Werkt perfect.
Code:
Private Sub Workbook_Open()
    ' meetstaten legen indien het bestand op de server staat
    If Application.ActiveWorkbook.Path = "...padjenaarhetbestand..." Then
        Call Alle_Meetstaten_Legen
    End If
End Sub

De macro "Alle_Meetstaten_Legen" wil ik ook op een andere manier functioneel hebben, zodat de gebruiker zelf ook de data, indien verkeerd geimporteerd of update van de data, kan verwijderen. Dit werkt ook meer dan prima.
Code:
Sub Alle_Meetstaten_Legen()
    Dim WS As Worksheet
    Dim regel As Long
    Dim teller As Integer
    teller = 0
    
    For Each WS In ActiveWorkbook.Worksheets
        ' Filtergebied opzoeken
        Dim obj As ListObject
        Dim Tabel As String
        For Each obj In WS.ListObjects
            Tabel = obj.Name
            If WS.ListObjects(Tabel).AutoFilter.FilterMode = True Then
                ' Actieve filter uitschakelen
                WS.ListObjects(Tabel).AutoFilter.ShowAllData
            End If
            ' Inhoud in filtergebied wissen
            WS.ListObjects(Tabel).DataBodyRange.ClearContents
            Exit For
        Next
        teller = teller + 1
    Next WS
    Sheets("meetstaat_instructie").Range("F2:F7").ClearContents
    
    ' Melding hoeveel geleegd is
    MsgBox "Totaal " & teller & " meetstaten en algemene projectgegevens leeg gemaakt", vbInformation + vbOKOnly, "Meetstaten geleegd"
End Sub

Nu zit ik met het laatste stukje code:
Code:
MsgBox "Totaal " & teller & " meetstaten en algemene projectgegevens leeg gemaakt", vbInformation + vbOKOnly, "Meetstaten geleegd"
Deze wil ik WEL weergeven indien de gebruiker de macro zelf start, maar NIET weergeven indien de macro aangeroepen wordt vanuit de "Workbook_Open()"...
Ben al bezig geweest met variabelen en globals, maar kan het nog niet voor elkaar krijgen. Iemand hier een oplossing voor?
 
Als volgt. Zie rode regels.
In een module:
Public VanuitWorkbook_Open As Boolean

Code:
Private Sub Workbook_Open()
    ' meetstaten legen indien het bestand op de server staat
    If Application.ActiveWorkbook.Path = "...padjenaarhetbestand..." Then
        [COLOR="#FF0000"]VanuitWorkbook_Open = True[/COLOR]
        Call Alle_Meetstaten_Legen
        [COLOR="#FF0000"]VanuitWorkbook_Open = False[/COLOR]
    End If
End Sub

Code:
Sub Alle_Meetstaten_Legen()
    Dim WS As Worksheet
    Dim regel As Long
    Dim teller As Integer
    teller = 0
    
    For Each WS In ActiveWorkbook.Worksheets
        ' Filtergebied opzoeken
        Dim obj As ListObject
        Dim Tabel As String
        For Each obj In WS.ListObjects
            Tabel = obj.Name
            If WS.ListObjects(Tabel).AutoFilter.FilterMode = True Then
                ' Actieve filter uitschakelen
                WS.ListObjects(Tabel).AutoFilter.ShowAllData
            End If
            ' Inhoud in filtergebied wissen
            WS.ListObjects(Tabel).DataBodyRange.ClearContents
            Exit For
        Next
        teller = teller + 1
    Next WS
    Sheets("meetstaat_instructie").Range("F2:F7").ClearContents
    
    [COLOR="#FF0000"]If Not VanuitWorkbook_Open Then[/COLOR]
        ' Melding hoeveel geleegd is
        MsgBox "Totaal " & teller & " meetstaten en algemene projectgegevens leeg gemaakt", vbInformation + vbOKOnly, "Meetstaten geleegd"
    [COLOR="#FF0000"]EndIf[/COLOR]
End Sub

Of met een Optional parameter voor de Sub Alle_Meetstaten_Legen()
 
Laatst bewerkt:
Super! Thanks!

Wat ik DENK IK verkeerd deed was de public aanmaken in ThisWorkbook ipv in een module...nu werkt het wel.

Nogmaals dank!
 
Als je een Optionele parameter gebruikt heb je die variabele niet nodig:
Code:
Private Sub Workbook_Open()
    ' meetstaten legen indien het bestand op de server staat
    If Application.ActiveWorkbook.Path = "...padjenaarhetbestand..." Then
        Call Alle_Meetstaten_Legen [COLOR="#FF0000"](True)[/COLOR]
    End If
End Sub

Code:
Sub Alle_Meetstaten_Legen([COLOR="#FF0000"]Optional Msg As Boolean[/COLOR])
    Dim WS As Worksheet
    Dim regel As Long
    Dim teller As Integer
    teller = 0
    
    For Each WS In ActiveWorkbook.Worksheets
        ' Filtergebied opzoeken
        Dim obj As ListObject
        Dim Tabel As String
        For Each obj In WS.ListObjects
            Tabel = obj.Name
            If WS.ListObjects(Tabel).AutoFilter.FilterMode = True Then
                ' Actieve filter uitschakelen
                WS.ListObjects(Tabel).AutoFilter.ShowAllData
            End If
            ' Inhoud in filtergebied wissen
            WS.ListObjects(Tabel).DataBodyRange.ClearContents
            Exit For
        Next
        teller = teller + 1
    Next WS
    Sheets("meetstaat_instructie").Range("F2:F7").ClearContents
    
    [COLOR="#FF0000"]If Not Msg Then[/COLOR]
        ' Melding hoeveel geleegd is
        MsgBox "Totaal " & teller & " meetstaten en algemene projectgegevens leeg gemaakt", vbInformation + vbOKOnly, "Meetstaten geleegd"
    [COLOR="#FF0000"]EndIf[/COLOR]
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan