Thomas Teufl

Knowledgebase

VBA und Compilerfehler

excel-64x64Ein Fehlermeldung in (Excel-) VBA, der mich seit einiger Zeit umtreibt:

“Die Objektbibliothek ist ungültig oder enthält Verweise Objektdefenitionen, die nicht gefunden werden konnten”

Der Compiler bleibt bereits in der Zeile “Option Explicit” eines beliebigen Moduls hängen. Die Verweise auf externe Module sind die Selben (klar, es wird auch immer die gleiche Excel-Datei verwendet), es sind auch alle in der gleichen Version installiert und verfügbar.

Das Problem ist, dass es nicht auf jedem Rechner und jeder Installation gleich ist. Auf den PCs wird Windows XP und Office XP mit einer selbsterstellten Unattended Installation aufgespielt, alle Rechner hängen am gleichen WSUS, so dass es theoretisch keine Unterschiede geben dürfte. Tut es aber.

Zufällig bin ich in den letzten Tagen auf die Problematik mit einem Update zum Killbit (KB960715) gestoßen, das Microsoft vollautomatisch verteilt. Dies verhindert eine korrekte Ausführung der OCX, meist blockiert das MSFlexGrid. Aber der Clou an der Geschichte ist: Das wird vom Internet-Explorer kontrolliert! Da muss man erstmal drauf kommen.

Im Endeffekt geht es nun darum, in der Registry unter

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\

all denjenigen OCXs den Wert von “Compatibility Flags” auf  0 (DWORD) zu setzen. Allerdings muss man ersteinmal wissen, welche Controls der VBA-Code verwendet. Hier hilft das kleine Tool ACM (AcctiveX Compatibility Manager), der alle AciveX-Controls in diesem Teil der Registry anzeigt. Nun hilft nur manuelles suchen, welche Controls Verwendung finden, bei diesen muss der Eintrag abgeändert werden.Am Besten raussuchen (ein schneller Weg ist RegmonNt/ProcessMonitor von Sysinternals), in einer .REG-Datei exportieren und diese dann verteilen und überall importieren.

siehe auch:

Snow Leopard und MS Remote Desktop

Auf Snow Leopard läuft der bisherige Microsoft Terminaldiensteclient (Remote Desktop) nicht mehr. Abhilfe schafft die neue Verision 2.0.1. Diese ist kompatibel und bringt einige Neuerungen mit.

siehe Microsoft mactopia

  • 0 Comments
  • Filed under: Mac
  • Windows-Update Error 0×80092026

    Ein Windows 2003 Server beschwert sich über die Unmöglichkeit, Updates zu fahren: “Fehlercode 0×80092026″.

    Microsoft schlägt in KB822798 zehn Möglichkeiten zu Behebung vor. Es hilft aber keine! Der kleine Hinweise von telus.net brachte die Lösung:

    The log file contains “Error 0×80092026: The cryptographic operation failed due to a local security option setting.”, error. This occurs due to local security setting, to resolve the issue check for “safer” key in registry and delete it.

    Locate the following key
    Start/Run
    Typr “regedit” ENTER
    HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\
    SystemCertificates\TrustedPublisher
    Under “TrustedPublisher” look for “Safer” key.
    Delete the “Safer” key if it is there.

    siehe telus.net

  • 0 Comments
  • Filed under: Sicherheit, Windows
  • ISO unter Windows mounten

    Zum mounten einer ISO-Datei haben auch die Microsoft-Programmierer ein kleines Tool “Virtual Cd Control Panel“  geschrieben. Leider arbeitet dieses nur mit Adminrechten. SlySoft bietet sein Progrämmchen VirtualClone Drive als Freeware an. Beide unterstützen den User dabei, ein CD/DVD-Image als virtuelles Laufwerk zu mounten.

  • 0 Comments
  • Filed under: Windows
  • Möchte man im MS SQL-Server Code zur Laufzeit generieren und Ausführen lassen (hier im Trigger), ist das kein großes Problem:

    DECLARE @SQL nvarchar(200)
    SET @SQL=N'SELECT xy FROM myTable WHERE x=1'
    EXEC @SQL

    Schwieriger wird es, wenn die Abfrage eine Prüfung durchführen soll und aufgrund des Ergebnisses weitere Aktionen ausgeführt werden. Das bedeutet, dass ein Ergebnis zurück in den aufrufenden Code transferiert werden muss. Leider läuft jede EXEC-Anweisung in einem eigenen Kontext, auf den von außen nicht zugegriffen werden kann. Dieses Problem muss man umgehen.

    DECLARE @SQL nvarchar(200)
    DECLARE @rueckgabe int
    SET @SQL=N'SELECT xy,@min=min(y) FROM myTable WHERE x=1'
    EXEC sp_executesql @SQL, N'@min int OUTPUT', @rueckgabe OUTPUT
    IF @rueckgabe>5
    BEGIN
      --do something
    END

    Es wird die mitgelieferte Stored Procedure “sp_executesql” verwendet, mit der der SQL-Code ausgeführt wird. Weiter wird eine interner Parameter definiert (hier @min), der auch noch als Ausgabeparameter gekennzeichnet wird. Dieser kann zurückgegeben und in der der ursprünglichen Codebasis wiederverwendet werden.

    siehe MS MSDN sp_execute