Macro niet laten 'runnen'

Status
Niet open voor verdere reacties.

MEradus

Gebruiker
Lid geworden
25 nov 2012
Berichten
287
Hoi!

Ik ben druk bezig met een formulier voor een van de opdrachtgevers van mijn werk.
Dat is ook de reden dat ik geen voorbeeld bestand mee kan sturen.

Maar mijn vraag is als volgt

Zodra iemand in dit bestand op 'opslaan' (gewoon van Excel zelf) klikt, krijgen ze een melding dat dit niet kan en dat het bestand opgeslagen moet worden als.
Hier onder de code:

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI = False Then
    Cancel = True
    MsgBox "Controleer het bestand en gebruik de knop 'Opslaan en verzenden' op het tabblad 'deelnemers' a.u.b.", vbExclamation, "Opslaan als!"
End If
End Sub

Maar, op het moment dat ze dus op de knop in het tabblad klikken.... waar de volgende code onder zit.

Code:
Sub Knop4_klikken()
 Application.DisplayAlerts = False
 
 Dim x As String
 Dim s As String

s = "Vakantieplanning vanaf - "
x = InputBox("Voer hier de 1e datum van de vakantie in!")

ActiveWorkbook.SaveAs Filename:=s & x, FileFormat:=52

Dim Outlook_App As Object
Dim Outlook_Mail As Object

Set Outlook_App = CreateObject("Outlook.Application")
Set Outlook_Mail = Outlook_App.CreateItem(0)
On Error Resume Next
With Outlook_Mail
    .To = ""
    .CC = ""
    .Subject = "Vakantieplanning" & Range("A2").Value
    .Body = "Hierbij de vakantie planning."
    .Attachments.Add ActiveWorkbook.FullName
        'You can add other files also like this
        '.Attachments.Add ("C:\test.txt")
    .Display
End With
On Error GoTo 0

Set Outlook_Mail = Nothing
Set Outlook_App = Nothing
  
ActiveWorkbook.Close

Application.DisplayAlerts = True

MsgBox "Voor dat u het mailtje verstuurd, heeft u nog de mogelijkheid om," & vbCrLf & _
"een begeleidende tekst te noteren. En om de afzender in te voeren.", vbInformation, "Versturen"

End Sub

Wordt de 1e code ook geactiveerd en wordt het bestand niet (goed) opgeslagen.
Kan ik voorkomen dat bij het klikken op "knop 4" de macro "before_save" geactiveerd wordt?
Zo ja hoe...

Ik hoop dat mijn uitleg duidelijk genoeg is om dit zonder voorbeeld op te lossen!
 
Je kunt altijd een voorbeeldbestand maken.
 
Als de Workbook_BeforeSave routine aanwezig is zal deze ALTIJD worden aangeroepen bij het opslaan van het document. Wel kan je deze vroegtijdig verlaten op bijvoorbeeld deze manier:
Code:
Dim VoorOpslaan As Boolean

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If VoorOpslaan = False Then
    Exit Sub
End If

If SaveAsUI = False Then
    Cancel = True
    MsgBox "Controleer het bestand en gebruik de knop 'Opslaan en verzenden' op het tabblad 'deelnemers' a.u.b.", vbExclamation, "Opslaan als!"
End If
End Sub

En:
Code:
Sub Knop4_klikken()
 Application.DisplayAlerts = False
 
 Dim x As String
 Dim s As String

s = "Vakantieplanning vanaf - "
x = InputBox("Voer hier de 1e datum van de vakantie in!")

VoorOpslaan = False
ActiveWorkbook.SaveAs Filename:=s & x, FileFormat:=52
.
.
.

Je moet dan wel de variabele VoorOpslaan op True zetten bij een opslaan actie waar Workbook_BeforeSave niet moet worden uitgevoerd.
 
Laatst bewerkt:
Moet ik nog meer aanpassen?
Ik krijg nu namelijk bij het klikken op 'opslaan' geen msgbox te zien.
En als ik op de knop druk, wordt het bestand niet opgeslagen met de naam die invoer...
 
Je kan het natuurlijk in de BeforeSave naar wens aanpassen. Nu wordt de BeforeSave functie direct verlaten en gebeurd er niets meer van wat daar nog onder staat. Je vraag was om de BeforeSave functie NIET uit te voeren op een bepaald moment. Je moet dus ook even bepalen of de variabele VoorOpslaan de waarde True of False moet hebben. Hetzelfde geldt dan voor de variabele Cancel.

*Dit laatste klopte niet dus verwijderd*
 
Laatst bewerkt:
Mmm, gaat me iets boven de pet :)

Maar misschien heb ik het dan niet helemaal goed uitgelegd.
Als er op 'opslaan' (van excel zelf) geklikt wordt moet er een melding komen dat het bestand alleen opgeslagen mag worden als.
En als er op de knop geklikt wordt in het bestand, moet hij die macro negeren.

Weet niet of ik een andere optie mag voorstellen + vragen of dat ik er een nieuwe vraag voor moet openen.
Kan je ook ervoor zorgen dat als het bestand mijn application.username ziet, het bestand 'alleen lezen' uitzet en anders laat staan?"
Dan is alleen lezen een makkelijkere optie, toch?
 
Laatst bewerkt:
Wat ik voorstelde kan je er prima voor gebruiken. Maar wat bedoel je met "als het bestand mijn application.username ziet". Application.Username is er altijd.
 
Waarom niet

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    knop4=true
End Sub
 
Met application.username bedoelde ik te zeggen dat als hij mijn username ziet het bestand niet alleen lezen is. En anders wel.
Dat zou misschien ook nog een optie zijn, alleen weet ik niet hoe ik dat het beste kan doen.....

Ik heb je code nog een keer getest, maar krijg nu bij de 'knop' een foutmelding dat "Vooropslaan" ( Compileerfout: een variabele is gedefinieerd )


@snb, wat bedoel je met alleen knop4=True? Als vervanging voor "VoorOpslaan"?
 
Dan heb je dus kennelijk die globale variabele niet gedeclareerd.
En uiteraard kan je ook iets als: If Application.Username="MEradus" Then gebruiken.
 
Nee dat zal ik inderdaad niet gedaan hebben, maar waar kan um dat in zitten?
Ik heb de codes zoals jij ze geschreven had overgenomen, moet ik bij "knop4_klikken()" ook nog iets zetten?
 
De declaratie die je nodig hebt staat erbij in #4:
Dim VoorOpslaan As Boolean

Maar waarom heb je die dan niet gebruikt?
 
Dit had ik gedaan, deze staan in een Module

Code:
Dim VoorOpslaan As Boolean

Sub Knop4_klikken()


 Application.DisplayAlerts = False
 
 Dim x As String
 Dim s As String
 
s = "Vakantieplanning vanaf - "
x = InputBox("Voer hier de 1e datum van de vakantie in!")

VoorOpslaan = True
ActiveWorkbook.SaveAs Filename:=s & x, FileFormat:=52

en deze staat onder workbook
Code:
Dim VoorOpslaan As Boolean

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If VoorOpslaan = True Then
    Exit Sub
End If

If SaveAsUI = False Then
    Cancel = True
    MsgBox "Controleer het bestand en gebruik de knop 'Opslaan en verzenden' op het tabblad 'deelnemers' a.u.b.", vbExclamation, "Opslaan als!"
End If
End Sub

Maar als ik dan op de knop in het bestand druk, kan ik via de inputbox de naam van het bestand invoeren.
Maar zodra ik dan op ok druk, krijg ik alsnog de melding die ik alleen zou willen zien als ze via het 'floppy' willen opslaan.
Daarna wordt het bestand dus ook niet opgeslagen onder de naam die ingegeven wordt en dus ook niet zo verstuurd.

Dus ik doe vast ergens iets fout, alleen ik kan er niet achter komen waar.
Ik hoop dat je nog een oplossing hebt.
 
Dat zal inderdaad niet goed gaan zo. Verdiep je eens in de scope (bereik) van variabelen. Of plaats je document even.
 
Leg nog eens uit wanneer de melding WEL en wanneer deze NIET mag worden gegeven.
 
Als iemand het bestand wil opslaan via "Opslaan", Dan moet de melding komen dat het bestand opgeslagen moet via de knop.
Als men gelijk de knop gebruikt, moet de persoon geen melding krijgen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan