Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Ribbons

Betrifft: Ribbons von: Born
Geschrieben am: 29.07.2014 10:42:00

Hallo Forum,
ich muss in einem Projekt von 2003 auf 2010 wechseln und somit auch die bisherigen Symbolleisten durch Ribbons ersetzen. Ziel ist ein Ribbon mit 6 Buttons, die jeweils eine Prozedur aufrufen sollen

Das ganze Projekt setzt auf ExcelDNA und Netoffice auf, mit denen eine XLL erzeugt wird. Die XLL enthält die XML-Daten für die 6 Buttons sowie auch die zugehörigen 6 Prozeduren.

Ich habe das Ganze soweit, dass das Ribbon angezeigt wird, weiss aber nicht, wie die Aufrufe der Prozeduren erfolgen sollen. Laut Google soll dazu ein OnAction implementiert werden, aber es passiert nichts.

Kann mir jemand einen Tipp geben, wie ich die Aufrufe implementieren muss?

Vielen Dank,
M. Born

  

Betrifft: AW: Ribbons von: Hajo_Zi
Geschrieben am: 29.07.2014 10:50:54

Hallo Born,

der Umstieg ist kein Grund für neue Symbolleisten, Die vor 2007 werden unter Add Ins angezeigt.

GrußformelHomepage


  

Betrifft: AW: Ribbons von: Born
Geschrieben am: 29.07.2014 10:57:45

Hallo Hajo,
leider wird gewünscht, dass die Buttons in einer separaten Leiste angezeigt werden und nicht in der Addins-Leiste. Ich werde da leider nicht drumherum kommen...

Viele Grüße,
M. Born


  

Betrifft: AW: Ribbons von: Hajo_Zi
Geschrieben am: 29.07.2014 11:21:02

Hallo Born,

suche mal Beiträge von mumpel, da hat er einen Link zu Ribbon Erstellung.
Ich habe es mal vor Jahren beschrieben.
http://hajo-excel.de/chCounter3/getfile.php?id=264

Gruß Hajo


  

Betrifft: AW: Ribbons von: Born
Geschrieben am: 29.07.2014 11:25:58

Hallo Hajo,
ich arbeite mich gerade durch Deine Beschreibung. Leider komme ich da etwas durcheinander, da ich zusätzlich noch die ExcelDNA- und Netoffice-Klassen benutzen muss und nicht so recht weiss, welche an welcher Stelle benötigt wird und wie die sich gegenseitig aufrufen. Für einen VBA-Coder ist das ganze .NET ziemlich verwirrend...

Danke für Deine Hilfe bisher,
M. Born


  

Betrifft: AW: Ribbons von: mumpel
Geschrieben am: 29.07.2014 12:29:03

Hallo!

RibbonX-Workshop. Für Ribbon-Programmierung in .Net musst Du bei Microsoft schauen (Englischkenntnisse erforderlich), kann aber im VBA-Editor nicht verwendet werden. Bei .Net kann ich nicht helfen.

Gruß, René


  

Betrifft: AW: Ribbons von: Born
Geschrieben am: 29.07.2014 12:33:42

Hallo René,
danke für Deinen Link. Ich werde mir auch diesen anschauen und hoffe, was passende zu finden.

Viele Grüße,
M. Born


  

Betrifft: AW: Ribbons von: Nepumuk
Geschrieben am: 29.07.2014 13:22:04

Hallo,

in der XML:

onAction="OnAction"

im Addin:

Public Sub OnAction(ByVal control As Office.IRibbonControl)
.
.
.
End Sub

Gruß
Nepumuk


  

Betrifft: AW: Ribbons von: Born
Geschrieben am: 29.07.2014 13:42:00

Hallo Nepomuk,
leider funktioniert es bei mir nicht. Ich habe in die OnAction-Routine einfach ein Msgbox gesetzt, aber es passiert nichts. Kennst Du Dich mit .NET aus?

Viele Grüße,
M. Born


  

Betrifft: AW: Ribbons von: Nepumuk
Geschrieben am: 29.07.2014 13:50:42

Hallo,

ja schon. Aber ich hab noch nie mit VSTO oder ähnlichem gearbeitet. Die OnAction-Zeile habe ich hier:

https://netoffice.codeplex.com/discussions/433445

gefunden.

Gruß
Nepumuk


  

Betrifft: AW: Ribbons von: Born
Geschrieben am: 29.07.2014 13:57:03

Hier mein bisheriger Code (gekürzt):

Imports System
Imports ExcelDna.Integration
Imports Microsoft.VisualBasic.ApplicationServices
Imports NetOffice
Imports Excel = NetOffice.ExcelApi
Imports ExcelDna.Integration.CustomUI

Friend Class StartUp
Implements IExcelAddIn

Public Dim objRibbon As ExcelDna.Integration.CustomUI.IRibbonUI
Dim appxl As Excel.Application

Private Sub  Start() Implements IExcelAddIn.AutoOpen
    appxl = New Excel.Application(Nothing, ExcelDnaUtil.Application)
  End Sub
Public Sub onAction(ByVal control As ExcelDna.Integration.CustomUI.IRibbonControl) 		
    MsgBox("Button1")
  End Sub



  

Betrifft: AW: Ribbons von: yummi
Geschrieben am: 29.07.2014 14:13:35

Hallo,

ich hab zwar keine Erfahrung mit NET und habe bisher den CustomUIEditor benutzt. Doch ein Tip habe ich trotzdem für dich da ich das Fehlerbild kenne:

Überprüfe mal bitte Schreibweise deiner Funktion, im XML File und im Module selber, wenn das nicht passt kann deine MsgBox nicht erscheinen.

Gruß
yummi


  

Betrifft: AW: Ribbons von: Born
Geschrieben am: 29.07.2014 14:17:45

In beiden Dateien ist die Schreibweise identisch: onAction
Daran liegt es nicht. Ich vermute, dass das Zusammenspiel von ExcelDNA und Netoffice nicht richtig funktioniert. Aber leider habe ich kein Tutorial gefunden, bei denen beide zusammen mit Ribbons verwendet wurden.


  

Betrifft: AW: Ribbons von: yummi
Geschrieben am: 29.07.2014 15:56:41

Hallo,

meine Dateien, für die ribbons fangen so an:

"<"customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="onload" ">"
"<"ribbon">"

nur ohne die "" um die <>
im Module muss dann die Funktion onload zu finden sein
Public Sub onload(pobjRibbon As IRibbonUI)
Ich hoffe es hilft

Gruß
yummi


  

Betrifft: AW: Ribbons von: Born
Geschrieben am: 29.07.2014 16:00:02

Hier die Zeile aus meiner XML (ohne die <>):
customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="onload"

Da ich Office2010 einsetze, ist das Schema etwas anders als bei Dir.
Viele Grüße,
M. Born


  

Betrifft: AW: Ribbons von: mumpel
Geschrieben am: 29.07.2014 17:15:12

Du kannst aber auch "2006/01" nehmen, sofern Du nur das Menüband anpassen willst. Erst wenn Du auch das Officemenü bzw. Backstage-View anpassen möchtest musst Du "2009/07" nehmen, bzw. beides (zwei Anpassungsdateien) in einer Datei wenn Du in beiden Officeversionen das Menü anpassen möchtest.


  

Betrifft: AW: Ribbons von: Born
Geschrieben am: 29.07.2014 17:19:18

Ich habe es mal mit dem 2007er Schema probiert. Hat jedoch keinerlei Auswirkungen. Mein Code funktioniert weiterhin nicht... :-(


  

Betrifft: AW: Ribbons von: Nepumuk
Geschrieben am: 29.07.2014 18:26:20

Hallo,

ich würd halt mal nach entsprechenden Foren suchen, wir VBAler können dir da nicht weiterhelfen.

Gruß
Nepumuk


  

Betrifft: AW: Ribbons von: Born
Geschrieben am: 30.07.2014 08:07:17

Trotzdem Danke an alle, die es versucht haben. Manchmal hilft ja auch schon eine kleine Anregung weiter, weil man etwas völlig übersehen hat, und man kommt dann selbst auf die Lösung...


  

Betrifft: AW: Ribbons von: yummi
Geschrieben am: 30.07.2014 09:08:05

Hallo Born,

poste doch mal dein gesamten Quellcode der xml Datei. Vlt seh ich ja was ;-)

Gruß
yummi


  

Betrifft: AW: Ribbons von: Born
Geschrieben am: 30.07.2014 09:38:15

Hi Yummi,
hier der XML-Code (die <> habe ich jeweils gelöscht):

DnaLibrary Language="VB" RuntimeVersion="v2.0"
ExternalLibrary Path="FKGenDNA.dll" Pack="true" /
Reference Path="WordAPI.dll" Pack="true" /
Reference Path="NetOffice.dll" Pack="true" /
Reference Path="ExcelApi.dll" Pack="true"/
Reference Path="OfficeApi.dll" Pack="true"/
Reference Path="VBIDEApi.dll" Pack="true"/
CustomUI
customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="onload"
ribbon startFromScratch="false"
tabs
tab id="tab01" label="DOK"
group id="grp01" label="DOK-Makros"
button id="tgb01" label="KK-Generator" imageMso="TableSharePointListsModifyColumnsAndSettings" onAction = "Button_onAction" size="normal"/
button id="tgb02" label="Zellschutzprüfung_An" imageMso="DataValidationCircleInvalid" onAction = "Button_onAction" size="normal"/
button id="tgb03" label="Zellschutzprüfung_Aus" imageMso="DataValidationClearValidationCircles" onAction = "Button_onAction" size="normal"/
button id="tgb04" label="Alle_Blätter_schützen" imageMso="GroupChangesExcel" onAction = "Button_onAction" size="normal"/
button id="tgb05" label="Blattschutz_entfernen" imageMso="GroupChangesExcel" onAction = "Button_onAction" size="normal"/
button id="tgb06" label="Kopf/Fußzeilen anpassen" imageMso="HeaderFooterLinkToPrevious" onAction = "Button_onAction" size="normal"/
/group
/tab
/tabs
/ribbon
/customUI
/CustomUI
/DnaLibrary


  

Betrifft: AW: Ribbons von: yummi
Geschrieben am: 30.07.2014 10:04:57

Hallo Borg,

kannst du bitte mal diese Datei hochladen, dann brauch ich nicht alles abzutippern und zu ergänzen

Gruß
yummi


  

Betrifft: AW: Ribbons von: Born
Geschrieben am: 30.07.2014 10:11:45

Hier der Link zur Datei. https://www.herber.de/bbs/user/91775.txt


  

Betrifft: AW: Ribbons von: yummi
Geschrieben am: 30.07.2014 10:50:01

Hallo Borg,

wenn Du den Teil mit der DNA libary rausnimmst funktioniert alles. Der Fehler ist also da zu suchen.
da kenn ich mich allerdings nicht aus.
Aber vlt hilft dir das weiter:

https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=8&cad=rja&uact=8&ved=0CFwQFjAH&url=http%3A%2F%2Fwww.sysmod.com%2FPractice%2520project%2520converting%2520XLAM%2520to%2520ExcelDna.docx&ei=2LDYU5jqL6qv7AaU-ID4Cw&usg=AFQjCNFhaA7RV_jFPE47e8EjEVGYTR_49A

gruß
yummi


  

Betrifft: AW: Ribbons von: Born
Geschrieben am: 30.07.2014 11:10:42

Danke für den Link. ExcelDNA kann ich leider nicht rausnehmen, da dies den Wrapper zwischen .NET und Excel darstellt. Aber ich habe in der Zwischenzeit noch einen Bug im VB-Code gefunden, so dass ich zumindest eine Reaktion erhalte, wenn ich einen Button im Ribbon klicke. Problematisch ist nur, dass ich noch Variablen zwischen beiden Umgebungen austauschen muss, die ich bisher über globale Systemvariablen gelöst habe. Da muss ich mir jetzt auch noch eine andere Lösung aussuchen, damit alles funktioniert.


  

Betrifft: AW: Ribbons von: mumpel
Geschrieben am: 30.07.2014 11:30:51

Das kommt davon wenn man krampfhaft an alten Dingen festhalten will. ;-)


  

Betrifft: AW: Ribbons von: Born
Geschrieben am: 30.07.2014 11:36:08

Genau das mache ich ja nicht ;-)
Ich habe ein altes VBA-Projekt nach .NET portiert. Und ExcelDNA ist lediglich die Zwischenschicht, damit Excel und die XLL miteinander kommunizieren können. Dadurch habe ich etliche Vorteile, z.B. dass das Tool in allen Excel-Versionen ab Excel 95 bis hin zu 2013 lauffähig ist, ohne dass ich am Code etwas ändern muss.


  

Betrifft: AW: Ribbons von: mumpel
Geschrieben am: 30.07.2014 11:40:08

Weshalb machst Du es Dir so schwer? Wäre eine dll, auf die Du per "Declare Function" zugreifen kannst, nicht einfacher?


  

Betrifft: AW: Ribbons von: Born
Geschrieben am: 30.07.2014 12:49:13

Eine XLL ist genauso eine DLL. "Normale" DLLs, die man per .NET selbst erzeugt, funktionieren nicht in Excel.


  

Betrifft: AW: Ribbons von: mumpel
Geschrieben am: 30.07.2014 14:00:33

Dann darfst Du eben keine "normale dll" erstellen. Du solltest eine dll erstellen auf die man programmatisch Zugriff hat ohne die dll im System registrieren zu müssen, also eine dll ohne Einstiegs- und Ausstiegspunkt, wenn es sein muss eben mit einer anderen/zusätzlichen Entwicklungsumgebung. Wenn Du auf "Excel-DNA" bestehst musst Du weiter in diese Materie eintauchen, was aber erfahrungsgemäß nicht von heute auf morgen zu erlernen ist, schon garnicht ohne Englischkenntnisse.


  

Betrifft: AW: Ribbons von: Born
Geschrieben am: 30.07.2014 14:47:34

Ich habe mich lange im Netz schlau gemacht. Eine selbsterstellte DLL aus Excel heraus zu nutzen, geht nur wenn sie ein COM-Addin beinhaltet, was bei Excel automatisch zu einer XLL führt. ExcelDNA bietet eine einfache Möglichkeit, auf die Funktionen der XLL zuzugreifen (so wie VSTO, nur einfacher und besser gelöst). Klar lernt man .NET nicht von heute auf morgen, aber es wird von Tag zu Tag besser. Mein Englisch ist mehr als ausreichend, um die Hilfetexte zu verstehen. Habe mehr als genug Meetings in Englisch ;-)


  

Betrifft: AW: Ribbons von: Nepumuk
Geschrieben am: 30.07.2014 17:58:50

Hallo,

das stimmt definitiv nicht. Ich habe genügend DLL's geschrieben die im Excel völlig problemlos funktionieren. Du musst das nur als ActiveX-DLL deklarieren, schon kann Excel mit dieser kommunizieren. Dass das Interface eine Klasse sein muss ist kein Problem, der Rest kann in ganz normalen VB geschrieben sein.

Gruß
Nepumuk


  

Betrifft: AW: Ribbons von: Born
Geschrieben am: 31.07.2014 08:23:13

Hallo Nepomuk,
ich bin da zwar nicht der Experte, aber ActiveX-DLLs sind (wenn ich mich recht entsinne) wieder etwas anderes als "normale" DLLs. Bei denen habe ich jedoch immer das Problem mit dem Deployment, d.h. Installation, Signierung, Registrierung etc. In meinem jetzigen Konstrukt muss ich nur die XLL neu kompilieren und kann sie ohne weiteres nutzen.

Viele Grüße,
M. Born


  

Betrifft: AW: Ribbons von: mumpel
Geschrieben am: 31.07.2014 10:01:00

Ich persönlich unterstütze ältere Versionen erst garnicht mehr. Dann muss ich mich nurnoch auf das Menüband konzentrieren. Office 95-2003 haben ohnehin keinen Support von Microsoft mehr. M.E. ist es unsinnig jetzt noch für Office 95 zu programmieren.