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

VBA vraag: geopend bestand op achtergrond weer activeren

Status
Niet open voor verdere reacties.

Jouke89

Gebruiker
Lid geworden
21 sep 2011
Berichten
16
Beste Helpmij-ers,

Middels een Worksheet_Change wordt er een timer gestart, die na verloop van tijd het bestand opslaat.
Het probleem is dat als mensen in een ander excel-document werken, het actieve bestand wordt opgeslagen.

Mijn vraag is eigenlijk, hoe kan ik ervoor zorgen dat bij Worksheet_Change de naam van dat bestand wordt 'onthouden', zodat bij het aflopen van de timer eerst dat bestand wordt geselecteerd?

Ik hoop dat jullie me kunnen helpen!

Groeten
Jouke

(ps: gezien de hoeveelheid automatische subs bij het opstarten van het bestand, is het niet doenlijk een voorbeeld-bestand te posten)
 
I.p.v. ActiveWorkbook.Save de opdracht Workbooks("Naam").Save gebruiken?
 
Hoi Peter,

Dank voor je antwoord.

Dat zou inderdaad het makkelijkste zijn, zij het niet dat elk bestand anders heet. (voor elk personeelslid een andere naam)
Vandaar dat ik zelf dacht de bestandsnaam bij Private Sub Worksheet_Change te 'onthouden', omdat het dan uiteraard het actieve werkboek is.
Maar is de 'onthouden naam' dan te gebruiken in de sub die aangeroepen wordt na het aflopen van de timer?

Groet,
Jouke
 
@ jkpieterse, volgens mij kan dat niet werken omdat er een ander workbook actief is op dat moment. En er moet meer gebeuren dan alleen opslaan, er zit ook nog een actie in de sub (niet alleen opslaan dus).

Wat ik nu geprobeerd heb is:
in het blad:
Code:
Option Explicit
Public wb As String

Public Sub Worksheet_Change(ByVal Target As Range)

wb = ActiveWorkbook.Path & "\" & Sheets("settings").Range("B11")
Range("a1") = wb
sub1

End Sub

en in de module:
Code:
Option Explicit

Sub sub1()
Dim wb As String
Workbooks.Open wb
End Sub

Het probleem is dus dat als ik bovenstaande uitvoer, dat
Code:
Workbooks.Open wb
als resultaat geeft: wb=""
Wat dus betekent dat hij niet 'onthouden heeft wat wb is.

Iemand..?

Alvast bedankt,
Jouke
 
jouke,

heb je het al geprobeerd?

Activeworkbook.save zorgt dat het workbook dat actief is word opgeslagen
Thisworkbook.save zorgt dat het workbook waar de code in staat wordt opgeslagen.

dus thisworkbook zou juist wel moeten werken
 
Verander sub1 naar:

Code:
Sub sub1(wb As String)
Workbooks.Open wb
End Sub

en roep aan middels:
Code:
sub1 wb

NB: sub1 is niet een hele beste naam voor een routine :-)
 
O ja, als je variabelen declareren verplicht maakt (Extra, Opties) en bij de reeds gemaakte modules even bovenaan dit zet:
Code:
Option Explicit
dan voorkom je het soort logische fouten dat je had met die variabele wb.
 
Dank allen, het is gelukt!

Voor degenen die er wat aan hebben, ik heb in de sub ThisWorkbook.Activate geplaatst. Dat zorgt er inderdaad voor dat het juiste werkboek wordt geactiveerd, en vervolgens de acties gedaan worden.
Hoe simpel kan het zijn.
Dank ook voor de andere opties, dat komt vast een andere keer van pas. (en sub1 was maar een voorbeeldje :d)

Groet
Jouke
 
Het is in VBA hoogst zelden nodig om dingen te activeren (al doet de macro recorder dat wel continu). Het maakt je macro ook langzaam. Het is een kwestie van omschrijven zodat je altijd met het juiste object werkt in VBA, dus als je de werkmap met code wilt opslaan, dan gewoon ThisWorkbook.Save gebruiken en niet ActiveWorkbook.Save, want er kan nou eenmaal een ander bestand actief zijn dan het bestand met de code. Idem voor wat het actieve werkblad is e.d.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan