Opstarten van een Excel file

DutchOirs

Gebruiker
Lid geworden
30 sep 2009
Berichten
941
Ben bezig met overstap van excel 2003 naar excel 2019.
nu gebruik ik verschillende library's met opstarten onder Module.
Maar in Excel 2003 zijn dit andere dan in 2019.
Nu kan men je Excel versie opvragen.

Dacht slim te zijn en dit in ThisWorkBook / Workbook_open op te vragen.
Vervolgens te verwijzen in de module naar de keuze.
Maar begrijp inmiddels dat bij het opstarten excel eerst de module leest.

Hoe zou ik dit kunnen aanpakken?

Iemand een idee?

Already many thanks.

Dutch
 
Geen idee wat je precies bedoelt.
Zoiets?
 

Bijlagen

Ha die Edmoor,

Excelversie is in beidde op te vragen,

In 2003 is het Versie 11 en in 2019 is het 16

Maar in de module kan je geen sub aanmaken om een keuze te maken.
b.v.
If ExcelVersie = 11 then
load lib 2003
elseif ExcelVersie = 16 Then
load lib 2019
end if
 
Het zijn ook geen getallen maar strings.
Ik zou er dan zoiets van maken:
Code:
Private Sub Workbook_Open()
    Select Case Application.Version
        case "11.0": load lib 2003
        case "16.0": load lib 2019
    End Select
End Sub
 
Laatst bewerkt:
en dit kan ook onder een module?

Ga er vanuit dat de bibliotheken inlezen onder een module moet.

Dacht altijd dat bij het opstarten, hij eerst door de module(s) inleest en vervolgens ThisWorkbook.

Een Private sub module_Open() werkt dus niet

ga het proberen thanks
 
Laatst bewerkt:
Wel enige tijd bezig geweest, maar helaas loop tegen problemen op
Had onder Module het volgende neergezet:

Code:
 #If Versie = "16" Then         ' voor UserForm PDF maken Excel 2019
'    public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As LongPtr
'    public Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hWnd As LongPtr) As LongPtr
'    public Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwflags As Long, ByVal dwExtraInfo As Long)
 #Else                          ' voor UserForm PDF maken Excel 2003
   MsgBox "#22222"
    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
 '   Public Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
 #End If '
Heb onder 'Else' een msgbox gezet om te checken of hij er wel doorheen liep.
Helaas dit kan niet, het is buiten een procedure.

Maar hoe check ik dit nu?
 
Wellicht handig om ook de betreffende problemen er bij te vermelden.
Daarnaast is het geen "16" maar "16.0".
Controleren op een 64i bit office doe je zo:
Code:
#If VBA7 Then
 
is inderdaad 16.0, klopt edmoor, was het net aan het opzoeken

geeft foutmelding omdat ik een msgbox erbij had gezet om te checken of hij ook door de gewenste lus ging
 
#If is een compiler directive.
Daar kan je geen MsgBox in gebruiken.
 
Bijvoorbeeld dit in ThisWorkbook:
Code:
Private Sub Workbook_Open()
   #If VBA7 Then
      vBIT = 64
   #Else
      vBIT = 32
   #End If
   MsgBox "Office = " & vBIT & " Bit"
End Sub
 
Of
Code:
Sub Test()
    #If Win64 Then
        OfficeBitness = "64-bit"
    #Else
        OfficeBitness = "32-bit"
    #End If
    MsgBox OfficeBitness
End Sub
 
Goedemorgen,

Dit checken zou onder de module moeten gebeuren.
Daar het probleem zich daar voor doet.
Als ik opstart met de 2003 zijnde de 11.0 versie, moet hij onder de module bepaalde library's inladen,
Als ik opstart met de 2019 zijnde 16.0 versie, moet hij weer aangepaste library's laden.
Dus die switch welke versie moet zich afspelen onder de module.

Daar de library's daar geladen worden.
 
Je moet daarvoor niet op Office versie controleren maar of het Office 32- of 64-bit is:
Code:
 #If VBA7 Then         ' voor UserForm PDF maken Excel 2019
    Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As LongPtr
    Public Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hWnd As LongPtr) As LongPtr
    Public Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwflags As Long, ByVal dwExtraInfo As Long)
 #Else                 ' voor UserForm PDF maken Excel 2003
    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
    Public Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
 #End If
 
Heb het onderstaande staan, maar geeft foutmelding, zo gauw ik de haakjes weghaal

Code:
  #If VBA = 7 Then              ' voor UserForm PDF maken Excel 2019
'    public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As LongPtr
'    public Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hWnd As LongPtr) As LongPtr
'    public Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwflags As Long, ByVal dwExtraInfo As Long)
 #Else                          ' voor UserForm PDF maken Excel 2003
    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
 '   Public Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
 #End If '
Hij geeft de foutmelding dan [ptrSafe] verwacht Sub of Function
Start op in Windows 7
Dus da vraag ik me af of If VBA = 7 wel werkt.
 
Ik schreef ook niet :
Code:
#If VBA = 7 Then
 
Daarnaast kan je gewoon de code van #14 kopiëren.
 
thanks mensen,
edmoor, zoals #14 heb ik het, maar zo gauw ik de haakjes weghaal bij de 1e geeft ie foutmelding "verwacht Sub of Function.
Terwijl als ik opstart met 2019 dit geen probleem is

Code:
  #If VBA7 Then              ' voor UserForm PDF maken Excel 2019
    public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As LongPtr
'    public Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hWnd As LongPtr) As LongPtr
'    public Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwflags As Long, ByVal dwExtraInfo As Long)
 #Else                          ' voor UserForm PDF maken Excel 2003
    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
 '   Public Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
 #End If '
 
Dat doe je dus in Excel 2003?
Dat kan ik niet testen omdat ik die niet heb.

Daarnaast kan je die melding gewoon negeren.
Wel die enkele quotes verwijderen.

Edit:
Office 2003 blijk ik nog wel te hebben op een Windows 11 VM.
Geen probleem, alleen tijdens het wijzigen ergens in het rode gedeelte.
Dt mag je dus negeren.
1782811121251.webp
 
Laatst bewerkt:
Terug
Bovenaan Onderaan