Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1460to1464
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ribbon Problem

Ribbon Problem
07.12.2015 00:11:21
Olga
Guten Abend,
habe ein Problem mit meinem Ribbon.
Es erscheint ständig Laufzeitfehler 91.
Warum?
Die Arbeitsmappe hat mehere TB welche jedoch kein Ribbon haben.
Danke!
Gruß
Olga
Im UI Editor:

















In dieser Arbeitsmappe:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Call RefreshRibbon
objRibbon.Invalidate
End Sub
Im Modul:
Option Private Module
Option Explicit
Private Declare Function OpenClipboard& Lib "user32" (ByVal hwnd As Long)
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function CloseClipboard& Lib "user32" ()
Public objRibbon As IRibbonUI
Public TabOnSheet1 As Boolean
#If VBA7 Then
Public Declare PtrSafe Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
ByRef destination As Any, _
ByRef source As Any, _
ByVal length As Long)
#Else
Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
ByRef destination As Any, _
ByRef source As Any, _
ByVal length As Long)
#End If
Private Const NAME_RIBBON = "Ribbon"
Public Sub Onload_Menu(pobjRibbon As IRibbonUI)
Set objRibbon = pobjRibbon
Thisworkbook.Names.Add Name:=NAME_RIBBON, RefersTo:=CStr(ObjPtr(pobjRibbon)), Visible:= _
False
End Sub

#If VBA7 Then
Function GetRibbon(ByVal lRibbonPointer As LongPtr) As Object
#Else
Function GetRibbon(ByVal lRibbonPointer As Long) As Object
#End If
Dim objRibbon As Object
Call CopyMemory(objRibbon, lRibbonPointer, LenB(lRibbonPointer))
Set GetRibbon = objRibbon
Set objRibbon = Nothing
End Function
Sub RefreshRibbon()
Dim objName As Name
If objRibbon Is Nothing Then
For Each objName In Thisworkbook.Names
If objName.Name = NAME_RIBBON Then
#If VBA7 Then
Set objRibbon = GetRibbon(CLngPtr(Mid$(objName.RefersTo, 2)))
#Else
Set objRibbon = GetRibbon(CLng(Mid$(objName.RefersTo, 2)))
#End If
Exit For
End If
Next
Set objName = Nothing
objRibbon.Invalidate
Else
objRibbon.Invalidate
End If
End Sub
Public Sub getVisible_Tab1(control As IRibbonControl, ByRef returnValue)
On Error Resume Next
If ActiveSheet.Name = control.ID Then
returnValue = True
objRibbon.ActivateTab (control.ID)
End If
On Error GoTo 0
End Sub

Public Sub Zwischenablage_leeren()
OpenClipboard 0&
EmptyClipboard
CloseClipboard
End Sub

Private Sub Workbook_NewSheet()
Call RefreshRibbon
objRibbon.Invalidate
End Sub

Private Sub Worksheet_Delete()
On Error Resume Next
For Each wks In Thisworkbook.Sheets
If wks.Name  "Menu" And wks.Name  "Data" And wks.Name  "RG_Journal" And wks.Name   _
"NK" And wks.Name  "Kunden" And wks.Name  "Projekt" Then wks.Delete
Next
With Thisworkbook.Worksheets("Menu")
.Select
End With
Call RefreshRibbon
objRibbon.Invalidate
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ribbon Problem
07.12.2015 10:33:00
Luschi
Hallo Olga,
leider fehlt der Teil, was der Custom UI Editor anzeigt.
Wenn ich annehme das da steht:
Userbild
dann wird das offentliche Vba-Objekt 'objRibbon' für die gesammt Zeit der offenen Arbeitsmappe in der Vba-Routine
Public Sub Onload_Menu (pobjRibbon As IRibbonUI)
festgelegt und immer greifbar. Meine Frage:
- warum zerstörst Du dieses Objekt?
  Set objRibbon = Nothing
- und organisiert eine umständliche Wiederherstellung, die ja wohl nicht funktioniert
Ich hätte diesen Budenzauber gerne mal ausgetestet, aber was reitet Dich Denn, in einem Hilfe-Forum nicht kopierbaren Programm-Code bereitzustellen?
fragt sich Luschi
aus klein-Paris

Anzeige
AW: Ribbon Problem
08.12.2015 06:55:23
Olga
Hallo Luschi,
war der Code nicht angezeigt wird weiss ich auch nicht.
Es ist so, dass das Tabellenblatt "Baubericht" nicht immer in der Arbeitsmappe ist.
Über eine UF lade ich den Baubericht in die Arbeitsmappe ein.
Danach wird erst das Ribbon angezeigt.
Hier mal ein Auszug.
Die Datei "Baubericht" wird geöffnet, kopiert in diese Arbeitsmappe eingefügt, danach gelöscht die UF geschlossen und das Tabellenblatt Bauericht wird aktiviert.
Ich hoffe ich habe mich verständlich ausgedrückt.
Danke!
Gruß
Olga
https://www.herber.de/bbs/user/102077.txt

Anzeige
AW: Ribbon Problem
08.12.2015 11:36:31
Luschi
Hallo Olga,
der Knackpunkt in Deinem Bvba-Code ist die Zerstörung/Wiederherstellung des Objektes 'objRibbon'.
Ich kann diesen den geposteten vba-Code aus Deiner Anfangsfrage leider nicht kopieren, um mal ein bischen zu testen.
Da die Methoden 'getVisible' bzw. 'getEnabled' Werte zurückgeben an den xml-Code, kann ich mir vorstellen, daß ein zerstörtes & dann wiederhergestelltes Ribbon-Objekt zwei verschiedene Objekte sind und von xlmCode der Ribbondefinition deshalb verweigert wird.
Stelle doch den Vba-Code auch als txt-Datei bereit 6 ich teste mal.
Meiner meinung reicht es doch aus, das Ribbon-Objekt auf 'nicht 'sichtbar' zu schalten, solange das Tabellenblatt 'BauBericht' noch nicht geladen ist.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Ribbon Problem
09.12.2015 02:16:18
Olga
Hallo Luschi,
danke erstmal für Deine Hilfe.
Zur Erklärung meiner Arbeitsmappe:
1.) Die UF1 wird geöffnet und in der UF1.cboFAAG.Value kann der AG ausgewählt werden
2.) In der UF1.cboFAProj.Value erscheinen dann die angelegten Projekte zum AG
3.) Danach werden Button angezeigt wie Baubericht, Regiebericht, Angebot etc.
4.) Wird der Baubericht ausgewählt, kommen 5 cbo welche xlsm (hier wird vorgeschlagen ob Baubericht Neu oder ein vorhandener angezeigt werden soll. Die anderen cbo lesen pdf, doc, png und andere Exceldateien ein.
5.) cboFAUeberxls zeigt die vorhandenen Berichte oder eben Baubericht Neu an.
6.) Wird Baubericht Neu ausgewählt wird der Baubericht in diese Arbeitsmappe eingelesen. Dabei werden die AG und Projektdaten in die Tabelle eingetragen. Bericht Nummer Datum. (Dies geschieht im Hintergrund.
7.) In der UF1 wird nun ein Frame geöffent in welchen man Temperatur, Witterung sowie die Personalanzahl auswählen kann.
8.) Fertig, dann zum Baubericht UF1.Hide und dass Ribbon erscheint.
9.) Speichern, der Speicherpfad ist in der (Celle 1,13)
Ich hoffe das es Dir verständlich ist.
Der Code zum Öffnen und speichern des Bauberichtes in Anlage.
Gruß
Olga
https://www.herber.de/bbs/user/102123.txt

Anzeige
AW: Ribbon Problem
10.12.2015 07:01:05
Luschi
Hallo Olga,
da ich ja die Funktionalität Deines selbsterstellten Menübandes testen will, mußt Du schon den Code als ttx-Datei aus 1. Beeitrag bereitstellen, denn den kann ich nicht von der Herber-Seite kopieren (& abschreiben ist einfach zu aufwändig!).
Gruß von Luschi
aus klein-Paris

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige