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:
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
Pergunta
leocesar
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:
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
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.