VBA opslaan aan- en uitzetten

Status
Niet open voor verdere reacties.

bobelsenburg

Gebruiker
Lid geworden
10 sep 2021
Berichten
10
Goedemorgen,

Ik heb een vraag over het aan- en uitzetten van opslaan. Het document waar het om gaat mag enkel door specifieke gebruikers worden opgeslagen op ieder gewenst moment. Alle overige gebruikers kunnen enkel opslaan als zij een formulier submitten. Dit gebeurt via een macro FormNewEntrySubmit (er worden daarin nog wat andere zaken gedaan, bijvoorbeeld de data op de volgende nieuwe regel die beschikbaar is plaatsen, dat werkt allemaal al maar voor de volledigheid heb ik even de hele macro weergegeven).

PHP:
Sub FormNewEntrySubmit()
'
' FormNewEntrySubmit Macro
 
 
    Sheets("Form new entry").Select
    Sheets("Form MACRO").Visible = True
    Sheets("Approval").Select
    Nr = Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).Row
    Sheets("Form MACRO").Select
    Range("A2:Q2").Copy
    Sheets("Approval").Select
    Range("A" & Nr).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Sheets("Form MACRO").Select
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("Form new entry").Select
    ActiveWorkbook.Save
 
 
End If

Daarnaast heb ik onderstaande Private Sub in ThisWorkbook om ervoor te zorgen dat alleen de gespecificeerde users het originele bestand kunnen opslaan.

PHP:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 
a = Application.UserName
If a <> "User 1" And a <> "User 2" And a <> "User 3" And a <> "User 4" Then
    MsgBox "Saving not allowed." & vbCr & vbCr & "Submitting a form saves the input."
    Cancel = True
End If
 
End Sub

Wat ik dus graag wil, is dat op het moment dat iemand op Submit drukt, de macro tijdelijk opslaan toestaat, aan het eind van die macro (dus wanneer het formulier op de volgende lege regel is geplaatst, zie de macro FormNewEntrySubmit). Ik zal hetzelfde toepassen op een andere macro die het formulier leegt, maar als ik weet hoe ik bovenstaande moet oplossen, dan kan ik dat waarschijnlijk ook gemakkelijk toevoegen aan de Clear-macro.

Kan iemand mij hiermee helpen?
Alvast veel dank!
 
Voor het kopiëren is dit voldoende:

Code:
Sub VenA()
  Sheets("Approval").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 17) = Sheets("Form MACRO").Range("A2:Q2").Value
End Sub

Wat verder de bedoeling is, is mij niet echt duidelijk.
 
Dank voor je reactie. De bedoeling staat helemaal onderaan het bericht: ik wil dat enkel bepaalde geselecteerde users het document kunnen opslaan. De genoemde PrivateSub regelt dat. Het moet echter voor alle (andere) users mogelijk zijn om de macro FormNewEntrySubmit uit te voeren. In die macro wordt het document opgeslagen, maar dat kan dus alleen als het verbod op opslaan even wordt opgeheven en aan het eind van de macro weer wordt ingesteld. Zo kan dus geen van de andere niet geselecteerde gebruikers uit zichzelf opslaan, maar enkel door de macro te gebruiken. Dus samengevat is de vraag: hoe sla ik in het begin van die macro het opslaan toe en neem ik die mogelijkheid weer weg aan het eind van de macro?
 
Laatst bewerkt door een moderator:
Zet dit in een Module:
Code:
Public InFormNewEntrySubmit As Boolean

En vervolgens:
Code:
Sub FormNewEntrySubmit()
'
' FormNewEntrySubmit Macro
 
    InFormNewEntrySubmit = True
    Sheets("Form new entry").Select
    Sheets("Form MACRO").Visible = True
    Sheets("Approval").Select
    Nr = Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).Row
    Sheets("Form MACRO").Select
    Range("A2:Q2").Copy
    Sheets("Approval").Select
    Range("A" & Nr).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Sheets("Form MACRO").Select
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("Form new entry").Select
    
[COLOR="#FF0000"]    InFormNewEntrySubmit = True
[/COLOR]    ActiveWorkbook.Save
[COLOR="#FF0000"]    InFormNewEntrySubmit = False
[/COLOR]End If
Of de code van VenA voor het kopiëren uiteraard.

En:
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 [COLOR="#FF0000"]   If InFormNewEntrySubmit Then Exit Sub
 [/COLOR]   
    a = Application.UserName
    If a <> "User 1" And a <> "User 2" And a <> "User 3" And a <> "User 4" Then
        MsgBox "Saving not allowed." & vbCr & vbCr & "Submitting a form saves the input."
        Cancel = True
    End If
 End Sub
 
Laatst bewerkt:
Gebruik niet de Quote knop als je direct op het voorgaande bericht reageert.
 
onnodige quotes verwijderd.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan