Vba 041
Vba 041
Vba 041
Para que o menus sejam criados sempre que abrir o livro(Workbook) a macro "Sub CriarMenus() " deve ser chamada através do
evento:
PrivateSub Workbook_Open()
Call CriarMenus
End Sub
Para que o menus sejam eliminados sempre que fechar o livro (workbook) a macro "Sub EliminarMenus()" deve ser chamada através
do evento :
'
'O código seguinte deve ser colocado num modulo
'
Dim xlMenuBar As CommandBar
Dim jjMenuCell As CommandBarPopup
Dim jjMenuTools As CommandBarPopup
Dim jjMenuBar As CommandBarPopup
http://jjoao2k.no.sapo.pt/vba/vba041.html 19-10-2010
Página Web 2 de 4
End Sub
'
' Rotina para criar items de menu de celulas,
' itens acessiveis através do clique direito
' dentro da worksheet
'
' Rotina para criar item de menu
'
Sub CriarItemsTools(xOrdem, xId, xItem, xMacro, xTag, xBeginGroup)
With jjMenuTools.Controls.Add _
(Type:=msoControlButton, _
before:=xOrdem, _
temporary:=True)
.Caption = xItem
.OnAction = xMacro
.FaceId = xId
.Tag = xTag
.BeginGroup = xBeginGroup
End With
End Sub
'
'Rotina principal
'
Sub CriarMenus()
Call EliminarMenus
Call Criar_jjMenuCell
Call Criar_jjMenuTools
posicao = 0
' Criar Items no menu Celula
posicao = posicao + 1
CriarItemsCell posicao, 485, "Linhas de Grelha", _
"jjGridLinesOnOff", "jjTools", True
posicao = posicao + 1
CriarItemsCell posicao, 0, "Minusculas", "jjMinusculas", _
"jjTools", False
posicao = posicao + 1
CriarItemsCell posicao, 0, "Maiusculas", "jjMaiusculas", _
"jjTools", False
posicao = posicao + 1
CriarItemsCell posicao, 0, "1ª Maiuscula", "jj1aMaiuscula", _
"jjTools", False
posicao = posicao + 1
CriarItemsCell posicao, 364, "Zona de impressão", _
"set_Area_de_Impressao", "jjTools", False
posicao = posicao + 1
CriarItemsCell posicao, 1, "Formato da celula", "jjGetFormat", _
"jjTools", False
http://jjoao2k.no.sapo.pt/vba/vba041.html 19-10-2010
Página Web 3 de 4
End Sub
Sub EliminarMenus()
' Eliminar todos os jjItemsCell
For Each cItem In Application.CommandBars("cell").Controls
If cItem.Tag = "xpto" Or cItem.Caption = "" Then cItem.Delete
Next cItem
'---------------------------------------------------------------------------
'Macros usadas pelos itens de menu
'---------------------------------------------------------------------------
'
'Macro de teste
'
Sub NomeDaMacro()
MsgBox "Teste de macro", vbInformation, "Teste de item de menu"
End Sub
'
'Recolhe o formato da celula corrente
'
Sub jjGetFormat()
Dim Formato As String
Dim x As String
Dim Texto As String
Texto = "Para copiar o formato, " & _
" basta selecionar o texto e pressione CTRL+C "
Formato = ActiveCell.NumberFormatLocal
x = InputBox(Texto, "Format de " & ActiveCell.Address, Formato)
End Sub
'
'Macro que torna a 1ª letra
'em maiusculas em todas as palavras
'da zona selecionada
'
Sub jj1aMaiuscula()
Dim Celula As Range
Dim xSel As Long, x As Long
xSel = Selection.Count
For Each Celula In Selection
x = x + 1
stBar x, xSel
Celula.Value = Application.WorksheetFunction.Proper(Celula.Text)
Next
End Sub
'
'Macro que torna em maiusculas
'a zona selecionada
'
Sub jjMaiusculas()
Dim Celula As Range
Dim xSel As Long, x As Long
xSel = Selection.Count
For Each Celula In Selection
x = x + 1
stBar x, xSel
Celula.Value = UCase(Celula.Text)
Next
End Sub
http://jjoao2k.no.sapo.pt/vba/vba041.html 19-10-2010
Página Web 4 de 4
'
'Macro que torna em minusculas
'a zona selecionada
'
Sub jjMinusculas()
Dim Celula As Range
Dim xSel As Long, x As Long
xSel = Selection.Count
For Each Celula In Selection
x = x + 1
stBar x, xSel
Celula.Value = LCase(Celula.Text)
Next
End Sub
'
'Macro que vai dizendo ao utilizador
'em que % se encontra o processo em curso
'
Sub stBar(x1 As Long, x2 As Long)
'Vai apresentado o evolução da operação em %
Application.StatusBar = "Processo: " & _
Format(x1 / x2, "#0%") & _
" Concluído"
http://jjoao2k.no.sapo.pt/vba/vba041.html 19-10-2010