Newsgroup: it.comp.lang.visual-basic
Titolo: VBA Off2000: distinguere bene 2 menu personalizzati...

Ciao,
ho un problema che finora ho cercato di indirizzare registrando una macro in
excel che riproducesse i passi che mi interessavano ma ora qualcosa non mi
torna... mi dareste una mano?
In VBA posso aggiungere al menu standard di Excel un menu "A", con
sottovoci, che si inserisce automaticamente quando apro A.xls. La stessa
cosa con un menu "B" per B.xls, con:
WMB = "Worksheet Menu Bar"
wmbcc = CommandBars(WMB).Controls.Count
NewMenuIndex = wmbcc + 1
CommandBars(WMB).Controls.Add Type:=msoControlPopup, Before:=NewMenuIndex
ovvero alla barra dei menu standard, aggiunge un controllo menu a discesa
il mio problema e' che per aggiungere le sottovoci a questo controllo, la
macro registrata fa cosi':
CommandBars("Popup personalizzato1").Controls.Add Type:=msoControlButton,
ID:=2949, Before:=1
ovvero non li aggiunge al *controllo* che ha appena inserito, ma ad una
commandbar nuova...
CommandBars("Popup personalizzato1")
...il cui nome dipende ovviamente da quante ne sono state inserite fino a
quel momento (nell'applicazione, non nei singoli fogli) e non e'
rinominabile!!! Non posso di sicuro fare affidamento su quella, mi serve
qualcosa di + nuivoco..Inoltre l'ID e' 1 (lo stesso) per tutti i menu
personalizzati. L'index non mi serve perche' potrei avere l'index del
*controllo* ma qui l'inserimento di sottovoci non si applica ad esso, ma
alla nuova barra comandi personalizzata...
come posso identificare le commandbar inserite, univocamente?
il mio problema nasce dal fatto che:
1) apro A.xls --> menu "A" con sottovoci ok..create in CommandBars("Popup
personalizzato1")
2) apro B.xls --> menu "B" con sottovoci ok..create in CommandBars("Popup
personalizzato2")
3) se chiudo A.xls sparisce "A" e la CommandBars("Popup personalizzato1")
4) se riapro "A", non so che nome dare alla commandbar x aggiungere le
sottovoci...ovvero: ce ne potrebbero essere 5,6 ,24 personalizzate... io
come posso sapere qual'e' la mia se nel frattempo l'ordine di apertura e'
cambiato e non posso identificarle univocamente??
Spero sia chiaro...
Grazie a tutti,
Marco
email: 
m.cicci...@libero.it
levaciccioxrispondere

> Marco:

Chiarissimo, grazie. Cominciamo con un po' di allenamento:
Option Explicit
Sub Prova1()
  Dim msoCommandBarControl  As Office.CommandBarControl
  With Excel.Application.CommandBars.ActiveMenuBar
    For Each msoCommandBarControl In .Controls
      With msoCommandBarControl
        Debug.Print "Caption: "; .Caption; " Id: "; .ID
      End With: Set msoCommandBarControl = Nothing
    Next
  End With
End Sub
... e, ovviamente, oltre a "Caption" e "Id" con questo loop puoi analizzare
i valori delle altre proprieta` del controllo in esame.
Poi:
Option Explicit
Sub Prova2()
  Dim objCommandBarPopup  As Office.CommandBarPopup
  With Application.CommandBars.ActiveMenuBar.Controls
    Set objCommandBarPopup _
      = .Add( _
            Type:=msoControlPopup _
          , Before:=.Count - 1 _
          , Temporary:=True)
    With objCommandBarPopup
      .Caption = "&1. Prova"
      With .Controls
        With .Add(Type:=msoControlButton, Temporary:=True)
          .Caption = "Prova &1"
        End With
        With .Add(Type:=msoControlButton, Temporary:=True)
          .Caption = "Prova &2"
        End With
        With .Add(Type:=msoControlButton, Temporary:=True)
          .Caption = "Prova &3"
        End With
      End With
    End With
    Set objCommandBarPopup = Nothing
  End With
End Sub
Scritto in fretta, quindi occhio! E piu` che esaustivo e`... interlocutorio.
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------


Ok, girata Prova1() aggiungendo Index, Type e Builtin ...
dopo aver inserito il menu "Prova" noto che:
Caption: &File Id:  30002  Index:  1  Type:  10  Builtin: Vero
Caption: &Modifica Id:  30003  Index:  2  Type:  10  Builtin: Vero
Caption: &Visualizza Id:  30004  Index:  3  Type:  10  Builtin: Vero
Caption: &Inserisci Id:  30005  Index:  4  Type:  10  Builtin: Vero
Caption: F&ormato Id:  30006  Index:  5  Type:  10  Builtin: Vero
Caption: &Strumenti Id:  30007  Index:  6  Type:  10  Builtin: Vero
Caption: &Dati Id:  30011  Index:  7  Type:  10  Builtin: Vero
Caption: A&zione Id:  30083  Index:  8  Type:  10  Builtin: Vero
Caption: Fi&nestra Id:  30009  Index:  9  Type:  10  Builtin: Vero
Caption: &1. Prova Id:  1  Index:  10  Type:  10  Builtin: Falso
Caption: &? Id:  30010  Index:  11  Type:  10  Builtin: Vero
Caption: MioMenu Id:  1  Index:  12  Type:  10  Builtin: Falso
1) l'ID e' effettivamente 1 per tutti i controlli personalizzati
2) l'index e' semplicemente l'ordine sequenziale sulla "barra"
3) il tipo e' lo stesso
4) ..?
Ovvero.. io *riesco* a creare il menu con le sotto-voci, ma quando apro due
fogli *insieme*, e vengono creati quindi i due menu "aggiuntivi"... senza
problemi....?
Ahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
forse ho capito.....
nel Prova2() mi pare che:
1) dimensioni una objCommandBarPopup
2) la crei assegnandole tipo e posizione
3) e, prima di Set objCommandBarPopup = Nothing, ne modifichi Caption e
sotto-voci...
insomma tutto quello che voglio.
4) quando ha finito, Set objCommandBarPopup = Nothing...
Giusto????
Mo' ci provo...ma direi che piu' che interlocutorio... sei stato
esaustivo...!!! :-)
in effetti il
Dim objCommandBarPopup  As Office.CommandBarPopup, e poi
Set objCommandBarPopup = .Add ...ecc ecc
mi consentono di identificare bene la CommandBarPopup, finche'.. "e' in
ballo"... e' cosi'???
a me non serve altro..cercavo invece di trovare un ID permanente (finche'
esiste la barra, ovviamente) per riconoscere in qualunque momento la
objCommandBarPopup..
Nella eliminazione (in auto_chiudi) il problema lo risolvo leggendo le
caption dei menu(Index) ed eliminando quello che ha la caption che mi
interessa.
Grazie 1T (1 tera!) Maurizio,
Molte, molte, molte, molte, molte grazie!
Marco
PS: spero non fosse una ultra-faq (me l'avresti detto, penso...)...

 (me l'avresti detto, penso...)...
--
