Microsoft Excel

Herbers Excel/VBA-Archiv

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

Betrifft: Menü in Excel von VB6.0 aus erzeugen?? von: Massimo
Geschrieben am: 07.08.2008 20:23:28

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.

  

Betrifft: AW: Menü in Excel von VB6.0 aus erzeugen?? von: Tino
Geschrieben am: 07.08.2008 22:36:08

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


  

Betrifft: AW: Menü in Excel von VB6.0 aus erzeugen?? von: Massimo
Geschrieben am: 07.08.2008 23:08:17

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


  

Betrifft: AW: Menü in Excel von VB6.0 aus erzeugen?? von: Nepumuk
Geschrieben am: 07.08.2008 23:48:26

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


  

Betrifft: AW: Menü in Excel von VB6.0 aus erzeugen?? von: Massimo
Geschrieben am: 08.08.2008 00:37:02

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


  

Betrifft: AW: Menü in Excel von VB6.0 aus erzeugen?? von: Tino
Geschrieben am: 08.08.2008 01:01:06

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


  

Betrifft: AW: Menü in Excel von VB6.0 aus erzeugen?? von: Nepumuk
Geschrieben am: 08.08.2008 07:25:51

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


  

Betrifft: @Nepumuk von: Tino
Geschrieben am: 08.08.2008 07:46:27

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


  

Betrifft: AW: @Nepumuk von: Tino
Geschrieben am: 08.08.2008 08:03:46

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


  

Betrifft: AW: @Massimo von: Tino
Geschrieben am: 08.08.2008 08:19:19

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


  

Betrifft: AW: @Nepumuk von: Nepumuk
Geschrieben am: 08.08.2008 09:14:22

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


  

Betrifft: AW: @Nepumuk von: Tino
Geschrieben am: 08.08.2008 09:23:20

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


  

Betrifft: AW: @Nepumuk & @Tino von: Massimo
Geschrieben am: 08.08.2008 10:05:43

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


 

Beiträge aus den Excel-Beispielen zum Thema "Menü in Excel von VB6.0 aus erzeugen??"