AS EMPRESAS ESTÃO "DESESPERADAS" POR ESTE TIPO DE PROFISSIONAL... - VOCÊ É UM DELES?
MEGA FORMAÇÃO EM INFRAESTRUTURA DE TI - O Conhecimento que Vira Dinheiro - CLIQUE AQUI
| « Anterior | Δ Página principal | ¤ Índice | Próxima » |
| Programando o RibbonX no Excel 2007 Autor: Robert Friedrick Martim |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Lição 19 - Automatizando o processo de criação: utilizando VBA para gerar o XML | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Passada a primeira parte, queremos agora levar a nossa customização ao próximo nível. Acho que deve estar bastante claro para o leitor que construir uma personalização da Faixa de Opções não é tarefa simples, msmo para os que utilizam esquemas XML no VS.NET ou Visual Web Developer Express Edition. Aqui desenvolvo uma breve idéia de como podemos criar o código XML utilizando VBA. O apêndice C foi criado utilizando este mesmo esquema. Vejamos a seguinte personalização da Faixa de Opções:
Temos aqui dois grupos com seis botões sendo que um deles é um splitbutton. Vejamos agora o XML por trás disso tudo: <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="true"> <tabs> <tab id="idTab1" label="Minha Guia" keytip= "CV" insertBeforeMso="TabHome" > <group id="idGrp1" label="Meu Grupo 1" > <button id="idBtn1" label="Meu botao 1" imageMso="ActiveXImage" onAction="onAction" screentip= "Esta é uma screentip" supertip="Esta é uma supertip" size="large" /> <button id="idBtn2" label="Meu botao 2" imageMso="ActiveXListBox" onAction="onAction" screentip= "Esta é uma screentip" supertip="Esta é uma supertip" size="large" /> <button id="idBtn3" label="Meu botao 3" imageMso="AutoFormatDialog" onAction="onAction" screentip= "Esta é uma screentip" supertip="Esta é uma supertip" size="large" /> </group> <group id="idGrp2" label="Meu Grupo 2" > <splitButton id="idSplitBtn1" size="large" > <button id="idBtn4" label="Meu botao 4" imageMso="Camera" onAction="onAction" screentip= "Esta é uma screentip" supertip="Esta é uma supertip" /> <menu id="idSplitMnu1" > <button id="idBtn5" label="Meu botao 5" imageMso="CloseAll" onAction="onAction" screentip= "Esta é uma screentip" supertip="Esta é uma supertip" /> <button id="idBtn6" label="Meu botao 6" imageMso="ConditionalFormatting" onAction="onAction" screentip= "Esta é uma screentip" supertip="Esta é uma supertip" /> </menu> </splitButton> </group> </tab> </tabs> </ribbon> </customUI> Uma leve pesonalização e temos uma montanha de código XML (veja o montante de código XML contido no Apêndice C). Obviamente que escrever isso tudo consome um tempo enorme. E se precisarmos rearranjar os objetos? Tudo isso consumirá mais tempo ainda. O leitor pode desenvolver algum método para facilitar o trabalho. Neste caso específico, utilizo uma planilha para armazenar os detalhes (que podem ser rearranjados) e VBA:
A vantagem aqui é que podemos armazenar o esquema e refazer o XML quantas vezes desejarmos. Originalmente, havia feito tal código no grupo privado de MVP, portanto, o manterei em inglês: Dim getClipboard As DataObject Sub makeXML()
Dim lngRow As Long
Dim id As String
Dim idMso As String
Dim img As String
Dim XMLAction As String
Dim Label As String
Dim Action As String
Dim screenTip As String
Dim keyTip As String
Dim superTip As String
Dim itemSize As String
Dim size As String
Dim imgMso As String
Dim insertBeforeMso As String
Dim ws As Worksheet
Dim appWord As Object
Dim wrdDoc As Object
On Error GoTo Err_Handler
Set appWord = CreateObject("Word.Application")
Set wrdDoc = appWord.Documents.Add
Set getClipboard = New DataObject
With wrdDoc.ActiveWindow.Selection
appWord.Visible = True
.WholeStory
.ClearFormatting
.Font.Name = "Courier New"
.Font.size = 10
.TypeText Text:="<customUI xmlns=" & Chr(34) & _
"http://schemas.microsoft.com/office/2006/01/customui" & Chr(34) & ">"
Set ws = ThisWorkbook.Sheets("Data")
lngRow = 2
Do Until IsEmpty(ws.Cells(lngRow, 1))
XMLAction = ws.Cells(lngRow, 1)
id = hasID(ws.Cells(lngRow, 3))
idMso = hasIdMso(ws.Cells(lngRow, 4))
Label = hasLabel(ws.Cells(lngRow, 5))
insertBeforeMso = hasinsertBeforeMso(ws.Cells(lngRow, 6))
keyTip = hasKeyTip(ws.Cells(lngRow, 7))
size = hasSize(ws.Cells(lngRow, 8))
itemSize = hasItemSize(ws.Cells(lngRow, 8))
img = hasImg(ws.Cells(lngRow, 9))
imgMso = hasImgMso(ws.Cells(lngRow, 10))
Action = hasAction(ws.Cells(lngRow, 11))
screenTip = hasScreenTip(ws.Cells(lngRow, 12))
superTip = hasSuperTip(ws.Cells(lngRow, 13))
'*****************************************************************************************
'OPENS AND CLOSES DE TAGS FOR THE RIBBON
Select Case UCase(XMLAction) Case "OPENRIBBON" .TypeParagraph .TypeText Text:=" <ribbon startFromScratch=" & Chr(34) & _ LCase(ws.Cells(lngRow, 2)) & Chr(34) & ">" Case "CLOSERIBBON" .TypeParagraph .TypeText Text:=" </ribbon>" '*****************************************************************************************
'OPENS AND CLOSES DE TAGS FOR THE TABS
Case "OPENTABS"
.TypeParagraph
.TypeText Text:=" <tabs>"
Case "CLOSETABS"
.TypeParagraph
.TypeText Text:=" </tabs>"
'*****************************************************************************************
'OPENS AND CLOSES DE TAGS FOR THE TAB
Case "OPENTAB"
.TypeParagraph
.TypeText Text:=" <tab " & vbCr & _
id & _
idMso & _
Label & _
keyTip & _
insertBeforeMso & _
" >"
Case "CLOSETAB"
.TypeParagraph
.TypeText Text:=" </tab>"
'*****************************************************************************************
'OPENS AND CLOSES DE TAGS FOR THE GROUP
Case "OPENGROUP"
.TypeParagraph
.TypeText Text:=" <group " & vbCr & _
id & _
idMso & _
Label & _
" >"
Case "CLOSEGROUP"
.TypeParagraph
.TypeText Text:=" </group>"
'*****************************************************************************************
'OPENS AND CLOSES DE TAGS FOR THE BUTTON
Case "OPENBUTTON"
.TypeParagraph
.TypeText Text:=" <button " & vbCr & _
id & _
idMso & _
Label & _
imgMso & _
img & _
Action & _
screenTip & _
superTip & _
size & _
" />"
'*****************************************************************************************
'OPENS AND CLOSES DE TAGS FOR THE SPLITBUTTON
Case "OPENSPLITBUTTON"
.TypeParagraph
.TypeText Text:=" <splitButton " & vbCr & _
id & _
idMso & _
size & _
" >"
Case "CLOSESPLITBUTTON"
.TypeParagraph
.TypeText Text:=" </splitButton>"
'*****************************************************************************************
'OPENS AND CLOSES DE TAGS FOR THE SPLITBUTTONMENU
Case "OPENSPLITBUTTONMENU"
.TypeParagraph
.TypeText Text:=" <menu " & vbCr & _
id & _
idMso & _
itemSize & _
" >"
Case "CLOSESPLITBUTTONMENU" .TypeParagraph .TypeText Text:=" </menu>" End Select lngRow = lngRow + 1 Loop .TypeParagraph .TypeText Text:="</customUI>" .WholeStory .Copy getClipboard.GetFromClipboard End With
Cleanup:
' wrdDoc.Saved = True
' wrdDoc.Close
' appWord.Quit
Set wrdDoc = Nothing
Set appWord = Nothing
MsgBox "Code is ready to be pasted onto XML editor.", vbInformation
Exit Sub
Err_Handler:
MsgBox Err.Description, vbCritical, Err.Number
Resume Cleanup
End Sub
Function hasID(ByVal value As String) As String
If value = "" Then
hasID = ""
Else
hasID = " id=" & Chr(34) & value & Chr(34) & vbCr
End If
End Function
Function hasIdMso(ByVal value As String) As String
If value = "" Then
hasIdMso = ""
Else
hasIdMso = " idMso=" & Chr(34) & value & Chr(34) & vbCr
End If
End Function
Function hasLabel(ByVal value As String) As String
If value = "" Then
hasLabel = ""
Else
hasLabel = " label=" & Chr(34) & value & Chr(34) & vbCr
End If
End Function
Function hasAction(ByVal value As String) As String
If value = "" Then
hasAction = ""
Else
hasAction = " onAction=" & Chr(34) & value & Chr(34) & vbCr
End If
End Function
Function hasScreenTip(ByVal value As String) As String
If value = "" Then
hasScreenTip = ""
Else
hasScreenTip = " screentip= " & Chr(34) & value & Chr(34) & vbCr
End If
End Function
Function hasKeyTip(ByVal value As String) As String
If value = "" Then
hasKeyTip = ""
Else
hasKeyTip = " keytip= " & Chr(34) & value & Chr(34) & vbCr
End If
End Function
Function hasSuperTip(ByVal value As String) As String
If value = "" Then
hasSuperTip = ""
Else
hasSuperTip = " supertip=" & Chr(34) & value & Chr(34) & vbCr
End If
End Function
Function hasSize(ByVal value As String) As String
If value = "" Then
hasSize = ""
Else
hasSize = " size=" & Chr(34) & value & Chr(34) & vbCr
End If
End Function
Function hasItemSize(ByVal value As String) As String
If value = "" Then
hasItemSize = ""
Else
hasItemSize = " itemSize=" & Chr(34) & value & Chr(34) & vbCr
End If
End Function
Function hasImgMso(ByVal value As String) As String
If value = "" Then
hasImgMso = ""
Else
hasImgMso = " imageMso=" & Chr(34) & value & Chr(34) & vbCr
End If
End Function
Function hasImg(ByVal value As String) As String
If value = "" Then
hasImg = ""
Else
hasImg = " image=" & Chr(34) & value & Chr(34) & vbCr
End If
End Function
Function hasinsertBeforeMso(ByVal value As String) As String
If value = "" Then
hasinsertBeforeMso = ""
Else
hasinsertBeforeMso = " insertBeforeMso=" & Chr(34) & value & Chr(34) & vbCr
End If
End Function
Embora já tenhamos visto os tags XML para utilização na Faixa de Opções, coloco aqui uma lista para fácil referência:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| « Anterior | Δ Página principal | ¤ Índice | Próxima » |
|
Quer Aprender VBA no
Excel, Sem Dificuldades, com Exemplos |
||
|
Junto com o livro você Recebe 11 Bônus Incluindo 50 horas de Vídeo Aulas. |
||
|
Mesmo que Você não Saiba Nada de
Programação VBA ou já Tenha Tentado |
||
|
|
MEGA FORMAÇÃO EM INFRAESTRUTURA DE TI (Online, Vitalício, Prático e Atualizado)! |
|
|
NÃO PROCURE VAGAS, SEJA PROCURADO! |
|
Para Todos os Detalhes, Acesse:
https://juliobattisti.com.br/curso-infra-ti.asp
|
Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434
Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208
Todos os direitos reservados, Júlio Battisti 2001-2025 ®
LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO
DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI