Probleem met bibliotheken 2013/2016

Status
Niet open voor verdere reacties.

reneemettrie

Terugkerende gebruiker
Lid geworden
1 aug 2006
Berichten
1.233
Ik heb destijds in 2010 een template met een macro gemaakt die probleemloos werkt in 2010 en 2013.
Nu heeft een collega van me die template geopend in 2016, en er enkele bestanden met gegevens van gemaakt en doorgegeven aan een andere collega die nooit 2016 heeft geïnstalleerd, hij werkt met 2013.
Bij het uitvoeren van die macro kwam de foutmelding dat de bibliotheek van 2016 mankeert. Heb hem dan gezegd die van 2015 aan te vinken en probleem was op het eerste zicht opgelost: macro werkte weer. Maar telkens hij nu een andere versie van dat bestand opent krijgt hij opnieuw die melding van de bibliotheken???
 
Dat klopt. Dat kun je eigenlijk alleen maar voorkomen door met Late Binding te werken. Dan kun je helaas geen gebruik meer maken van eigenschapnamen maar moet je daar enumeraties voor gebruiken. Maar alles blijft wel werken. Een voorbeeldje:

Early Binding
Code:
Dim dlgPicker As FileDialog
    Set dlgPicker = Application.FileDialog(msoFileDialogFilePicker)

Late Binding
Code:
Dim dlgPicker As Object
    Set dlgPicker = Application.FileDialog(3)
 
Is dat dezelfde macro die jij hanteert en vlekkloos loopt in 2010 en 2013 ?
 
Die macro werkt vlekkeloos in 2010-2013
Is dat een specifiek probleem met Office 2016?
Ik heb nog nooit met late binding gewerkt, vind dat zeer onhandig (ben ook geen programmeur)
Maar ik zie niet hoe ik dat moet toepassen op mijn macro? Er wordt niet gewerkt met Application.
Enige object variabelen zijn worksheets en ranges.

Option Explicit
Dim NrParticipants As Integer, i As Integer, DS As Worksheet, PS As Worksheet
'DS = data sheet, PS = participant sheet
Dim rn As Range, pn As Range
'rn=rijksregistersrsn, pn = pc nrs
Dim HT As String
'left header text


Sub OFOIFA()
Set DS = Sheets(2) 'sheet containing the national registries
Set PS = Sheets(3)

'Defining the header text
HT = Range("Test").Value & " - " & Range("Datum").Value & "Niveau " & Range("Niveau").Value

NrParticipants = DS.Range("a1").CurrentRegion.Rows.Count - 1
Set rn = DS.Range("a1").CurrentRegion.Columns(1)
Set pn = DS.Range("a1").CurrentRegion.Columns(2)
Application.ScreenUpdating = False
DS.Range("a1").CurrentRegion.Sort key1:=DS.Cells(1), Header:=xlYes

'Copy of the template sheet
For i = 1 To NrParticipants - 1
PS.Copy after:=PS
Next

'naming the sheets + defining the header
For i = 3 To ActiveWorkbook.Sheets.Count
With Sheets(i)
.Name = rn.Cells(i - 1)
.PageSetup.LeftHeader = HT & Chr(10) & rn.Cells(i - 1)
.PageSetup.CenterHeader = Chr(10) & Range("testcode").Value
.PageSetup.RightHeader = Chr(10) & "PC: " & pn.Cells(i - 1)
End With
Next

''Defining a name on each sheet
'For i = 3 To ActiveWorkbook.Sheets.Count
' ActiveWorkbook.Names.Add Name:=Sheets(i).Name, RefersTo:=Sheets(i).UsedRange
'Next

DS.Select

For i = 2 To NrParticipants + 1
DS.Hyperlinks.Add anchor:=Cells(i, 1), Address:="", _
SubAddress:=CStr(Cells(i, 1).Value) & "!A1"
Next
End Sub
 
Voegt jouw collega daar nog code aan toe ?
 
Voegt jouw collega daar nog code aan toe ?

Neen, helemaal niet. Het is al enkele jaren dezelfde code, bedoeld om een vragenblad van een examen te reproduceren, op basis van een lijst met rijksregisternummers.
 
Als je geen bibliotheken gebruikt in de macro's in het werkblad, hoef je ze ook niet aan te vinken. Heb je al gecontroleerd of er geen overbodige bibliotheken actief staan?
Overigens zou je na 10 jaar HelpMij toch wel moeten weten dat je code met de CODE knop moet opmaken :).
 
Maar nadat hij de macro heeft gehanteerd hoeft de macro bij de volgende collega toch niet meer gebruikt te worden ?
Als hij/zij het bestand opslaat als xlsx is er dan weinig aan de hand.
 
Maar nadat hij de macro heeft gehanteerd hoeft de macro bij de volgende collega toch niet meer gebruikt te worden ?
Als hij/zij het bestand opslaat als xlsx is er dan weinig aan de hand.

In de template wordt steeds een andere lijst met examenvragen en met met rijksregisternummers gekopieerd. Mijn collega's voor Franstaligen, ikzelf voor Nederlandstaligen. En DAARNA moet de macro worden uitgevoerd.
De collega die de vragen heeft ingevoerd heeft het bestand gewoon geopend in 2016 en geen macro uitgevoerd.
Maar met die bibliotheken aan te passen is het probleem opgelost, alleen snap ik niet dat dit bij elk bestand opnieuw moet gebeuren.
 
Laatst bewerkt:
probleem met bibliotheken

Heb nu het bestand (geopend in 2016 zonder macro uit te voeren) gekregen en bekeken in 2013.
(Mijn eigen kopie van die template die ik enkel in 2010 en 2013 gebruik geeft dus geen enkel probleem)

Als ik de macro uitvoer stopt de debugger op "Chr(10)" en geeft een melding "Kan het project of de bibliotheek niet vinden". Als ik "Chr(10)" vervang door bvb. "e" wordt de macro wél uitgevoerd.
Dan ga ik naar de verwijzingen. EXCEL 15 staat aangevinkt, "MS OFFICE 16 ontbreekt" eveneens.
Als ik dat vinkje van MS OFFICE weghaal werkt de macro gewoon met Chr(10).

Module verwijderen : Melding van ontbrekende Office 2016 bib. is weg. Daarna dezelfde module importeren vanuit een bestand dat nooit geopend werd in 2016: weer bij verwijzingen die melding van ontbrekende Office 2016 bib.

Als ik de macro kopieer naar personal.xlsb en van daaruit uitvoer: geen probleem.
 
Laatst bewerkt:
Ik heb chr(10) vervangen door VbNewline en het probleem is opgelost.
Raar (?) maar waar
 
Geldt dat ook voor vbLf ?

Het lijkt erop alsof in E 2016 de chr(10) anders wordt geïnterpreteerd dan in E 2013/2010.
Die 2016 interpretatie wordt dan blijkbaar opgeslagen bij het bestand, zodat bij opening in 2010/2013 niet de juiste interpretatie van de gewijzigde chr(10) gevonden kan worden.
Interessant om in E 2016 naar de ascii tabel te kijken.
 
Laatst bewerkt:
Je hebt onderscheid tussen een nieuwe regel, en een nieuwe alinea. Dat komt dus uit de tekstverwerker.
De regel maak je met vbLF, de alinea met vbCrLf. Daar zit dus een CarriageReturn bij. Die kun je ook maken met Chr(10) & Chr(13). Sommige routines hebben genoeg aan een LineFeed, sommige willen de volledige CarriageReturn.
 
Dat bedoelde ik niet.
Ik bedoel: waarom kan je voor lijnsprong zowel Chr(10) als VbLf gebruiken? Wat is het verschil tussen de twee laatste?
En voor nieuwe alinea Chr(13) of vbCrLf?
 
waarom kun je een auto aanduiden met auto, wagen of bolide ?
Iedere taal (ook VBA) heeft een geschiedenis.

net zoals :

range("A1")
[A1]
cells(1)
cells(1,1)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan