VBA Código abaixo apresenta: Erro de compilação / Erro de Sintaxe (Podem me ajudar?)

14 views
Skip to first unread message

Leandro Bathista

unread,
Jan 14, 2025, 11:55:09 AM1/14/25
to msex...@googlegroups.com
Sub INSERIR_PRODUTO_2025()
    On Error GoTo TratarErro
    Application.ScreenUpdating = False
   
    Dim UltimaLinhaENTRADA_PROD As Long
    Dim UltimaLinhaPREÇO_VENDA As Long
    Dim UltimaLinhaInserir As Long
    Dim CopiarIntervalo As Range
    Dim wsinserir As Worksheet, wsENTRADA_PROD As Worksheet, wsPREÇO_VENDA As Worksheet
   
    ' Definir planilhas
    Set wsinserir = Sheets("INSERIR_PRODUTO_2025")
    Set wsENTRADA_PROD = Sheets("ENTRADA_PROD")
    Set wsPREÇO_VENDA = Sheets("PREÇO_VENDA")
   
    ' Determinar última linha nas planilhas destino
    UltimaLinhaENTRADA_PROD = wsENTRADA_PROD.Cells(wsENTRADA_PROD.Rows.Count, 3).End(xlUp).Row
    UltimaLinhaPREÇO_VENDA = wsPREÇO_VENDA.Cells(wsPREÇO_VENDA.Rows.Count, 3).End(xlUp).Row
   
    ' Determinar última linha preenchida na planilha de inserção
    UltimaLinhaInserir = wsinserir.Cells(wsinserir.Rows.Count, 2).End(xlUp).Row
   
    If UltimaLinhaInserir < 4 Then
        MsgBox "Nenhum dado para inserir.", vbExclamation
        Exit Sub
    End If
   
    ' Copiar os dados DATA / CÓDIGO
    Set CopiarIntervalo = wsinserir.Range("B4:C" & UltimaLinhaInserir)
    wsENTRADA_PROD.Range("B" & UltimaLinhaENTRADA_PROD + 1).Resize(CopiarIntervalo.Rows.Count, CopiarIntervalo.Columns.Count).Value = CopiarIntervalo.Value
   
    ' Outras operações de cópia (sem alterações significativas)
    ' ...
    '  Copiar Grupo / Conta / Observação / Entrada Prod.
    Set CopiarIntervalo = wsinserir.Range("E4:I" & UltimaLinhaInserir)
    wsENTRADA_PROD.Range("D" & UltimaLinhaENTRADA_PROD + 1).Resize(CopiarIntervalo.Rows.Count, CopiarIntervalo.Columns.Count).Value = CopiarIntervalo.Value
   
    'Custo / Valor / Desc. / Total > Valor Contábil
    Set CopiarIntervalo = wsinserir.Range("J4:M" & UltimaLinhaInserir)
    wsENTRADA_PROD.Range("I" & UltimaLinhaENTRADA_PROD + 1).Resize(CopiarIntervalo.Rows.Count, CopiarIntervalo.Columns.Count).Value = CopiarIntervalo.Value
   
    ' Aplicar a formatação ao intervalo copiado
     wsENTRADA_PROD.Range("I" & UltimaLinhaENTRADA_PROD + 1 & ":M" & UltimaLinhaENTRADA_PROD + CopiarIntervalo.Rows.Count).NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"

    ' Chamar o cálculo do saldo
    Call InserirSaldo(UltimaLinhaENTRADA_PROD, CopiarIntervalo.Rows.Count)
       
     ' Copiar Cod. Fornecdor
     Set CopiarIntervalo = wsinserir.Range("D4:D" & UltimaLinhaInserir)
     wsENTRADA_PROD.Range("O" & UltimaLinhaENTRADA_PROD + 1).Resize(CopiarIntervalo.Rows.Count, CopiarIntervalo.Columns.Count).Value = CopiarIntervalo.Value
   
     ' Copiar os dados  FORNECEDOR
    Set CopiarIntervalo = wsinserir.Range("N4:N" & UltimaLinhaInserir)
    wsENTRADA_PROD.Range("P" & UltimaLinhaENTRADA_PROD + 1).Resize(CopiarIntervalo.Rows.Count, CopiarIntervalo.Columns.Count).Value = CopiarIntervalo.Value

    ' Copiar os dados  CONCATENAR
    Set CopiarIntervalo = wsinserir.Range("AI4:AK" & UltimaLinhaInserir)
    wsENTRADA_PROD.Range("Q" & UltimaLinhaENTRADA_PROD + 1).Resize(CopiarIntervalo.Rows.Count, CopiarIntervalo.Columns.Count).Value = CopiarIntervalo.Value

    'PREÇO DE VENDA
   
    ' Copiar os dados DATA / CÓDIGO
    Set CopiarIntervalo = wsinserir.Range("B4:C" & UltimaLinhaInserir)
    wsPREÇO_VENDA.Range("B" & UltimaLinhaPREÇO_VENDA + 1).Resize(CopiarIntervalo.Rows.Count, CopiarIntervalo.Columns.Count).Value = CopiarIntervalo.Value
   
    ' Copiar > Grupo / Produto
    Set CopiarIntervalo = wsinserir.Range("E4:F" & UltimaLinhaInserir)
    wsPREÇO_VENDA.Range("D" & UltimaLinhaPREÇO_VENDA + 1).Resize(CopiarIntervalo.Rows.Count, CopiarIntervalo.Columns.Count).Value = CopiarIntervalo.Value
   
    ' Copiar > Valor Dia  Contábil
    Set CopiarIntervalo = wsinserir.Range("M4:M" & UltimaLinhaInserir)
    wsPREÇO_VENDA.Range("F" & UltimaLinhaPREÇO_VENDA + 1).Resize(CopiarIntervalo.Rows.Count, CopiarIntervalo.Columns.Count).Value = CopiarIntervalo.Value
   
    ' Aplicar a formatação ao intervalo copiado
    wsPREÇO_VENDA.Range("F" & UltimaLinhaPREÇO_VENDA + 1 & ":G" & UltimaLinhaPREÇO_VENDA + CopiarIntervalo.Rows.Count).NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"

    ' Chamar o cálculo do saldo
    Call InserirSaldo(UltimaLinhaPREÇO_VENDA, CopiarIntervalo.Rows.Count)
       
       
     'Copiar > Estoque  Entrada do Produto
      Set CopiarIntervalo = wsinserir.Range("P4:P" & UltimaLinhaInserir)
      wsPREÇO_VENDA.Range("H" & UltimaLinhaPREÇO_VENDA + 1).Resize(CopiarIntervalo.Rows.Count, CopiarIntervalo.Columns.Count).Value = CopiarIntervalo.Value
                 
                 
    ' Copiar > Custo Produto  Contábil
    Set CopiarIntervalo = wsinserir.Range("Q4:AG" & UltimaLinhaInserir)
    wsPREÇO_VENDA.Range("I" & UltimaLinhaPREÇO_VENDA + 1).Resize(CopiarIntervalo.Rows.Count, CopiarIntervalo.Columns.Count).Value = CopiarIntervalo.Value
   
    ' Aplicar a formatação ao intervalo copiado
    wsPREÇO_VENDA.Range("I" & UltimaLinhaPREÇO_VENDA + 1 & UltimaLinhaPREÇO_VENDA + CopiarIntervalo.Rows.Count).NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
   

    MsgBox "Dados inseridos e saldo calculado com sucesso!", vbInformation
    Application.ScreenUpdating = True
    Exit Sub
   
TratarErro:
    MsgBox "Erro ao executar a macro: " & Err.Description, vbCritical
    Application.ScreenUpdating = True
End Sub

Sub InserirSaldo(UltimaLinhaENTRADA_PROD As Long, CopiarLinhas As Long)
    Dim SaldoFormula As String
    Dim i As Long
    Dim wsENTRADA_PROD As Worksheet
   
    ' Definir a planilha de destino
    Set wsENTRADA_PROD = Sheets("ENTRADA_PROD")
   
    ' Inserir SALDO na coluna M
    For i = 0 To CopiarLinhas - 1
        If UltimaLinhaENTRADA_PROD + i = 1 Then
            ' Primeira linha com saldo inicial
            SaldoFormula = "=L" & (UltimaLinhaENTRADA_PROD + 1)
        Else
            ' Linhas subsequentes: soma acumulada do saldo
            SaldoFormula = "=M" & (UltimaLinhaENTRADA_PROD + i) & "+L" & (UltimaLinhaENTRADA_PROD + 1 + i)
        End If
       
        ' Aplicar a fórmula na célula da coluna M
        wsENTRADA_PROD.Range("M" & (UltimaLinhaENTRADA_PROD + 1 + i)).Formula = SaldoFormula
    Next i
End Sub



AleXceL

unread,
Jan 15, 2025, 9:14:29 PM1/15/25
to msex...@googlegroups.com
Leandro,
Sem o arquivo, fica difícil te auxiliar.
Consultando o arquivo que você enviou em 2020 vi que estas planilhas estão com nomes diferentes:

  Set wsinserir = Sheets("INSERIR_PRODUTO_2025") >>> não tinha _2025 no nome.
    Set wsENTRADA_PROD = Sheets("ENTRADA_PROD") >>> era ENTRADA_PRODUTO

Verifique se estão com os nomes estipulados.

[ ]
ALeXceL
Oliveira/MG

--
Participe deste Grupo: envie e-Mail em branco para MsExcelBR...@googlegroups.com
---
You received this message because you are subscribed to the Google Groups "MsExcelBR" group.
To unsubscribe from this group and stop receiving emails from it, send an email to msexcelbr+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/msexcelbr/CAHjBoXzNJegVvJDO2SXv6%3DXUfTJ%3Dy1gGRRrmoqjr0Fx4iuOczA%40mail.gmail.com.


--
  Alexandre Corrêa
Ale...@Gmail.com
     Oliveira - MG
          BraZiL

Leandro Bathista

unread,
Jan 16, 2025, 11:10:18 AM1/16/25
to msex...@googlegroups.com

Obrigado por responder. Erro já corrigido. Dificuldade agora está:- FormatNumber

' Aplicar a formatação ao intervalo copiado          wsPREÇO_VENDA.Range("I" & UltimaLinhaPREÇO_VENDA + 1 & UltimaLinhaPREÇO_VENDA + CopiarIntervalo.Rows.Count).NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"

    Format: - CONTÁBIL  Coluna “F” e “G” esta OK apresenta R$.

Coluna “I” em diante não consegui acertar.

Usando este: NumberFormat = "R$ #,##0.00;R$ (#,##0.00);R$ -;@" não aparece o R$

Obrigado por sua atenção.


image.png


Não contém vírus.www.avg.com

Alexandre Corrêa (ALeXceL)

unread,
Jan 28, 2025, 9:25:02 AM1/28/25
to MsExcelBR
Você deve inserir uma interrupção nessa linha para, uma vez interrompida a execução, fazer a inspeção dos valores e, com isso, conseguir identificar possível inconsistência.

Para  conseguir essa interrupção faça o seguinte:

- No VBE, selecione a linha desejada e tecle F9
- Em seguida, execute o código

O código irá parar a execução nessa linha. Passe o mouse por sobre as variáveis para obter informações sobre seu estado atual.

[ ]
ALeXceL
Oliveira/MG
Reply all
Reply to author
Forward
0 new messages