Página 1 de 1

Inconsistência em projeto VBA (erro não identificado)

Enviado: Qui Set 12, 2019 4:46 pm
por leocesar@gmail.com
Boa tarde pessoal!

Estou tendo problemas com uma planilha que tem o objetivo de inserir dados de contas a pagar/receber (manualmente ou via Combo Box com lista suspensa na própria planilha) e depois exportá-lo para um arquivo txt que finalmente será importado em um sistema.

Tenho conhecimento básico em VBA e embora o código esteja possivelmente sujo, as macros estão funcionando corretamente (o objetivo principal do projeto está sendo atendido) com exceção da parte final do código.

Coloquei detalhado as dúvidas como comentário no código e conto com o conhecimento e apoio dos Srs. para me auxiliarem neste projeto.

Segue código:

Código: Selecionar todos

Sub TempCombo_Change() '(ByVal Target As Range)

       
Dim rng As Range
Set rng = Range("D6:D106") 'Se colocar D:D vai até à última linha

For Each Row In rng.Rows


    '(/abre dúvida)-------------------------------------------------------------------------------------
    
    '   Inseri uma TempCombo na Sheet ("Planilha") e coloquei um atalho para chamar a macro lsChamarAutoPreencher()
    '   O atalho é (Ctrl+A)
    
    '   A intenção aqui é que nas células D6:D106 da Sheet ("Planilha") o usuário possa selecionar um Fornecedor
    '   dentre os previamente cadastrados (ele pode fazer isso digitando o nome, ou buscando na TempCombo, acionando
    '   a TempCombo através do atalho (Ctrl+A).
    
    '   Se durante a digitação ou ao buscar na TempCombo o usuário não achar um fornecedor previamente cadastrado,
    '   ele irá cadastrar um novo, digitando ou selecionando na TempCombo o valor "Z-NOVO FORNECEDOR"


    '   Daí gostaria que ao digitar 'OU' selecionar na TempCombo o valor "Z-NOVO FORNECEDOR", o VBA executasse
    '   o código abaixo:
    
If Row.Value = "Z-NOVO FORNECEDOR" Or TempCombo.Value = "Z-NOVO FORNECEDOR" Then


Novo:
    
    Dim novo_fornecedor As String
    
    novo_fornecedor = InputBox("Digite o nome do novo FORNECEDOR conforme cadastrado no sistema", "Novo FORNECEDOR", "Digite aqui")
    
    '   aqui gostaria de colocar uma validação na InputBox para aceitar só caracteres em MAÍSCULA e apresentar uma
    '   MsgBox de erro, informando ao usuário para corrigir se ele digitar em minúscula
    
Sair = InputBox("Está correto:?" & Chr(13) & _
novo_fornecedor, "Lembrete", "Digite SIM se está conforme cadastrado no sistema.")

    If Sair = "SIM" Then
     
    Application.ScreenUpdating = False
    ActiveCell.Value = novo_fornecedor
    ActiveCell.Copy
    
    '   aqui peço ao VBA para copiar conteúdo digitado dentro da InputBox
    '   e colar na Sheet ("Fornecedores") conforme continuação do código abaixo:
   

    Application.Goto ActiveWorkbook.Sheets("Fornecedores").Range("A1")
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    
    '   Ao copiar o conteúdo da ActiveCell da Sheet ("Planilha") e colar na primeira linha em branco
    '   da coluna A, dentro Sheet ("Fornecedores") o VBA vai chamar a Macro1() daquela Sheet pois este
    ' código irá alterar o conteúdo da coluna A e a Macro1() vai reorganizar os dados em ordem alfabética
    
    
    '   Meu maior problema com este código é que neste final, ocorrem três problemas:
    '
    '   1) A planilha fica em Loop, levando sempre para GoTo Novo, sendo que minha inteção era que o
    '      código Goto Novo fosse acionado apenas se a InputBox Sair fosse diferente de "SIM"
    '
    '   2) O conteúdo digitado na InputBox novo_fornecedor é copiado corretamente para a Sheet ("Fornecedores") e o
    '   código da macro1() daquela Sheet é executado corretamente, reordenando a coluna "A" da Sheet ("Fornecedores")
    '   em ordem alfabética porém, este conteúdo que eu digito na InputBox novo_fornecedor da Sheet ("Planilha")
    '   não está ficando gravado na célula ativa em que a InputBox novo_fornecedor está
    '
    '   3) Ao final do código, se todas as sentenças forem atendidas corretamente, gostaria que ao final do código
    '   o VBA gravasse o conteúdo da InputBox novo_fornecedor na célula ativa e movesse o cursor para a primeira
    '   célula à direita desta célula ativa (estando em branco ou não)
    
    End If
    Exit Sub
    
    Else
    GoTo Novo
    
    End If
    
    

Next Row

    '(/fecha dúvida)-------------------------------------------------------------------------------------

End Sub

Re: Inconsistência em projeto VBA (erro não identificado)

Enviado: Seg Set 16, 2019 8:20 am
por leocesar@gmail.com
Meus amigos, bom dia!

Vi que houveram visualizações de minha dúvida, mas não obtive nenhuma resposta até o momento.

Tem algo que eu possa facilitar no texto para compreensão dos Srs.? Perdão pela pergunta, mas como sou novo por aqui, posso ter inserido algo em um formato ou conteúdo incorreto e esteja dificultando a solução de minha dúvida.

Um abraço.

Re: Inconsistência em projeto VBA (erro não identificado)

Enviado: Seg Set 16, 2019 11:17 am
por Reinaldo
Pode disponibilizar seu arquivo ou modelo que seja representativo do mesmo (dados fictícios se necessário); pois fica difícil apenas pelo código sem poder "seguir" os passos que a rotina efetua.

Re: Inconsistência em projeto VBA (erro não identificado)

Enviado: Seg Set 16, 2019 1:39 pm
por leocesar@gmail.com
Reinaldo escreveu: Seg Set 16, 2019 11:17 am Pode disponibilizar seu arquivo ou modelo que seja representativo do mesmo (dados fictícios se necessário); pois fica difícil apenas pelo código sem poder "seguir" os passos que a rotina efetua.
Boa tarde!
Segue.

Re: Inconsistência em projeto VBA (erro não identificado)

Enviado: Qua Set 18, 2019 11:04 pm
por leocesar@gmail.com
Boa noite meus amigos!

Alguém conseguiu ter alguma ideia do que esteja acontecendo em minha planilha?

Re: Inconsistência em projeto VBA (erro não identificado)

Enviado: Sex Set 04, 2020 3:12 pm
por leocesar@gmail.com
Questão solucionada com a função .Find
Fechando a questão.