Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: workbook_BeforeClose(cancel As Boolean)  (gelezen 14747 keer)

0 leden en 1 gast bekijken dit topic.

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
workbook_BeforeClose(cancel As Boolean)
« Gepost op: 12 mei 2018, 22:15:43 »
Hoi Helpers en Oplossers,

Ik open een Excelbestand en met de opdracht: (ik heb het pad van het bestand voor de leesbaarheid maar even "Path" genoemd)

Private Sub workbook_open()
    Workbooks.Open Filename:="C:\Path\PDF als link.xlsm"
    Workbooks("facturen testpagina.xlsm").Sheets("2018").Activate
    Facturen.Show
End Sub

open ik een tweede bestand, activeer het eerste bestand en open een userform.

Wanneer ik klaar ben met het eerste bestand, waarbij het tweede bestand al dan niet gevoed is met data uit het eerste bestand klik ik op de "X" in de linkerbovenhoek en dan moet mijn "workbook_beforeclose" zijn ding doen maar geeft een foutmelding nml:

Citaat
Fout 9 tijdens uitvoering:

Het subscript valt buiten het bereik

de code die ik gebruik is
Private Sub workbook_BeforeClose(cancel As Boolean)

    Workbooks("PDF als link.xlsm").Activate
    ActiveWorkbook.Close savechanges:=xlYes, Filename:="C:\Path\PDF als link.xlsm"
   
    Workbooks("facturen testpagina.xlsm").Activate
    ActiveWorkbook.Close savechanges:=xlYes, Filename:="C:\Path\facturen testpagina.xlsm"

End Sub

De eerste regel in deze code wordt dan geel. overigens wordt het bestand "PDF als link.xlsm" wel opgeslagen en afgesloten. druk ik dan vervolgens op "beëindigen" bij de foutmelding dan slaat hij ook het andere bestand op en sluit deze vervolgens ook af.

Wie kan mij vertellen hoe ik deze foutmelding kan voorkomen? Ik zelf denk door een check of het bewuste bestand nog open staat of al opgeslagen is maar ik weet even niet hoe ;) iets als

    If Workbooks("PDF als link.xlsm") = True Then

werkt niet, maar ik weet dus niet wat er ipv "True" moet komen...

Alvast weer dank voor jullie geduld ;)
Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
Re: workbook_BeforeClose(cancel As Boolean)
« Reactie #1 Gepost op: 13 mei 2018, 07:56:15 »
Voor het eerste gedeelte van mijn vraag heb ik zojuist de oplossing uitgevogeld

Private Sub workbook_BeforeClose(cancel As Boolean)
   
    If Not Workbooks("PDF als link.xlsm") Is Nothing Then
        Workbooks("PDF als link.xlsm").Activate
        ActiveWorkbook.Close savechanges:=xlYes, Filename:="C:\Path\PDF als link.xlsm"
    Else
        ActiveWorkbook.Close savechanges:=xlYes, Filename:="C:\Path\facturen testpagina.xlsm"
    End If
End Sub

het eerste bestand wordt nu netjes opgeslagen en gesloten, zonder enig dialoogvenster of ik veranderingen wil opslaan, echter het tweede bestand krijg ik dat dialoogvenster wel :( en dat wil ik nou juist niet...

Wie weet hoe ik kan voorkomen dat dit dialoogvenster verschijnt en het bestand dus opslaat en sluit zonder mijn tussenkomst?



Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

Offline Ex-lid

  • Oplosser
  • ****
  • Berichten: 670
  • Geslacht: Man
  • dit lid is verbannen
Re: workbook_BeforeClose(cancel As Boolean)
« Reactie #2 Gepost op: 13 mei 2018, 08:08:27 »
Dit lijkt mij voldoende.
Private Sub workbook_BeforeClose(cancel As Boolean)
Application.DisplayAlerts = False
    Workbooks("PDF als link.xlsm").Close savechanges:=xlYes, Filename:="C:\Path\PDF als link.xlsm"
    Workbooks("facturen testpagina.xlsm").Close savechanges:=xlYes, Filename:="C:\Path\facturen testpagina.xlsm"
End Sub

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
Re: workbook_BeforeClose(cancel As Boolean)
« Reactie #3 Gepost op: 13 mei 2018, 09:09:15 »
Dank voor je reactie Dotchiejack,

Maar helaas, dit genereert weer dezelfde fout 9 melding en het eerste te sluiten bestand dan geselecteerd in geel. druk ik op beëindigen, dan sluit alles wel netjes.
Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

Offline Ex-lid

  • Oplosser
  • ****
  • Berichten: 670
  • Geslacht: Man
  • dit lid is verbannen
Re: workbook_BeforeClose(cancel As Boolean)
« Reactie #4 Gepost op: 13 mei 2018, 09:37:41 »
En zo?
Private Sub workbook_BeforeClose(cancel As Boolean)
Application.DisplayAlerts = False
    If Not Workbooks("PDF als link.xlsm") Is Nothing Then
        Workbooks("PDF als link.xlsm").Close savechanges:=xlYes, Filename:="C:\Path\PDF als link.xlsm"
    Else
        ActiveWorkbook.Close savechanges:=xlYes, Filename:="C:\Path\facturen testpagina.xlsm"
    End If
End Sub

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
Re: workbook_BeforeClose(cancel As Boolean)
« Reactie #5 Gepost op: 13 mei 2018, 13:18:33 »
Dan krijg ik dus bij het laatste bestand weer het venster met de vraag of ik de wijzigingen wil opslaan.
Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

Offline Ex-lid

  • Oplosser
  • ****
  • Berichten: 670
  • Geslacht: Man
  • dit lid is verbannen
Re: workbook_BeforeClose(cancel As Boolean)
« Reactie #6 Gepost op: 13 mei 2018, 15:12:40 »
Misschien zo?
in Thisworkbook sectie van PDF als link.xlsm
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wb As Workbook
 Application.ScreenUpdating = False
    For Each wb In Workbooks
    wb.Close SaveChanges:=True
     Next wb
End Sub

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
Re: workbook_BeforeClose(cancel As Boolean)
« Reactie #7 Gepost op: 13 mei 2018, 19:59:18 »
Dan blijft de wijzigingenvraag verschijnen bij "facturen testpagina.xlsm"

Wanneer ik jouw code in "facturen testpagina.xlsm" plaats dan 'hangt' "PDF als link.xlsm" waarna ik eerst weer op de "X" moet drukken.


Ondertussen, bedacht ik mij terwijl ik dit type, test ik nog even verder en merk dat als ik afsluit vanuit "PDF als link.xlsm" alles wel goed wordt opgeslagen en afgesloten.

Als ik jouw code goed begrijp sluit deze in dezelfde volgorde van inladen?
Dan zou dus, om jouw code te laten werken, dit altijd in de laatst ingeladen wb moeten hebben waarna bij het afsluiten de volgorde wb1, wb2 enz wordt aangehouden.

Er is door jouw hulp een lichtje gaan branden in deze bovenkamer, waarvoor mijn dank :)
Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
Re: workbook_BeforeClose(cancel As Boolean)
« Reactie #8 Gepost op: 16 mei 2018, 09:30:03 »
Aanvullende vraag(je) ;)

Wanneer ik nu "facturen testpagina.xlsm" afsluit zou ik graag willen dat hij dit doet via "PDF als link.xlsm" zonder de onnodige vraag of ik de gegevens wil opslaan.

Helaas, denk ik, kan ik in de before_close sectie van "facturen testpagina.xlsm" geen code zetten want dat blokkeert en zorgt voor het WEL krijgen van de opslaan vraag. de eerste code die ik probeerde voorkwam dat hij kon opslaan

    MsgBox ("Sla alleen op via PDF als link.xlsm bestand."), vbExclamation, "VERBODEN"
    Cancel = True

wat mij vooraf ook wel logisch leek, maar nadat ik die testen via "PDF als link.xlsm", deze regels alsnog voorkwam dat dit bestand werd opgeslagen en gesloten.

    Workbooks("PDF als link.xlsm").Close

heeft dus tot effect dat de vraag komt of ik de veranderingen in "facturen testpagina.xlsm" wil opslaan.

Heeft iemand hier een oplossing voor, of moet ik gewoon telkens wakker genoeg zijn om via het juiste bestand af te sluiten?

Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.277
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: workbook_BeforeClose(cancel As Boolean)
« Reactie #9 Gepost op: 16 mei 2018, 22:55:58 »
Josc1965, waarom zou je dit opslaan willen afhandelen in het BeforeClose event? Dus elke keer als je "even je bestand bekijkt" zal deze procedure worden afgevuurd en het bestand nodeloos gaan opslaan. Lijkt mij niet de bedoeling toch?

Kan je je workbook met code ff hier plaatsen zodat de helpers zien wat jij ziet? Let er wel op dat je privé-gegevens even onherkenbaar maakt.
______________________________

Groet, Leo

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
Re: workbook_BeforeClose(cancel As Boolean)
« Reactie #10 Gepost op: 16 mei 2018, 23:10:46 »
Hoi RedHead,

Er wordt niet nodeloos opgeslagen, slechts wanneer de bestanden zijn gewijzigd, gebeurd dit. Op dit moment is dit nog in test bij mij en op zich werkt dat geheel naar tevredenheid, zie eerdere bijdrage van Dotchiejack, die code werkt perfect. Ik vroeg mij alleen af of het mogelijk was, wanneer ik vanuit het verkeerde bestand (nml niet het laatst geopende bestand) ga afsluiten, dat er dan toch hetzij een melding komt, hetzij een procedure in gang gezet kan worden dat er naar het laatst geopende bestand kan worden 'gesprongen' waarbij de afsluitprocedure in gang wordt gezet.

Ik ontdek in de afgelopen uren dat een bewerking in "workbook_beforeclose" in elk ander bestand dan het laatst geopende bestand de afsluit procedure frustreert, en begin te geloven dat ik moet berusten in het feit dat ik bij het afsluiten zelf erg moet opletten dat ik dit dus doe via het laatst geopende bestand.
Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.277
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: workbook_BeforeClose(cancel As Boolean)
« Reactie #11 Gepost op: 17 mei 2018, 11:49:11 »
Gebruik het BeforeSave event als je iets wilt doen na een aanpassing in je workbook....
______________________________

Groet, Leo

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
Re: workbook_BeforeClose(cancel As Boolean)
« Reactie #12 Gepost op: 17 mei 2018, 12:55:07 »
euh, ja maar het gaat in mijn vervolgvraag niet over het opslaan van een bestand, meer over dat het sluiten van de serie geopende bestanden gebeurd vanuit het juiste bestand, nml het laatst geopende bestand en hoe ik kan voorkomen dat ik vanuit elk ander geopende bestand kan afsluiten. Dat opslaan is al goed geregeld ;)
Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

 


www.combell.com