Ir ao conteúdo
  • Cadastre-se

Excel Repetir uma código VBA com base no valor do campo de um formulário


Ir à solução Resolvido por AfonsoMira,

Posts recomendados

Olá pessoal, uma boa tarde a todos!

 

Preciso de uma luz, estou engatinhando no VBA e tem me ajudado muito. Recentemente eu fiz uma planilha pra imprimir formulações e inseri um formulário nela com a intenção de registrar e imprimir mais rápido e automático. A planilha funciona assim:

 

E clico num botão e abre o formulário já preenchendo o campo de data e o lote (que no caso é sequencial, eu pego o ultimo registro e somo 100 e obtenho o próximo lote):

 

Private Sub UserForm_Initialize()

 

campo_data = Format(VBA.Now, "dd/mm/yyyy")
ult_linha = Sheets("BASE_MP_OF").Range("K3").End(xlDown).Row

 

campo_código.RowSource = "BASE_MP_OF!K4:K" & ult_linha
campo_nome.RowSource = "CONTROLE!A6:A9"


lote = Sheets("CONTROLE").Range("H5").End(xlDown).Value + 100
campo_lote = lote

campo_código.SetFocus

 

End Sub

 

image.png.5b13db11e198cea32896d9bba63b4d33.png

 

Parte dos campos vão preencher automaticamente como se fosse um PROCV, minha intenção é a seguinte, eu quero que ao apertar o botão IMPRIMIR  o código a seguir seja repetido de acordo com o número de receitas que eu colocar no campo QTD. RECEITAS e que o lote mude a cada impressão:

 

Private Sub imprimir_Click()

 

lin = Sheets("CONTROLE").Range("B5").End(xlDown).Row + 1
formulação = campo_código.Value
qtd = campo_qtd.Value
lote = Sheets("CONTROLE").Range("H5").End(xlDown).Value + 100

 

        Cells(lin, 2) = campo_data.Value
        Cells(lin, 3) = campo_nome.Value
        Cells(lin, 4) = campo_marca.Value
        Cells(lin, 5) = campo_código.Value
        Cells(lin, 6) = campo_descrição.Value
        Cells(lin, 7) = campo_kg.Value
        Cells(lin, 8) = lote
            
        Sheets(formulação).Visible = True
        Sheets(formulação).Select
        Range("D3") = lote
    
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
        ActiveWindow.SelectedSheets.Visible = False

 

End sub

 

Esse código passa o conteúdo dos campos do formulário para uma planilha de registro (CONTROLE) e usa o código da formulação oculta para abri-la e colocar o lote na célula D3 imprimir e oculta novamente. Preciso de uma estrutura para repetir o preenchimento do registro e imprimir a formulação, só que alterando o lote (não sei como posso fazer isso), baseado na quantidade de vezes de vezes que colocar no campo QTD do formulário. Por exemplo:

 

Vou imprimir 3 receitas do código COD1, na tabela de registro as informações preenchidas no formulário vão se repetir 3 vezes só que mudando o lote, e cada vez que mudar o lote ele imprime.

 

Quanto a preencher a tabela e imprimir a receita, deu certinho, só que não manjo nada de estrutura de repetição, eu até tentei usar o For...Next só que não deu certo.

 

Desde já agradeço, se não fui claro o suficiente, eu tento explicar de uma maneira melhor.

Se precisar da planilha vou tirar as formulações e envio.
        

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Solução

@Caio Rodrigues Almeida Então deixa ver se eu entendi direito, você quer repetir o código dependendo da quantidade de receitas certo?


Cada vez que o código repete é para alterar o lote?

 

Veja se isto ajuda:
 

Private Sub imprimir_Click()

qtd_receitas= 'Insira aqui o nome da textbox da quantidade de receitas

'Esta linha serve para caso a qtd de receitas esteja vazia ele assume como sendo apenas uma impressão.
If qtd_receitas = "" then qtd_receitas = 1

For i = 1 to qtd_receitas
  lin = Sheets("CONTROLE").Range("B5").End(xlDown).Row + 1
  formulação = campo_código.Value
  qtd = campo_qtd.Value
  lote = Sheets("CONTROLE").Range("H5").End(xlDown).Value + 100

  Cells(lin, 2) = campo_data.Value
  Cells(lin, 3) = campo_nome.Value
  Cells(lin, 4) = campo_marca.Value
  Cells(lin, 5) = campo_código.Value
  Cells(lin, 6) = campo_descrição.Value
  Cells(lin, 7) = campo_kg.Value
  Cells(lin, 8) = lote

  Sheets(formulação).Visible = True
  Sheets(formulação).Select
  Range("D3") = lote

  ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
  ActiveWindow.SelectedSheets.Visible = False

Next i

End sub

 

Link para o comentário
Compartilhar em outros sites

@AfonsoMira Isso mesmo, eu quero colocar a receita no formulário e colocar a qtd que quero imprimir, a intenção com isso é não precisar abrir o formulário de novo para imprimir a mesmo receita.

 

O problema é que tem que variar o lote, adicionando 100 ao numero de cima.

 

Vou tentar aplicar o que você me mandou e retorno assim que possível, eu tentei usar o for também, mas não deu certo.

 

Obrigado!

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!