Erro em script VBA com planilha para importação de dados

22/09/2019

0

VB

Boa noite 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:


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

Leonardo

Leonardo

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar