Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Frage zu CommandBarsControls

Frage Entwicklung Visual Studio

Mitglied: MarcoBorn

MarcoBorn (Level 1) - Jetzt verbinden

25.07.2014, aktualisiert 11:32 Uhr, 1044 Aufrufe, 6 Kommentare

Hallo Forum,
ich habe folgendes Problem:

Ich habe ein VBA-Makro, dass ich nach VB.NET portiere. Dort wird unter anderem für Office 2003 eine Symbolleiste erstellt:
01.
... 
02.
  If Application.Version < "14.0" Then 
03.
    Set objCBar = Application.CommandBars.Add(Name:=mc_CBAR_NAME, Temporary:=True) 
04.
    With objCBar 
05.
      .Visible = True 
06.
      .Position = msoBarTop 
07.
      .Protection = msoBarNoCustomize 
08.
    End With 
09.
    For i = 1 To 6 
10.
      objCBar.Controls.Add Type:=msoControlButton 
11.
      objCBar.Controls(i).Style = msoButtonIcon 
12.
      objCBar.Controls(i).Tag = gc_CBARBTN_TAG & CStr(i) 
13.
      objCBar.Controls(i).Parameter = mc_CBAR_NAME 
14.
    Next 
15.
    Call knopf_zuweisen(objCBar, 1, 6262, "Makro3", "Generierung starten") 
16.
...
In der Zeile mit objCBar.Controls(i).Style = msoButtonIcon erhalte ich jedoch immer eine Fehlermeldung, dass die Style-Eigenschaft nicht gesetzt werden kann. Wie muss ich den Code umschreiben?


Vielen Dank,
M. Born
Mitglied: colinardo
LÖSUNG 25.07.2014, aktualisiert um 11:40 Uhr
Hallo Marco,
da stimmt so einiges nicht, was so in VB.NET nicht funktioniert:
01.
.... 
02.
Dim objCBar As Office.CommandBar = Application.CommandBars.Add(mc_CBAR_NAME, 1 ,False , True) 
03.
With objCBar 
04.
   .Visible = True 
05.
   .Position = Office.MsoBarPosition.msoBarTop 
06.
   .Protection = Microsoft.Office.Core.MsoBarProtection.msoBarNoCustomize 
07.
End With 
08.
For i = 1 To 6 
09.
      Dim button As Office.CommandBarButton = objCBar.Controls.Add(Office.MsoControlType.msoControlButton) 
10.
      With button       
11.
         .Style = Microsoft.Office.Core.MsoButtonStyle.msoButtonIcon 
12.
         .Tag = gc_CBARBTN_TAG & CStr(i) 
13.
         .Parameter = mc_CBAR_NAME 
14.
      End with 
15.
Next 
16.
...
Grüße Uwe
Bitte warten ..
Mitglied: MarcoBorn
25.07.2014 um 11:28 Uhr
Hallo Uwe,
vielen Dank für Deine erneute Hilfe.

Ich habe Deinen Code verwendet, aber das Makro stoppt direkt nach Aufruf von
01.
Dim objCBar As Office.CommandBar = Application.CommandBars.Add(mc_CBAR_NAME, , , True) 
.

Ich habe direkt danach eine MsgBox eingefügt, die aber schon nicht mehr aufgerufen wird. Setze ich vor den ganzen Block eine Fehlerbehandlung
01.
 On Error GoTo Err_CreateCommandBar 
, dann wird mir ein Fehler angezeigt. Lasse ich diese Zeile weg, kommt keine Exception-Meldung o.ä.

So langsam bin ich hier ziemlich ratlos...

Viele Grüße,
Marco
Bitte warten ..
Mitglied: colinardo
25.07.2014, aktualisiert um 11:42 Uhr
Es kommt hier natürlich sehr darauf an wie du dein Plugin in Visual Studio realisierst welche DLLs du wie eingebunden hast etc. welche Namespaces du importiert hast und und und, das ist leider nicht überall gleich.

Hatte die Parameter der Zeile nachträglich noch etwas abgeändert:
Dim objCBar As Office.CommandBar = Application.CommandBars.Add(mc_CBAR_NAME, 1, False, True) 
Zur Info On Error Goto macht man in VB.Net auch nicht mehr. Hierfür gibt es das Try ..Catch Konstrukt. Und außerdem gibt es noch diverse weitere Unterschiede die zu beachten sind. Ist also ziemlich aussichtslos an einem kleinen Stück deines Codes hier eine Stichhaltige Aussage treffen zu können.

Grüße Uwe
Bitte warten ..
Mitglied: MarcoBorn
25.07.2014 um 11:59 Uhr
Hallo Uwe,
ich realisiere das ganze in SharpDevelop, nicht in VisualStudio. Ich möchte den Code in einer XLL verwenden. Es sieht danach aus, dass der Bug von NetOffice kommt, da ich folgende Nachricht erhalte, wenn ich statt der On Error Goto ein Try-Catch verwende (On Error war aus dem alten VBA-Code noch drin):

01.
Unable to cast COM object of type 'System.__ComObject' to class type 'NetOffice.OfficeApi.CommandBar'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface. 
02.
   at FKGenDNA.StartUp.mbo_create_ribbon()
Ich werde mal den Entwickler von NetOffice ansprechen, ob dort ein Bug vorliegt.

Vielen Dank nochmal,
Marco
Bitte warten ..
Mitglied: colinardo
25.07.2014, aktualisiert um 12:10 Uhr
kein Bug sondern du darfst hier halt nur die Konstanten und Objekte des NetOffice.OfficeApi verwenden und nicht mit denen des COM-Objektes (welche ich oben verwendet habe) vermischen. D.h. die oben verwendeten Konstanten etc. an das Namensschema der NetOffice-API anpassen, dann sollte es laufen.
Bitte warten ..
Mitglied: MarcoBorn
25.07.2014 um 12:33 Uhr
Ich hatte die Deklarationen und Parameter schon entsprechend angepasst, erhalte aber weiterhin die Fehlermeldung. Mal sehen, was Sebastian auf meine Mail hin antwortet...
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
LAN, WAN, Wireless
gelöst HP Switches - Frage zu Spanning Tree bzw. Loop Back Protection (12)

Frage von chfran zum Thema LAN, WAN, Wireless ...

Hyper-V
Grundsatz Frage Anbindung Hyper V Hosts ans Netzwerk (7)

Frage von Eifeladmin zum Thema Hyper-V ...

Windows Netzwerk
gelöst Frage zu den Netzwerkfreigaben mit Bild (8)

Frage von M.Marz zum Thema Windows Netzwerk ...

Router & Routing
gelöst PfSense, Routing-Frage (10)

Frage von mrserious73 zum Thema Router & Routing ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...