Implementando validade de aplicação MS Access ou MS Excel com VBA

inadimplenteSe você possui uma aplicação MS Access ou MS Excel e deseja que, periodicamente, seja bloqueada automaticamente caso seu usuário não pague a conta então entre em contato, pois possuo uma solução para este problema.

 

Publicado em MS Access | Etiquetas , | Deixe o seu comentário

Ao tentar registrar uma DLL ou OCX com o comando REGSVR32 no windows 7 obtemos um erro 0X80004005

Para utilizar-se de componentes ActiveX desenvolvidos por terceiros no MS Office temos que primeiramente registrá-lo na máquina em que ele será utilizado utilizando o comando regsvr32 no prompt de comando:

tentando registrar regsvr32

Porém, ao executar este comando no console de uma máquina com Windows 7 64 bits obtemos o seguinte erro:

erro regsvr32

Para contornar este problema devemos abrir o console no modo administrador. Para tanto: (a) abra a caixa de pesquisa do Windows 7 e digite “cmd”, (b) mantendo as teclas “Ctrl + Shift” pressionadas aperte “Enter”:

console administrador

Após isso ter sido feito e executarmos novamente o comando regsvr32 obtemos a mensagem de sucesso:

sucesso ao registrar regsvr32

Então podemos começar a utilizar o controle ActiveX, por exemplo, na planilha do MS Excel. Para tanto, selecionamos a opção [Mais Controles]:

selecionando um novo controle activex

Achamos o referido controle registrado:

achando o controle Recem Registrado

E o utilizamos:

controle exibido

Faça o download desta ocx e registre-a em sua máquina para testar no MS Excel.

Veja também:
Código fonte de várias OCX e DLL que desenvolvi em VB6

Publicado em Visual Basic 6.0 e VBA | Etiquetas , , , , , | 1 Comentário

Você recebe uma mensagem de erro “Falha no logon do Serviço de Perfil de Usuário”

Outro dia não conseguia me autenticar em meu computador. E, para piorar a vida, tinha apenas o meu usuário  (Administrador) criado em minha máquina porém com falha de logon…

Para começar, re-iniciei meu computador em MODO DE SEGURANÇA COM PROMPT DE COMANDO e usei os comandos abaixo:

Adiciona um usuário: net user nome-da-conta /add

Coloca usuário existente em um grupo:  net localgroup administrators nome-da-conta /add

Você talvez tenha de substituir o nome do grupo de ADMINISTRATORS para ADMINISTRADORES.

Para corrigir o perfil de conta de usuário, siga estas etapas:

Importante Essa seção, método ou tarefa contém etapas que descrevem como modificar o Registro. No entanto, sérios problemas poderão ocorrer caso você modifique o Registro incorretamente. Portanto, execute essas etapas cuidadosamente. Para ter mais proteção, faça um backup do Registro antes de modificá-lo. Assim, se ocorrer algum problema, você poderá restaurar o Registro. Para obter mais informações sobre como fazer backup e restaurar o Registro, clique no número abaixo para exibir o artigo da Base de Dados de Conhecimento Microsoft:

322756 Como fazer o backup e restaurar o Registro no Windows. Como fazer o backup e restaurar o Registro no Windows
  1. Clique em Iniciar, digite regedit na caixa Pesquisar e pressione ENTER.
  2. No Editor do Registro, localize e clique na seguinte subchave do Registro:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
  3. No painel de navegação, localize a pasta que começa com S-1-5 (chave SID) seguido por um número longo.
  4. Clique em cada pasta S-1-5, localize a entrada ProfileImagePath no painel de detalhes e clique duas vezes para certificar-se de que este é o perfil de conta de usuário que tem um erro.
     
    2805029
    • Se houver duas pastas cujo nome comece com S-1-5 seguido pelos mesmos números longos e um deles terminar com .bak, você tem que renomear a pasta .bak. Para fazer isto, siga estas etapas:
      1. Clique com o botão direito do mouse na pasta sem .bak e clique em Renomear. Digite .ba e pressione ENTER.
         
         

        2805041

      2. Clique com o botão direito do mouse na pasta com o nome .bak e clique em Renomear. Remova .bakno final do nome da pasta e pressione ENTER.
         
         

        2805042

      3. Clique com o botão direito do mouse na pasta com o nome .ba e clique em Renomear. Altere o .bapara .bak no final do nome da pasta e pressione ENTER.
         
         

        2805043

    • Se houver apenas uma pasta cujo nome comece com S-1-5 seguido por um número longo e terminando com.bak. Clique com o botão direito do mouse na pasta e clique em Renomear. Remova o .bak no final do nome da pasta e pressione ENTER.
    • Se houver duas pastas cujo nome comece com S-1-5 seguido pelos mesmos números longos e um deles terminar com .bak, você tem que renomear a pasta .bak. Para fazer isto, siga estas etapas:
      1. Clique com o botão direito do mouse na pasta sem .bak e clique em Renomear. Digite .ba e pressione ENTER.
         
         

        2805044

      2. Clique com o botão direito do mouse na pasta .bak e clique em Renomear. Remova .bak no final do nome da pasta e pressione ENTER.
         
         

        2805045

      3. Clique com o botão direito do mouse na pasta .ba e clique em Renomear. Altere o .ba para .bak no final do nome da pasta e pressione ENTER.
         
         

        2805046

    • Se houver apenas uma pasta cujo nome comece com S-1-5 seguido por um número longo e terminando com.bak. Clique com o botão direito do mouse na pasta e clique em Renomear. Remova o .bak no final do nome da pasta e pressione ENTER.
  5. Clique com o botão direito na pasta sem .bak no painel de detalhes, clique duas vezes em RefCount, digite 0 e clique em OK.
     
     

    2805047

  6. Clique na pasta sem o .bak, clique duas vezes em Estado no painel de detalhes, digite 0 e clique em OK.
     
     

    2805048

  7. Feche o Editor do Registro.
  8. Reinicie o computador.
  9. Faça logon novamente com sua conta.

Referências deste artigo:

http://support.microsoft.com/kb/947215/pt-br

http://tutoriaispc.com.br/criar-gerenciar-contas-usuario-utilizando-prompt-comandos-windows-7/

Publicado em Dicas, Microsoft | Etiquetas | Deixe o seu comentário

Abrindo planilhas do MS Excel em uma nova janela (para Windows XP)

Transcrevi este artigo do site oficial da Microsoft, pois no final dele faltou uma informação que irei destacar em vermelho. Se necessitar saber em outras versões do Windows pode-se encontrar as informações no link abaixo.

Site:

http://support.microsoft.com/kb/2551928/pt-br#xp

 

Para o Windows XP

  1. Clique em Iniciar e, a seguir, em Meu computador.

    2657982

  2. Clique em Ferramentas e depois em Opções de pasta.

    2657983

  3. Na janela Opções de pasta, clique na guia Tipos de arquivo.

    2658027

  4. Procure o formato de arquivo XLSX (folha de cálculo Microsoft Office Excel), selecione-o e clique em Avançado.

    2658028

  5. Na janela Editar tipo de arquivo, clique em Novo.

    2658029

  6. No campo Ação, digite um nome qualquer (no exemplo, Abrir em Nova Janela) e no campo Aplicativo usado para executar a ação: digite “C:\Arquivos de programa\Microsoft Office\Office12\EXCEL.EXE” “%1″

(observação importante: após clicar no botão OK na janela abaixo (Nova Ação) clique no botão [Definir Padrão] a para a nova ação criada na janela [Editar tipo  de Arquivo].)

 2658030



Observação: se estiver usando o Excel 2010 no campo Aplicativo usado para executar a ação, você deverá digitar“C:\Arquivos de programa \Microsoft Office\Office14\EXCEL.EXE” “%1″.

7. Volte a abrir um arquivo do Excel para que se abra numa nova janela.

Publicado em Dicas | Etiquetas , , , , | Deixe o seu comentário

Método para fazer log em arquivo texto em projetos MS Access

Public Sub log(Optional ByVal s1 As String, Optional ByVal s2 As String, Optional ByVal s3 As String, _
Optional ByVal s4 As String, Optional ByVal s5 As String, Optional ByVal s6 As String, Optional ByVal s7 As String, _
Optional ByVal s8 As String, Optional ByVal s9 As String, Optional ByVal s10 As String, Optional ByVal s11 As String, _
Optional ByVal s12 As String, Optional ByVal s13 As String, Optional ByVal s14 As String, Optional ByVal s15 As String, _
Optional ByVal s16 As String, Optional ByVal s17 As String, Optional ByVal s18 As String, Optional ByVal s19 As String, _
Optional ByVal s20 As String, Optional ByVal s21 As String, Optional ByVal s22 As String, Optional ByVal s23 As String, _
Optional ByVal s24 As String, Optional ByVal s25 As String)
 'http://msdn.microsoft.com/en-us/library/office/gg264278(v=office.15).aspx
 Dim folder As String
 folder = Application.CurrentProject.path & "\"
 
 
 Dim file As String
 file = Dir(folder & "*.txt")
 
 Open folder & "log.txt" For Append As #1
 Print #1, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18, s19, s20, s21, s22, s23, s24, s25
 Close #1
End Sub
Publicado em MS Access, Visual Basic 6.0 e VBA | Etiquetas , | Deixe o seu comentário

Substituindo o nome do arquivo com VBA

Imagine que você tem um endereço de arquivo armazenado em uma variável String e necessita substituir apenas o nome do arquivo:

“d:\meus documentos\projeto1\outra sub pasta\cadastro cliente.xlsx

Ai você apenas quer que o nome do arquivo seja de [cadastro cliente.xlsx] para [cadastro do pedro.xlsx].

Public Function ReplaceFileName(ByVal path As String, ByVal filename As String)
 Dim parts() As String
 Dim newPath As String
 parts = Split(path, "\", , vbTextCompare)
 Dim i As Integer
 For i = 0 To UBound(parts) - 1
    newPath = newPath & Trim(parts(i)) & "\"
 Next i
 ReplaceFileName = newPath & filename
End Function

Veja o resultado na janela imediata:

?ReplaceFileName(“d:\meus documentos\projeto1\outra sub pasta\cadastro cliente.xlsx”,”cadastro do pedro.xlsx”)
d:\meus documentos\projeto1\outra sub pasta\cadastro do pedro.xlsx

Publicado em Visual Basic 6.0 e VBA | Etiquetas | Deixe o seu comentário

Removendo espaços extras entre as palavras de um texto com VBA

Com o código abaixo pode-se remover os espaços extras entre as palavras de um texto:

Public Function removeExtraSpaceBetweenWords(ByVal str As String) As String
 Dim astr() As String

 astr = Split(str, " ", , vbTextCompare)
 str = ""
 Dim i As Integer
 For i = 0 To UBound(astr)
     'Debug.Print astr(i), astr(i) = ""
     If astr(i) <> "" Then
         str = str & astr(i) & " "
     End If
 Next i
 
 removeExtraSpaceBetweenWords = Trim(str)
End Function

Exemplo de uso com a Janela imediata:

?removeExtraSpaceBetweenWords(“Pedro        Abs       isso é      um        teste”)

resultado:

Pedro Abs isso é um teste

Publicado em Visual Basic 6.0 e VBA | Etiquetas , | Deixe o seu comentário

Listando todas as celulas nomeadas de uma planilha MS Excel

Em um módulo padrão:

Option Explicit

 Sub ListAllNames()
 Dim n As Name
     For Each n In ActiveWorkbook.Names
         Debug.Print n.Name, n.RefersTo
     Next n
 End Sub

 

Na janela imediata:

ListAllNames
Cargo =Identificação!$G$19
CEP =Identificação!$P$14
Cidade =Identificação!$G$14
CNPJ =Identificação!$G$10
Contato =Identificação!$G$18
DataDeFundacao =Identificação!$P$12
Distribuidor =Identificação!$K$17
Email =Identificação!$G$20
Endereco =Identificação!$G$13
Exporta =Identificação!$E$25
Fabricante =Identificação!$G$17
Fax =Identificação!$P$20
FormaLegal =Identificação!$G$12
GrupoInternacional =Identificação!$G$16
Inscricao =Identificação!$G$11
NaturezaDeAtividade =Identificação!$G$21
NomeFantasia =Identificação!$G$9
NumeroDaInscricao =Identificação!$P$11
NumeroDeFuncionarios =Identificação!$P$10
PrestadorDeServicos =Identificação!$O$17
PrincipaisProdutos =Identificação!$G$22
RazaoSocial =Identificação!$G$8
Telefone =Identificação!$P$19
WebSite =Identificação!$G$15

O texto a esquerda do sinal de igual (=) é o nome da celula nomeada e a direita é o endereço.

Publicado em Visual Basic 6.0 e VBA | Etiquetas , | Deixe o seu comentário

Sobrecarga de métodos com VBA (Overload)

Na linguagem de programação Java é possível definir, em uma classe, dois métodos com o mesmo nome porém com assinaturas diferentes. Faz parte da assinatura do método primeiramente o seu nome seguido dos tipos dos parâmetros que este contém. Abaixo um simples exemplo de sobrecarga de métodos na linguagem Java:

public void changeSize(int size, String name) { }

public int changeSize(int size, float pattern) { }

public void changeSize(float pattern, String name) throws IOException { }

Em negrito, está destacado aquilo que faz parte a assinatura do método conforme já mencionado acima. Sobrecarga de métodos é uma das características das boas linguagens orientadas a objetos.

Mas … e no VBA ? Como funciona a sobrecarga de métodos ?

Apesar do VBA possuir características de uma linguagem orientada a objetos como o Java esta não é totalmente orientada a objetos. Veja este post para outros detalhes.

Veja que ao tentar compilar uma aplicação VBA que contenha dois métodos com o mesmo nome a linguagem reclama:

Tentativa de sobrecarga com VBA

Obs: para compilar vá no menu Depurar\Compilar VBA Project:

Compilar VBA

E então … como podemos fazer uma “sobrecarga” do método doStuff para que ele realize comportamentos diferentes baseado no tipo do(s)  seu(s) parâmetro(s) ?

Vamos usar o “mágico” tipo Variant. Variant pode representar qualquer tipo de variável no VBA: Textos, Números inteiros ou decimais, objetos, enumerações, etc …

Abaixo, o código VBA compila e estamos simulando a sobrecarga (overload) do método doStuff:

Sobrecarga VBA OK

Mais um detalhe, não podemos nos esquecer do uso de parâmetros opcionais nas funções e métodos do VBA para tratar sobrecarga de métodos.

Veja também:

Artigos com a palavra overload.

Artigos com a palavra sobrecarga.

VBA orientado a objetos

Outros posts de VBA e VB6

Publicado em Java, MS Access, OOAD e POO, Visual Basic 6.0 e VBA | Etiquetas , , , , | Deixe o seu comentário

Como automatizar a vinculação de tabelas no MS Access

É uma prática usual para quem trabalha com MS Access separar o arquivo de DADOS e de SISTEMA. Inclusive a Microsoft sugere esta boa prática, tanto é que no próprio MS Access há uma ferramenta de separação de tabelas e outros conteúdos. Veja imagem abaixo:

Imagem

 

Definindo, arquivo de DADOS seria o *.mdb ou *.accdb que contém as tabelas. Arquivo de SISTEMA é o que contém todos os outros objetos tais como: formulários, relatórios, marcos, módulos, módulos de classe, consultas, etc…

O problema é que se o usuário fica mudando o arquivo de dados de lugar, a re-vinculação das tabelas não é algo assim … muito intuitivo … do tipo que um usuário comum (sem nenhum conhecimento de MS Access) faria com facilidade.

Deixo, então, um exemplo para download de como automatizar esta vinculação das tabelas com VBA:

VincularTabelas.rar

Veja: Outros posts de VBA e VB6

Publicado em MS Access, Visual Basic 6.0 e VBA | Etiquetas , , | Deixe o seu comentário