Help!

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

Hulp bij posten

Recente topics

Auteur Topic: VBA tweede bestand automatisch mee sluiten bij afsluiten eerste bestand.  (gelezen 2904 keer)

0 leden en 1 gast bekijken dit topic.

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: VBA tweede bestand automatisch mee sluiten bij afsluiten eerste bestand.
« Reactie #30 Gepost op: 11 december 2021, 16:30:03 »
*update*

Zoals verwacht ben ik alweer op een hindernisje gestoten....  :-[

Ik heb dus meerdere (hulp) bestanden waarvoor ik via Public variabelen gedeclareerd heb en vervolgens in een sub deze variabelen toegewezen heb aan de betreffende bestanden. Dit doet over het algemeen goed zijn werk maar nu zit ik vast met het volgende.

Ik heb een aantal subs waarbij adhv een bepaalde waarde een aantal variabelen wijzigen, incl de bestanden.
Hoe (in welke structuur) kan ik in mijn Select Case bij elke mogelijke waarde het juiste bestand plaatsen adhv de variabele die aan dat bestand werd toegewezen zodat dan in de verdere code het juiste bestand wordt gekozen via mijn tijdelijke variabele?.
Ik had hier aanvankelijk dus een tijdelijke variabele voor gemaakt waarbij ik deze bij elke Case aan een ander bestand koppelde maar
dat werkt op geen enkele manier.... Ik blijf alsmaar foutmeldingen krijgen.
Ik doe dus iets verkeerd maar heb totaal geen idee wat....

Het is lastig om het bestand aan te hangen gezien het, via de code, een samenhangend geheel is van 10 bestanden....

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: VBA tweede bestand automatisch mee sluiten bij afsluiten eerste bestand.
« Reactie #31 Gepost op: 11 december 2021, 18:21:53 »
Hallo BlackDevil,

Oei, dan moeten we ervoor vrezen dat we een stapje achteruit moeten zetten, maar rampzalig hoeft het niet te zijn  ;)
In "Workbook_Open" mag je het laten zoals in vorig bericht.

De initialisatie-sub kan er dan beter zo uitzien:
Public wb_1, wb_2, wb_3, tmp_wb As Workbook

Sub werkboeken_initialisatie()

Workbooks.Open (ThisWorkbook.Path & "\bestand_1.xlsx")
Workbooks.Open (ThisWorkbook.Path & "\bestand_2.xlsx")
Workbooks.Open (ThisWorkbook.Path & "\bestand_3.xlsx")
Set wb_1 = Workbooks("bestand_1.xlsx")
Set wb_2 = Workbooks("bestand_2.xlsx")
Set wb_3 = Workbooks("bestand_3.xlsx")
ThisWorkbook.Activate

End Sub

En in die andere sub(s) zou er bv. zoiets kunnen staan:
Sub werkboek_selectie()

werkboek = wb_2.Name '(als voorbeeld)
Select Case werkboek
    Case wb_1.Name: Set tmp_wb = wb_1
    Case wb_2.Name: Set tmp_wb = wb_2
    Case wb_3.Name: Set tmp_wb = wb_3
End Select

End Sub

Ik heb het niet kunnen testen, maar redelijke kans dat het lukt. Laat maar weten.

Mvg,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: VBA tweede bestand automatisch mee sluiten bij afsluiten eerste bestand.
« Reactie #32 Gepost op: 12 december 2021, 07:28:39 »
Goedemorgen MollyVH,

Bedankt voor je aangereikte hulp, ik ga deze onmiddellijk uittesten  :thumbsup: _/-\o_

Mijn  oorspronkelijke Select Case ziet er eigenlijk zo uit (sorry, had dit in mijn vorig bericht duidelijker moeten maken) :
Select Case reg
  Case "geboorten"
    Set bestand = wb_geb
    reskol = 6
    eindkol = 14
  Case "huwelijken"
    Set bestand = wb_huw
    reskol = 5
    eindkol = 20
  Case "overlijdens"
    Set bestand = wb_ovl
    reskol = 4
    eindkol = 16
End Select
With bestand.Sheets("idx")
 'hier de verdere code
End With

Als ik jouw codeblokje bekijk dan zou ik eigenlijk (denk ik) enkel in de initialisatie-sub een aanpassing moeten maken?

Ik zal nu met de onderdelen uit jouw voorbeeld wat puzzelen en testen en ik laat nog weten of en hoe het al dan niet lukt.

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: VBA tweede bestand automatisch mee sluiten bij afsluiten eerste bestand.
« Reactie #33 Gepost op: 12 december 2021, 10:01:03 »
*update*

voorlopig heb ik mijn foutmelding mbt de select case problematiek kunnen wegwerken (hier kom ik later nog op terug),
maar nu krijg ik verderop in mijn code een foutmelding bij een aangeroepte sub uit een andere module.

Dit is de basis-sub :
With bestand.Sheets("idx")
    rijen = .Cells(Rows.Count, 1).End(xlUp).Row
    For bron = 2 To rijen
    If .Cells(bron, reskol + 1) = "" Then
      arIdx_tmp = .Range("A" & bron & ":" & kol & bron)
      '----- tijdelijke array maken voor conversies
      arConv = arIdx_tmp
      '----- converteren van de aktenamen naar stamnamen
      For x = 9 To fneinde Step 2
        fnaam = arConv(1, x)
        fnaamvarianten fnaam, varfnaam '----- procedure zie mod_xtrnsubs
        arConv(1, x) = varfnaam
      Next x
      '----- converteren van de aktevoornamen naar de latijnse vorm
      For y = 10 To vneinde Step 2
        tekst = arConv(1, y)
        vnaam = WorksheetFunction.Trim(tekst)
        vnaamvarianten vnaam, varvnaam '----- procedure zie mod_xtrnsubs
        arConv(1, y) = varvnaam
      Next y
      '----- arConv wegschrijven naar bestand
      With bestand.Sheets("conv")
        rij = .Cells(Rows.Count, 1).End(xlUp).Row + 1
        .Cells(rij, 1).Resize(, reskol) = arConv
        .Columns("A:Z").EntireColumn.AutoFit
      End With
      .Cells(bron, reskol + 1) = "ok"
    End If
    Next bron
  End With

en dit is de aangeroepen sub die in het lijntje "With ..." een foutmelding geeft (object vereist)
Sub fnaamvarianten(fnaam, varfnaam)
  '----- aktenamen converteren naar stamnamen
  With wb_namen.Sheets("fn-var").Rows("1:150")
    On Error Resume Next
    d = ""
    d = .Find(fnaam, LookIn:=xlValues, LookAt:=xlWhole).Column
    fnaam = .Cells(1, d)
  End With
  varfnaam = fnaam
End Sub

Waar doe ik iets verkeerd?

groetjes,
BlackDevil

*edit*
Heb de foutmelding weg gekregen door bovenaan elke basis-sub de initialisatie-sub aan te roepen.
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: VBA tweede bestand automatisch mee sluiten bij afsluiten eerste bestand.
« Reactie #34 Gepost op: 12 december 2021, 13:04:59 »
*brainstorm-momentje*

Omdat ik wil bijleren (en ook nieuwsgierig ben ;D ) probeer Ik de logica uit te zoeken waarom ik de ene keer WEL en de andere keer NIET de initialisatie-sub eerst opnieuw moet aanroepen. Ik heb in mijn poging hiervoor een klein structuur-schema gemaakt maar ik zie niet meteen waar het verschil schuilt.

voor een gemakkelijke leesbaarheid :

“ok” = wanneer het NIET noodzakelijk is de initialisatie-sub eerst (opnieuw) aan te roepen
“niet ok” = wanneer het WEL noodzakelijk is de initialisatie-sub eerst (opnieuw) aan te roepen
ws = werkblad
UF = UserForm
mod_****  = module met één sub
mod_extrasubs = module met meerdere subs die meermaals aangeroepen worden



Schema :

Hoofdbestand -> ws_start -> UF_start -> mod_xtrasubs = “ok”
Hoofdbestand -> ws_start -> UF_start -> UF_indexatie -> mod_verwerk -> mod_xtrasubs = “ok”

Hoofdbestand -> ws_start -> UF_convert -> mod_convert -> mod_xtrasubs = “niet ok”
Hoofdbestand -> ws_start -> UF_preptfl -> mod_preptfl -> mod_xtrasubs = “niet ok”
Hoofdbestand -> ws_lijsten -> mod_lijsten -> mod_xtrasubs = “niet ok”

Er zal wel een logische reden/oorzaak zijn maar wegens mijn beperkte kennis zie ik ze gewoonweg niet :-[


groetjes,
BlackDevil

*edit*
heb de logica erachter gevonden  :thumbsup:
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: VBA tweede bestand automatisch mee sluiten bij afsluiten eerste bestand.
« Reactie #35 Gepost op: 13 december 2021, 16:44:40 »
Hallo BlackDevil,

Ik merk dat je gisteren vooral overleg met jezelf hebt gepleegd  ;D
Toen ik nu nog een kijkje kwam nemen viel me eerst en vooral de 'edit' uit je laatste post op, maar ik heb toch nog eens de drie voorgaande doorgenomen, helemaal volgen lukt me echter niet met de info die je verstrekt.
Met de methode die ik je voordien had bezorgd zou het in principe niet mogen dat je soms opnieuw moet initialiseren, dus ik denk dat daar een 'externe' reden voor bestaat die niet af te leiden valt uit je toegevoegde code.
Maar misschien is dat wel exact wat je ondertussen zelf gevonden had? Zoniet wil ik het wel nog verder bekijken.

Mvg,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: VBA tweede bestand automatisch mee sluiten bij afsluiten eerste bestand.
« Reactie #36 Gepost op: 13 december 2021, 20:13:45 »
goedenavond MollyVH,

Wel, ik denk de logica achter het eerder vermelde scenario gevonden te hebben omdat er, volgens wat ik heb kunnen zien, maar één verschil is tussen de keren dat er WEL en de keren dat er NIET opnieuw geïnitialiseerd moet worden.

De keren dat er NIET opnieuw geinitialiseerd moet worden was de bronlocatie (UF's) binnen het hoofdbestand en enkel de opzoek- en doellocatie in externe bestanden.
De keren dat er WEL opnieuw geïnitialiseerd moet worden zijn zowel de bron-, opzoek- als doellocatie in een extern bestand.

Dus zoals je vermeldde, een externe oorzaak die ik ondertussen dus gevonden heb  :thumbsup:

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

 


www.combell.com