About Me
Seguidores
Estatisticas
Introduzido em 1992, os Reddick VBA (RVBA) Naming Conventions, foram publicados num grande número livros e revistas. São utilizados por milhares de programadores em todo o mundo, para denominar objectos dentro de seu código de VBA.
Estes RVBA Naming Conventions têm sido suplementados agora pelas RVBA Coding Conventions. A finalidade dos Reddick VBA (RVBA) Naming Conventions é fornecer um guia para denominar objectos no Visual Basic for Applications (VBA). Ter convenções é valioso em todo o projecto de programação. Quando são utilizados, o nome do objecto informa sobre o significado do objecto. Estas convenções tentam fornecer uma maneira de estandardizar esse significado pelo corpo de programadores de VBA.
Os objectivos das convenções de Coding Reddick VBA (RVBA), são fazer com que o código:
· Seja mais legível: As convenções permitem que um leitor compreenda o significado do código com menos esforço.
· Tenha melhor manutenção: O código pode mais confiantemente ser mudado face aos erros e realçar a sua funcionalidade.
· Dê maior confiança: O código tem maior probabilidade de se executar como seria esperado.
· Seja mais eficiente: O código executa mais rapidamente ou consome menos recursos.
Para saber mais, aceder a:
- RVBA Naming Conventions
- RVBA Coding Conventions
- Microsoft Consulting Services convenções de nomenclatura para o Visual Basic
Pode fazer o download aqui do "The Reddick VBA (RVBA) Naming Conventions, Version 6.01".
Esta função, por defeito, apresenta uma mensagem numa caixa de diálogo, a qual tem um botão "OK". No entanto, esta função pode apresentar outros botões e/ou um icon na caixa de diálogo.
Exemplo:
O código, para este exemplo, será:
Sub Mensagem()
msg = MsgBox("Pretende Continuar?", vbInformation + vbYesNoCancel)
End Sub
No entanto, para obtermos este resultado, poderemos utilizar os chamados valores dos botões de argumento, como no seguinte exemplo de código:
Sub Mensagem()msg = MsgBox("Pretende Continuar?", 64 + 3)
End Sub
Segue-se um quadro com o nome das principais Constantes, o seu Valor e a respectiva Descrição:
Tópicos relacionados:
Se pretendermos que uma determinada célula contenha o nome da folha (nome esse que se encontra no tabulador dessa folha), como no exemplo:
podemos utilizar o seguinte segmento de código, ligado à folha em causa:
Private Sub Worksheet_Activate()
On Error Resume Next
Range("C6").Value = ActiveSheet.Name
End Sub
Se pretendermos repetir um footer (rodapé) em diversas folhas, a partir de uma determinada folha, podemos efectuar da seguinte forma:
1º - Criamos o nosso footer, como habitualmente (Ver > Cabeçalho/Rodapé)
2º - Seleccionamos a folha que contém o footer (parent worksheet) e a seguir CTRL-Click no(s) tabulador(es) que queremos que venham a conter aquele footer (child(ren) worksheet), ou seja, marcamos um grupo.
3º - Na barra de ferramentas, escolhemos Ficheiro > Configurar Página
4º - Desmarcar o grupo e verificar se o footer já se encontra nas outras worksheets.
Tópicos relacionados:
Há dias, foi-me perguntado qual o método para se poder imprimir, de uma só vez, Ranges provenientes de duas WorkSheets.
Uma das possibilidades, é utilizar uma mistura de Excel (definição das áeras de impressão nas duas WorkSheets) e de VBA, no sentido de, a partir daquela definição, imprimir de uma só vez, mas em duas folhas distintas, os Ranges pretendidos.
Exemplo:
Sheet1:
Sheet2:
Para definir as respectivas áreas de impressão:
1 - "marcar" o Range pretendido
2 - File>PrintArea>Set Print Area
3 - A definição das áreas de impressão deve ser efectuada para as duas Sheets.
E, agora, para a impressão dos Ranges definidos, o código VBA:
Sub ImprimeDeUmaVez()
Sheets(Array("Sheet1", "Sheet2")).Select
ActiveWindow.SelectedSheets.PrintOut
End Sub
Tópicos relacionados:
Enquanto criamos objectos (barra de Ferramentas - Desenho), se mantivermos premida a tecla "SHIFT", estaremos a efectuar o que se chama "constrangimento".
Os efeitos são os seguintes:
- Os botões "linha" e "seta", desenham linhas perfeitamente horizontais ou verticais, ou linhas diagonais com incrementos exactos de 15º (0º, 15º, 30º, etc...)
- o botão "rectângulo", desenha quadrados perfeitos
- o botão "oval", desenha círculos perfeitos
Exemplo:
Tópicos relacionados:
Recebido por mail (adaptado):
"A minha duvida é a seguinte:
Tenho umas macros num documento de excel para executarem algumas funções, entre as quais a de gravar uma imagem em formato MDI.
Acontece que o ficheiro principal está num servidor assim como as pastas onde gravo essas imagens.
Tenho atalhos em varios computadores da rede para esse ficheiro.
1ª - Qual a possibilidade de puder trabalhar no mesmo ficheiro ao mesmo tempo nos tres computadores?
2ª- Após a instalação de uma impressora nova que serve dois desses computadores as macros deixaram de funcionar convenientemente, pois só num
dos computadores é permitido executar a macro correctamente. No outro computador para quando chega à parte de gravar a imagem .MDI.
As macros são as seguintes ou melhor parte delas.
________________________________________________
Sheets("M D").Select
Range("A1").Select
Application.Dialogs(xlDialogPrinterSetup).Show
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Application.ActivePrinter = "Microsoft Office Document Image Writer em
Ne01:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, _
ActivePrinter:="Microsoft Office Document Image Writer em Ne01:", _
Collate:=True, _
PrintToFile:=True, _
PrToFileName:="\\Hdl\cir\Stocks\Coz\Mapas\Mapa de " &
Format(Now, "dd-mmm-yy h-mm-ss") & ".mdi"
__________________________________________________
Sheets("Extemporanea").Select
Application.Dialogs(xlDialogPrinterSetup).Show
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Application.ActivePrinter = "Microsoft Office Document Image Writer em
Ne01:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, _
ActivePrinter:="Microsoft Office Document Image Writer em Ne01:", _
Collate:=True, _
PrintToFile:=True, _
PrToFileName:="\\Hdl\cir\Stocks\Coz\Extemporaneas\Extemporânea
Quando a macro chega a [[Application.ActivePrinter = "Microsoft Office Document Image Writer em Ne01:"]] pára, mas só num computador, se alterar para
[[Application.ActivePrinter = "Microsoft Office Document Image Writer em Ne00:"]], fica a funcionar nesse computador e dá erro no outro.
Serão as portas da impressora?? Como faço para remediar a coisa??
Já tentei retirar [[em Ne00 ou em Ne01]], mas tambem dá erro."
Comentário:
Como possível solução, inserir, no início das macros, o seguinte código:
Dim sStr As String
sStr = Application.ActivePrinter
Application.EnableEvents = False
On Error Resume Next
Application.ActivePrinter = "Microsoft Office Document Image Writer on Ne02:"
If Err.Number = 1004 Then
Application.ActivePrinter = "Microsoft Office Document Image Writer on Ne01:"
Err.Clear
End If
Tópicos relacionados:
C. Moreira, enviou-me uma folha de cálculo, na qual pretendia o seguinte:
Alterar o mês em A1 e o valor em B1. Se o mês for Janeiro, Fevereiro ou Março, as células D1, D2 e D3 assumem o valor de B1, caso contrário ficam com os valores que apresentam.
Apresentou então o exemplo:
E forneceu a solução, ou seja, com a utilização da chamada "referência circular".
Vejamos, então, como foi feito:
Em D1, digitou: =IF(A1="Janeiro";B1;D1)
Em D2: =IF(A1="Fevereiro";B1;D2)
Em D3: =IF(A1="Março";B1;D3)
Depois, fez o seguinte:
Como se pode ver, sempre que em A1 se coloque o mês, o valor transfere-se para a coluna D, para a célula que corresponde ao mês digitado.
Comentário:
O único problema da referência circular é que, se for aberto outro workbook antes deste, aparece, por defeito, o facto de não haver referência circular. Logo, quando se abre o 2º workbook (que tem a tal referência circular) vai aparecer sempre uma mensagem de aviso...
Claro que há uma maneira de resolver o problema e fazer com que a referência circular fique por defeito, mesmo que se abra outro qualquer workbook primeiro: é colocar a seguinte macro no próprio workbook:
Private Sub Workbook_Open()
Application.Iteration = True
End Sub
Deste modo, sempre que o workbook seja aberto, vai ler, à abertura, a macro acima e, assim, activa referência circular.
Tópicos relacionados:
Assim, teremos que digitar, na célula B1 fa Folha 1, a seguinte fórmula: =VLOOKUP(A1;Sheet2!$A$1:$B$10;2)
=IF(B1="";"";IF(RIGHT(B1;1)=1;"";IF(VLOOKUP($A$1;Sheet2!$A$1:$B$10;2)=$B$1;$B$1-1)))
=IF(B2="";"";IF(VALUE(RIGHT(B2;1))=1;"";IF(VLOOKUP($A$1;Sheet2!$A$1:$B$10;2)=$B$1;$B$1-VALUE(RIGHT(B2;1)))))
Tópicos relacionados: