• 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.

BeforeSave Naam controle

Status
Niet open voor verdere reacties.

vaneijk

Gebruiker
Lid geworden
31 mrt 2017
Berichten
152
Beste helpers van het forum,

Nu wil ik een 'stop' inbouwen voor het uitvoeren voor andere macro's onder het Workbook.BeforeSave-event. Ik zou willen dat als de gebruiker van het document via het standaard menu, bestand en opslaan als, dat het document gaat controleren of de opgegeven naam voorkomt in een bepaalde database. Nu kom ik er alleen niet helemaal uit hoe ik de opgegeven naam kan gebruiken voor de gehele controle in de database. Waarschijnlijk een simpel iets, maar ik kan het niet vinden.

Mvg,
 
Laatst bewerkt:
Nu wil ik weten waar het over gaat. Oh ja we hebben allemaal het bestandje in bezit waar het over gaat?
 
@VenA, Het gaat niet zo specifiek over het bestand wat ik probeer te maken, misschien heb ik niet goed of vreemd uitgelegd wat ik bedoel.

Ik wil zoiets als onderstaand voorbeeld:
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI = True Then
     ThisWbName = Thisworkbook.Name
     NewSaveName = ''de nieuwe opgegeven naam bij 'opslaan als'
     Check_Db ThisWbName, NewSaveName
end if
end sub
Moment dat je excel opent en een nieuw bestand maakt of een ander bestand opent, en je gaat dat bestand via het standaard menu van excel gaat 'opslaan als', dan krijg je het explorer menu van waar je wilt opslaan, onder welke naam en wat voor bestandstype, hoe kan ik die opgegeven bestandsnaam oproepen ?
 
In onderstaande afbeelding zou ik dus graag willen weten hoe ik de 'Nieuwe Filename' en het type bestand '(*.xlsm)' zou kunnen aanroepen onder het Workbook_BeforeSave voorbeeld in #3

NewSaveName ='Nieuwe Filename' & ".xlsm"

VbSaveAs.jpg
 
Zie onderstaande foto:

Welke database ik moet controleren, dat maakt denk ik even weinig uit, dat staat allemaal in een access bestand op de server en dat weet ik wel te benaderen en te controleren. Als ik in onderstaand voorbeeld punt 3, 4, en 5 weet te bepalen dan kom ik er wel weer uit.
Ik ga het opnieuw proberen uit te leggen.
In de excel bestand die wij gebruiken staat het lint niet verborgen en kan de gebruiker in het foto voorbeeld bij 1. op bestand drukken en bij 2. opslaan als. Ik zou alleen willen begrijpen hoe ik onder Workbook_BeforeSave de data van 3, 4, en 5 kan defineren zodat ik iets kan maken als onderstaand:

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI = True Then
     ''( in foto voorbeeld )
     3 = "C:\Users\Desktop\"
     4 = "Nieuwe bestandsnaam"
     5 = ".xlsm"
     SavePath = 3
     NewSaveName = 4 & 5
     Check_Db  NewSaveName ''  <==== Check_Db is een macro waarmee ik de access database op de server benader en de zoekroutine in laat lopen
     if Fnd_db = true then 
         msgbox "De opgegeven bestandsnaam bestaat al in de database, graag andere naam kiezen"
         ''Niet opslaan is dan dus de bedoeling
         exit sub
     end if
end if
end sub

VbSaveAs.jpg
 
Het is nog steeds niet duidelijk. Als je een unieke naam wil hebben dan gebruik je format(now,"yyyymmdd hhmmss") in de bestandsnaam.
 
Ik zou b.v kunnen maken:

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI = True Then
MsgBox "Deze manier van opslaan is uitgeschakeld, graag 'opslaan als' via het menu van werkblad 1", vbCritical
Cancel = True
end if

en dan op werkblad 1 een knop met onderstaande code en laten zoeken in mijn database:
Code:
Sub Opslaan_Als_Op_Werkblad1()
NamePath = Application.GetSaveAsFilename(filefilter:="Excel-werkmap met macro's(*.xlsm), *.xlsm")
''En dan kan ik in de database laten zoeken op bestandsnaam, dit heb ik dan gedefineerd alles wordt namelijk op een vaste locatie opgeslagen
Check_Db NamePath 
''en de rest van de macro
end sub

maar dat vind ik een omweg, ik hoopte: dat als de gebruiker het bestand opslaat via bestand\opslaan als ik ook die gedefineerde naam kon gebruiken
 
Dat kan niet zonder eerst het bestand te laten opslaan, want die naam is pas bekend NADAT de gebruiker heeft opgeslagen, maar dan is de code in _BeforeSave al uitgewerkt. Wat wel kan:

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI = True Then
Application.Ontime now(), "AfterSave"
end if
En dan in een normale module:
Code:
Sub AfterSave()
Check_Db ThisWorkbook.FullName
End Sub
Nadeel is dat je bestand dan al is opgeslagen en je dus geen controle hebt over naam en lokatie.
 
@jkpieterse, Bedankt voor uw reactie. Ik weet denk ik wat mij nu te doen staat.
@VenA ook nog bedankt voor uw reacties en het proberen te begrijpen van mijn probleem
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan