Können nicht instanziieren von COM-Objekt in C# geschrieben in VBA (VB6 ok)
Mit VS 2008, hier ist mein COM-Objekt
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace TestCom
{
[Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E123E")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("Test9.COMINT")]
public class TestComClass
{
public void Init(string userid, string password)
{
MessageBox.Show(string.Format("{0}/{1}", userid, password));
}
}
}
Wenn ich Baue diese und registrieren Sie es auf einer Produktions-Maschine wie folgt
REGASM /CODEBASE TESTCOM.DLL
Vom einfachen VB6-app-diese funktioniert einwandfrei
Private Sub Form_Load()
Dim o As Object
Set o = CreateObject("Test9.COMINT")
o.Init "A", "B"
End Sub
Genau dem gleichen code Aufruf aus VBA in Excel gibt
"automation-Fehler" (0x80131700)
Alles funktioniert auf einer Entwicklung der Maschine, nur eben nicht auf einer Produktions-Maschine mit nur .NET und MS Office installiert.
Update
Ich denke, dass dies etwas damit zu tun .NET framework nicht ordnungsgemäß initialisiert, wenn läuft unter Excel. Wenn ich Filemon ich es sehen kann, überspringen Sie herum auf der Suche nach MSCORWKS.DLL. Wenn ich das gleiche Objekt von VBScript, die es findet MSCorwks.dll fein.
Als ich CorBindToCurrentRunTime
von VBA zu versuchen, gewaltsam laden der CLR, interessanterweise erhalte ich die exakt gleiche HRESULT (0x80131700)
als wenn ich CreateObject()
in VBA.
Daher denke ich, es ist ein framework initialization Problem.
InformationsquelleAutor der Frage | 2008-12-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich werde die Antwort auf meine eigene Frage, die hoffentlich zu ersparen anderem die Stunden der mühsamen Plackerei habe ich nur ertragen.
Wenn Sie diese bekommen, es istweil die .NET-basierte COM-assembly nicht finden können .NET framework
Ist die Lösung einfach. Erstellen Sie eine Datei mit folgenden
Nennen es "Excel.Exe.Config" und platzieren Sie es im gleichen Verzeichnis wie "EXCEL.EXE"
Problem gelöst!
InformationsquelleAutor der Antwort
Installation der Folgen-Update wird dieses Problem beheben
http://www.microsoft.com/downloads/details.aspx?FamilyID=1b0bfb35-c252-43cc-8a2a-6a64d6ac4670&displaylang=en
InformationsquelleAutor der Antwort ryang
RC1, getestet habe ich dies mit dem code von VBScript und in Office 2007 ist Excel funktioniert alles einwandfrei.
Seit Ihr in der Lage, zum erstellen des COM-Objekts in ein VB6-Formular aus und wir sollten davon ausgehen, dass Ihre .net framework ist ok. Können Sie ausschließen, Probleme mit VBA? Können Sie erstellen ein .vbs-Datei und setzen diese in der it:
Speichern Sie die Datei und doppelklicken Sie darauf. Wenn du eine Fehlermeldung bekommst, dann würde ich denken es ist ein Thema, mit dem es registriert wird, wenn Sie nicht erhalten eine Fehlermeldung, dann würde ich schauen, Office und VBA und sehen, ob etwas fehlt oder nicht richtig installiert.
Andere option ist, um einen Verweis auf COM-Objekt und verwenden die frühe Bindung? Ich denke, dass müssen Sie möglicherweise exportieren Sie eine typelibrary den ersten, aber Sie sollten in der Lage sein, um einen Verweis hinzufügen und einfach neue das Objekt.
InformationsquelleAutor der Antwort JoshBerke
Dies funktioniert für mich in VBA... ich habe versucht es mit Word & Excel 2003 (SP3).
Ich bin mir nicht sicher, was du meinst, durch die "Herstellung" der Maschine. Denn dies ist ein "client" - Anwendung und muss auf dem client ausgeführt mit Excel.
Wenn Sie das automatisieren von Excel auf dem server und das auslösen dieses "interop" durch einen VBA-Aufruf, sind Sie für Probleme Fragen 🙂
Unter der Annahme, dass durch die Produktion, du meinst die client-Rechner, auf dem Benutzer wird mit der Excel-Vorlage /doc sind dies die folgenden Hinweise:
Wenn du das Gefühl adventuristic, können Sie process explorer (von Microsoft sysinternals-Website] um zu sehen, was sind die DLLs geladen und wo genau sind Sie, immer die Fehler, und vergleichen Sie es mit der Liste auf Ihren dev-box.
Hoffe, das hilft.
InformationsquelleAutor der Antwort Vyas Bharghava
rc1 ist richtig, dass diese ist ein .net-Fehler, die ausgegeben werden, wenn Office kann nicht entscheiden, welche version des Frameworks zu verwenden. Aber Office ist nicht das werfen einer wackeligen, einfach weil es die Qual der Wahl. Es ist ein Fehler, wie Office 2003, mit der er interagiert .net 2.0.
Installation das Update von Microsoft (KB908002) ist eine flexible Form der Lösung des Problems als durch und zwingt Excel zu führen in einer bestimmten version .net.
Siehe auch: http://www.biopdf.com/guide/trouble_shoot_microsoft_office_2003.php
InformationsquelleAutor der Antwort Robino