Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Menü in Excel von VB6.0 aus erzeugen??

Menü in Excel von VB6.0 aus erzeugen?
07.08.2008 20:23:28
VB6.0
Hallo zusammen,
ich hoffe ihr könnt mir bei meinem Anliegen helfen. Ich möchte den VBA-Code in eine dll transportieren (VB 6.0) und scheitere schon an dem Menüaufbau in Excel.
In der dll steht in einer Klasse:

Sub Test_Excel()
Set xl = GetObject(, "Visio.Application")
Set objMenu = xl.Application.ActiveMenuBar.Menus.Add("QuickView")
Set objButtonA = objMenu.MenuItems.AddMenu("Show")
Set objButtonB = objButtonA.MenuItems.Add("Show Files", "sFiles")
Set objButtonB = objButtonA.MenuItems.Add("Show Parameter", "sPara")
Set objButtonA = objMenu.MenuItems.Add("Info", "info")
End Sub


In einem Excel starte ich den Aufruf über:


Sub Menu_testen()
Set Go = CreateObject("QuickViewAddin.TESTDLL")
Call Go.Test_Excel
End Sub


Es kommt folgende Fehlermeldung die ich nicht auflösen kann und hoffe auf Hilfe - gern auch mit anderem Lösungsansatz:
"Laufzeitfehler: 438
Objekt unterstützt diese Eigenschaft oder Methode nicht"

Gruß
Massimo
PS:Weil ich mir nicht sicher bin, ob ich in diesem Forum richtig bin, werde ich evtl im ActiveVB-Forum noch fragen.

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Menü in Excel von VB6.0 aus erzeugen?
07.08.2008 22:36:08
VB6.0
Hallo,
habe zwar schon DLL Dateien erstellt aber nicht um in Excel ein Menü zu erstellen.
Gehen müsste es, aber sehr wahrscheinlich wirst du spätestens wegen AktivX Sicherheit einige Probleme bekommen.
Daher würde ich sagen, erstell doch lieber ein Excel Addin dieses ist bestimmt einfacher einzubinden.
So weit wie ich dies jetzt im Kopf habe, müsste dass in etwa so gehen.
Teste mal dein Projekt so, Name des Projekts und den Namen der Klasse musst du noch anpassen.

Dim MeinProjekt As Object
Set MeinProjekt = CreateObject("MeinProjektName.Class1")
MeinProjekt.Test_Excel


Gruß Tino

Anzeige
AW: Menü in Excel von VB6.0 aus erzeugen?
07.08.2008 23:08:17
VB6.0
Danke Tino,
dies hilft allerdings noch nicht weiter.
Mir ist jetzt bekannt, dass ich den Verweis auf die Office Bibliothek in VB erstellen muss (für die mso.dll)
Allerdings fehlt mir der Einstiegspunkt in die dll um CommandBar anzusprechen:

Private Declare Function ?was muss hierstehen? Lib "C:\Programme\Gemeinsame Dateien\Microsoft Shared\OFFICE11\MSO.DLL" () As Integer


Massimo

AW: Menü in Excel von VB6.0 aus erzeugen?
07.08.2008 23:48:26
VB6.0
Hallo Massimo,
das kannst du vergessen. Wenn ich mir die DLL ansehe, dann finde ich 154 Funktionen (in Office2000). Es gibt keine frei zugägliche Dokumentation zu den Funktionen. Also weiß keiner, außer den Entwicklern, was welche Funktion macht und welch Parameter sie benötigt.
Dir wird also nichts anderes übrig bleiben, als einen direkten Verweis auf die Bibliothek zu setzen. Damit bist du zwar an die Version gebunden, aber du kannst ja für jede Officeversion eine eigene DLL schreiben.
Und noch was "ActiveMenuBar" ist ein variables Objekt. In Excel gibt es nämlich zwei Menübars. Die WorksheetMenuBar und die ChartMenuBar. Je nachdem, welches Objekt in der Mappe gerade den Fokus hat. Da solltest du schon in der DLL festlegen, in welcher deine Buttons landen und es nicht dem Zufall überlassen.
Gruß
Nepumuk

Anzeige
AW: Menü in Excel von VB6.0 aus erzeugen?
08.08.2008 00:37:00
VB6.0
Danke Nepumuk!
Allerdings habe ich keine Ahnung wie ich diesen "direkten Verweis" auf die Bibiothek setzen soll. Wäre es dir möglich mir ein Beispiel aufzuzeigen?
Gruß
Massimo

AW: Menü in Excel von VB6.0 aus erzeugen?
08.08.2008 01:01:06
VB6.0
Hallo,
habe hier mal ein bar Sachen zusammengestellt die dir bestimmt helfen.
Hiermit kannst du vorhandene Verweise in deinem Projekt aktivieren bzw. deaktivieren.

Sub VerweisSetzen()
Dim ID As Object
ThisWorkbook.VBProject.references.AddFromFile ("C:\Test\Meine.dll")
''''Oder'''''''''''''''''''''''''''''''''''''''''''
'  Set ID = ThisWorkbook.VBProject.references
'  ID.AddFromGuid "{00062FFF-0000-0000-C000-000000000046}", 1, 0
End Sub



Sub VerweisDeaktivieren()
ThisWorkbook.VBProject.references.Remove _
ThisWorkbook.VBProject.references("MeineProjekt")
End Sub


Hiermit kannst du eventuell wichtige Parameter auslesen. Verweis muss hierfür aktiv sein!


Sub Grab_References()
Dim n As Integer, l As Long, c As Integer, lastR As Long
Dim VBPRef As Object
With ActiveWorkbook
Set VBPRef = .VBProject.References
With Sheets(1)
l = 5
.Cells(l, 1).Value = "Count"
.Cells(l, 2).Value = "Name"
.Cells(l, 3).Value = "Description"
.Cells(l, 4).Value = "GUID"
.Cells(l, 5).Value = "Major"
.Cells(l, 6).Value = "Minor"
.Cells(l, 7).Value = "Full path"
.Range("A" & l, "G" & l).Font.Bold = True
lastR = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row  'mod.
.Range(.Cells(l + 1, 1), .Cells(lastR + 1, 7)).Clear
On Error Resume Next
For n = 1 To VBPRef.Count
l = l + 1
.Cells(l, 1).Value = n
.Cells(l, 2).Value = VBPRef.Item(n).Name
.Cells(l, 3).Value = VBPRef.Item(n).Description
.Cells(l, 4).Value = VBPRef.Item(n).GUID
.Cells(l, 5).Value = VBPRef.Item(n).Major
.Cells(l, 6).Value = VBPRef.Item(n).Minor
.Cells(l, 7).Value = VBPRef.Item(n).fullpath
Next n
.Columns("A:G").EntireColumn.AutoFit
End With
Set VBPRef = Nothing
End With
End Sub


Gruß Tino

Anzeige
AW: Menü in Excel von VB6.0 aus erzeugen?
08.08.2008 07:25:51
VB6.0
Hallo Tino,
das geht in VBA so, denn da wird der Code zur Laufzeit interpretiert. Aber in VB hast du kompilierten Code. Da lässt sich nachträglich kein Verweis hinzufügen oder entfernen.
Hallo Massimo,
einfach unter Projekt - Verweise den Verweis auf die MSO.dll setzen.
Gruß
Nepumuk

@Nepumuk
08.08.2008 07:46:27
Tino
Hallo,
genau so war dies auch gemeint, er muss doch im Excel den Verweis auf seine *.dll setzen sonst geht’s nicht.
Nur ich finde gerade nichts um die *.dll in die Verweisliste mit Code einzubinden um sie im zweiten Schritt zu setzen.
Gruß Tino

AW: @Nepumuk
08.08.2008 08:03:00
Tino
Hallo,
habs wieder gefunden.
An DllPath muss der Pfad zur *.dll übergeben werden
*.dll Registrieren
Shell "regsvr32 /s " & Chr(34) & DllPath & Chr(34)
*.dll deregistrieren
Shell "regsvr32 /s /u " & Chr(34) & DllPath & Chr(34)
Gruß Tino

Anzeige
AW: @Massimo
08.08.2008 08:19:00
Tino
Hallo Massimo,
natürlich auf dem Rechner wo du die *.dll kompilierst wird dies dadurch schon registriert.
Du brauchst dies nur, wen du diese *.dll an einem anderen Rechner verwenden möchtest oder wenn die Registrierung aus irgendeinem Grund verloren geht
Gruß Tino

AW: @Nepumuk
08.08.2008 09:14:00
Nepumuk
Hallo Tino,
ich dachte, hier geht's erst mal darum seine DLL überhaupt zum laufen zu bringen.
Die Registrierung im System kann die Mappe selbst machen. Schwierig wird es nur dann, wenn ein Admin die Registry so zugenagelt hat, dass eine Registrierung nur mit Adminrechten möglich ist.
Gruß
Nepumuk

Anzeige
AW: @Nepumuk
08.08.2008 09:23:00
Tino
Hallo,
na jetzt weis ich auch nicht mehr wo vorn und wo hinten ist.
Ich habe dies anders verstanden, dass er die *.dll im Excel nicht ansprechen kann.
Warten wir einfach mal auf die Rückmeldung von Massimo.
Gruß Tino

AW: @Nepumuk & @Tino
08.08.2008 10:05:00
Massimo
Hallo Tino und Nepumuk,
ich habe die dll nicht in VB6.0 zum Laufen bekommen. Wie ich diese aus Excel heraus anspreche ist mir bekannt.
Der Hinweis von Nepumuk (Projekt/Verweise) brachte den Durchbruch - ich hatte dies bisher in VB6.0 vergeblich gesucht.
DANKE EUCH BEIDEN!!
Massimo

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige