Esse comando transforma o ponteiro em ampulheta...:
MousePointer = vbHourglass
...Mas não o use. Ele provoca crashes aleatórios no Excel, de forma que vc nem saberá dizer onde está o problema no código!
quinta-feira, outubro 07, 2010
quarta-feira, outubro 06, 2010
VBA Excel: sobre deslocamento na planilha
Evitar percorrer as células de uma planilha em loop de leitura (por meio do .Activate e .Select), estando ao mesmo tempo dentro de um outro loop de leitura com .Activate e .Select em outra planilha.
Ao tentar passar os dados de uma planilha a outra, às vezes os dados "vazam" e vão cair em outra planilha totalmente não-relacionada.
Parece ser um bug mesmo, com ocorrência aleatória, e nem sempre reprodutível.
Sugestão: usar %hashes, se possível.
Ao tentar passar os dados de uma planilha a outra, às vezes os dados "vazam" e vão cair em outra planilha totalmente não-relacionada.
Parece ser um bug mesmo, com ocorrência aleatória, e nem sempre reprodutível.
Sugestão: usar %hashes, se possível.
sexta-feira, março 26, 2010
Excluir item de hash..
O Help do VBA nao ajuda nisso...
Estou tentando:
hash_1.Remove (item)
Será que funfa?
Estou tentando:
hash_1.Remove (item)
Será que funfa?
terça-feira, fevereiro 23, 2010
Hash em VBA
Quanto mais eu conheço VBA.. mais eu dou valor ao Perl!!
Olha que complicação pra criar um Hash:
Em Perl, bastaria %aaa = ( )....
Olha que complicação pra criar um Hash:
Sub aaa()
Set d = CreateObject("Scripting.dictionary")
d.Add "A", "B"
d.Add "C", "D"
a = d.items
b = d.keys
For i = 0 To d.Count - 1
MsgBox a(i) & ", " & b(i)
Next i
End Sub
Em Perl, bastaria %aaa = ( )....
sexta-feira, fevereiro 19, 2010
Errormsg: Erro de Compilação: É impossível localizar o projeto ou biblioteca
Erro ocorre ao tentar abrir um arquivo com macros em outro computador, possivelmente com alguns controles adicionais de Excel desativados. Solução possível (ainda testando): na máquina onde deu erro, entrar no VBE e selecionar para cada projeto (form): Ferramentas -> Referências. Ele deve mostrar o que saiu errado. Essa foi a janela que resultou:
Teoricamente a solução seria simplesmente recompilar o projeto desmarcando esses controles, (já que seria inviável pedir a todos os usuários que instalem os controles ausentes -- a não ser que haja uma forma automática de fazê-lo?).
[UPDATE]
Possível forma automática: Iniciar->Executar->CMD
Copiar DLL para \windows\system32
reg32srv Nome_da_DLL
Por exemplo, a solução seria adicionar o Mscomct2.ocx em todas as máquinas usando um pacote contendo um .BAT que faria a cópia da DLL e posterior registro.
[/UPDATE]
É mais viável dar um "jeitinho" e alterar o projeto do que alterar o Excel de cada usuário final...
Evento Change() em um ComboBox
Se algum evento altera o conteúdo de um ComboBox, convém logo no início do evento limpar todo o conteúdo que existia anteriormente nesse ComboBox. Ex.:
A partir disso, tudo pronto para trabalhar com .AddItem() ou .List().
Dim x As Integer
For x = 1 To cboBox1.ListCount
cboBox1.RemoveItem 0
Next x
A partir disso, tudo pronto para trabalhar com .AddItem() ou .List().
quinta-feira, fevereiro 18, 2010
Recuperar células adjacentes a um Find()
No help do Excel, o Find() deveria retornar um range. O que ele retorna, na verdade, é o .Value da célula localizada. Mas se for necessário navegar nas células adjacentes deve-se considerar como range mesmo.
Veja exemplo:
Veja exemplo:
Set Mat = Worksheets("Banco_Sistema").Range("E:E").Find(txtMat.Text)Procuramos o texto colocado no txtBox, e retornamos o Value da primeira célula à direita.
If Mat Is Nothing Then
Dim Resposta As Integer
Resposta = MsgBox("Servidor não encontrado!! Deseja adicioná-lo manualmente?", vbYesNo)
Select Case Resposta
Case vbYes
txtNome.Visible = True
labNomeServidor.Visible = False
Case vbNo
txtMat.Text = ""
labNomeServidor.Caption = "Nome do Servidor"
txtNome.Text = ""
txtNome.Visible = False
labNomeServidor.Visible = True
End Select
Else
enderecoMat = Mat.Address(False, False) 'Referencia relativa
Dim Resposta2 As Integer
Resposta2 = MsgBox("Por favor, confirme os dados do servidor selecionado:" & vbNewLine & vbNewLine & "Matrícula: " & txtMat.Text & vbNewLine & "Nome: " & Mat.Offset(0, 1), vbYesNo)
Select Case Resposta2
Case vbYes
labNomeServidor.Caption = Mat.Offset(0, 1)
Case vbNo
labNomeServidor.Caption = "Nome do Servidor"
txtNome.Text = ""
Mat = ""
End Select
End If
Assinar:
Postagens (Atom)