none
Office 2013: VBA findet DLL nicht RRS feed

  • Frage

  • Hallo!

    Ich habe einen unserer PC (Windows 8) von Office 2010 Home & Business auf Office 2013 umgestellt (jeweils 32 Bit). Nun findet VBA eine DLL nicht mehr die per Declare eingebunden wird.

    Declare Function Dichte15B Lib "C:\temp\astm54.dll" (ByVal dichte As Double, ByVal temp As Double, ByVal Spindel As Long) As Double

    Fehlermeldung: "Datei nicht gefunden: C:\temp\astm54.dll"

    Fehlernummer 48.

    Unter Office 2010 hat das noch problemlos funktioniert. Weiß jemand, woran das liegen könnte?

    Es spielt anscheinend keine Rolle, ob Windows 7, Windows 8 als Betriebssystem eingesetzt wird.

    Gruß Gerrit

    Donnerstag, 23. April 2015 10:15

Alle Antworten

  • Fehlermeldung: "Datei nicht gefunden: C:\temp\astm54.dll"

    Weiß jemand, woran das liegen könnte?

    Schon mal auf den Hilfeknopf geklickt wenn der Fehler kommt? ;-)

    Andreas.

    Fehler beim Laden einer DLL (Fehler 48)

    Siehe auch     Zusatzinfo

    Eine Dynamic Link Library (DLL) ist eine Bibliothek, die im Lib-Abschnitt einer Declare-Anweisung angegeben wird. Dieser Fehler hat die folgenden Ursachen und Lösungen:

    • Die Datei ist keine ausführbare DLL.

      Wenn die Datei eine Quelltextdatei ist, muß sie kompiliert und als ausführbare DLL gebunden werden.

    • Die Datei ist keine Microsoft Windows-DLL.

      Fordern Sie die entsprechende DLL für Microsoft Windows an.

    • Die Datei ist eine alte Microsoft Windows-DLL, die mit dem geschützten Modus von Microsoft Windows nicht kompatibel ist.

      Fordern Sie eine aktualisierte Version der DLL an.

    • Die DLL referenziert eine andere DLL, die nicht vorhanden ist.

      Fordern Sie die referenzierte DLL an, und stellen Sie sie der anderen DLL zur Verfügung.

    • Die DLL oder eine der referenzierten DLLs befindet sich nicht in dem Verzeichnis, das durch den Pfad angegebenen ist.

      Verschieben Sie die DLL in ein referenziertes Verzeichnis, oder tragen Sie das aktuelle Verzeichnis in den Pfad ein.

    Weitere Informationen erhalten Sie, wenn Sie das fragliche Element auswählen und F1 (unter Windows) oder HILFE (beim Macintosh) drücken.

    Donnerstag, 23. April 2015 12:57
  • Die Seite habe ich auch schon gefunden. Alle der oben genannten Punkte sind überprüft. Keiner davon hilft und an den Original-Quellcode komm ich nicht mehr ran.

    Die Datei funktioniert ja auf dem selben System, nur mit Office 2010. Unter Office 2013 funktioniert sie nicht mehr. Deswegen kann es wohl nicht am geschützten Modus liegen, oder?

    Gruß

    Gerrit

    Donnerstag, 23. April 2015 13:22
  • Die Datei funktioniert ja auf dem selben System, nur mit Office 2010. Unter Office 2013 funktioniert sie nicht mehr. Deswegen kann es wohl nicht am geschützten Modus liegen, oder?

    Nein, daran liegt es nicht... wenn Sie ansonsten mit 32-bit läuft sollte es gehen. Muss die DLL ggf. registriert werden? Schon probiert?

    https://support.microsoft.com/en-us/kb/249873/de

    Nur um sicherzugehen, was sagt dieses Makro unter Excel 2013?

    Sub DetectVBAEnvironment()
      'http://msdn.microsoft.com/en-us/library/gg264614.aspx
      Dim S  As String
      With Application.LanguageSettings
        S = _
          "Install " & .LanguageID(msoLanguageIDInstall) & vbCrLf & _
          "Interface " & .LanguageID(msoLanguageIDUI) & vbCrLf & _
          "Help " & .LanguageID(msoLanguageIDHelp) & vbCrLf
        #If VBA7 Then
          S = S & "VBA 7"
        #ElseIf VBA6 Then
          S = S & "VBA 6"
        #ElseIf VBA5 Then
          S = S & "VBA 5"
        #ElseIf Mac Then
          S = S & "VBA Mac"
        #Else
          S = S & "VBA unknown"
        #End If
        S = S & vbCrLf
        #If Win64 Then
          S = S & "Win 64"
        #ElseIf Win32 Then
          S = S & "Win 32"
        #ElseIf Win16 Then
          S = S & "Win 16"
        #Else
          S = S & "OS unknown"
        #End If
        Debug.Print S
        MsgBox S
      End With
    End Sub
    

    Wenn das nicht hilft, dann kuck mal in mein Profil, da findest Du meine Mailadresse und schick mir die DLL und die Exceldatei mal zu.

    Andreas.

    Donnerstag, 23. April 2015 13:53
  • Hier die Ausgabe:

    Install 1031
    Interface 1031
    Help 1031
    VBA 7
    Win 32

    Die DLL muss nicht registriert werden. Ich schick Dir die dll mal zu.

    Danke für die Hilfe!

    Donnerstag, 23. April 2015 14:04
  • Hallo Gerrit,

    ich hab mir das mal angeschaut...

    Sicher ist das die Meldung "Datei nicht gefunden" irreführend ist und nicht zutrifft. Wenn es die DLL als Datei nicht geben würde, dann würde der RTE 53 kommen und nicht RTE 48.

    Die DLL macht aber irgendwas im Hintergrund was wir nicht sehen, denn beim ersten Aufruf erzeugt sie eine MsgBox:

    Danach aber nicht mehr, also frage ich mich zuerst einmal woher die DLL das wissen will das sie schon mal aufgerufen wurde... Sie erzeugt weder einen Registry-Eintrag, noch einen Alternate Data Stream, also macht Sie irgendeine andere "Schweinerei".

    Es besteht also die Möglichkeit das es damit zusammenhängt, wie auch immer darauf haben wir keinen Einfluss, da uns der Quellcode der DLL nicht zur Verfügung steht.

    Versucht man die DLL mit REGSVR32 zu registrieren, dann kommt auch auf einem 64-bit System die obige MsgBox, allerdings dann ein Fehler:

    Auch da kann man nichts machen, kommen wir zum interessanten Teil:

    Ruft man die DLL aus einer VBA 64-bit Umgebung (Excel 2013 64bit) auf, dann kommt der gleiche RTE 48, genauso wie mit Excel 2013 32bit.

    Ich mutmaße mal das MS hier die Kompatiblität an einer Stelle gekappt hat an der diese DLL ansetzt, es hängt also irgendwo an der Aufrufkonvention. Und auch die können wir nur bedingt durch ändern der DECLARE Anweisung versuchen zu beeinflussen (z.B. PtrSafe), leider geht da nix.

    Ende der Fahnenstange, IMHO stirbt das Teil mit Office 2010.

    Andreas.

    Freitag, 24. April 2015 07:16
  • Ja, Danke für die Mühe, das habe ich schon befürchtet.
    Freitag, 24. April 2015 09:17