Página 1 de 1

Erro 1004 - Erro de definição de aplicativo

Enviado: 25 Mai 2017 às 16:58
por VitorOliveiraDeSouza
Olá,

Estou com um problema com o método Range e não consegui encontrar solução em nenhum outro tópico ou fórum.
Meu problema é bem específico e acontece de certa forma aleatoriamente.

O que acontece é que fiz um código em VBA para automatizar uma serie de funções em uma planilha. Quando fiz o código eu estava em um computador com Windows 10 e Office 2010, porém a planilha foi desenvolvida pra ser usada por uma pessoa em um computador com Windows XP e Office 2007.

Não existe a possibilidade de eu atualizar o Office ou o Windows.

O meu problema começou quando fui testar a planilha no computador do usuário (Office 2007). No meu computador o código funcionou perfeitamente, porém ao rodar o teste no computador final ocorreu um erro de tempo de execução, o famoso 1004. Não consegui até agora encontrar o problema.
Já utilizei o método Select antes do Range, porém isso só piorou meu problema sendo que agora nem no meu computador funciona mais o código.

Segue a parte do código em que estou tendo problemas:
Código: Selecionar todos
Sub Imprimir()

Dim QtdOrdensParaImpressao, Linha As Integer
Dim LinhaDasOrdens() As Integer

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Conta a quantidade de ordens que foram inseridas no relatório para impressão''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Linha = 5
QtdOrdensParaImpressao = 0
While Linha <= 28

    If Plan1.Cells(Linha, 3) <> "" Then
        QtdOrdensParaImpressao = QtdOrdensParaImpressao + 1
        
        ReDim Preserve LinhaDasOrdens(0 To QtdOrdensParaImpressao) 'Redimensiona array das linhas onde estão as ordens inseridas
        LinhaDasOrdens(QtdOrdensParaImpressao) = Linha 'Salva o número da linha em que foi inserida informações das ordens
    End If
    Linha = Linha + 3
Wend

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Verifica se alguma ordem inserida no relatório para impressão já foi impressa alguma vez'''''''''
'Isso evita de uma ordem ser produzida duas vezes'''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim OrdemJaImpressa() As Variant
Dim QtdJaImpressa As Integer

QtdJaImpressa = 0
If QtdOrdensParaImpressao > 0 Then

    ' Procura se essa ordem já foi impressa durante o tempo que essa planilha está aberta
    For i = 1 To QtdOrdensParaImpressao
        For j = 2 To 1000
            If Plan9.Cells(j, 1) = Plan1.Cells(LinhaDasOrdens(i), 3) Then
                QtdJaImpressa = QtdJaImpressa + 1
                ReDim Preserve OrdemJaImpressa(0 To QtdJaImpressa) 'Array que salva as ordens que já foram impressas
                OrdemJaImpressa(QtdJaImpressa) = Plan1.Cells(LinhaDasOrdens(i), 3) 'Salva a ordem que já foi impressa
                Range("C" & LinhaDasOrdens(i)).Interior.Color = RGB(255, 0, 0) 'Pinta
            End If
        Next j
    Next i
    
    ' Procura no banco de dados externo se alguma ordem já foi impressa.
    For i = 1 To QtdOrdensParaImpressao
        For j = 2 To 1000
            If Plan2.Cells(j, 1) = Plan1.Cells(LinhaDasOrdens(i), 3) Then
                QtdJaImpressa = QtdJaImpressa + 1
                ReDim Preserve OrdemJaImpressa(0 To QtdJaImpressa) 'Array que salva as ordens que já foram impressas
                OrdemJaImpressa(QtdJaImpressa) = Plan1.Cells(LinhaDasOrdens(i), 3) 'Salva a ordem que já foi impressa
                Range("C" & LinhaDasOrdens(i)).Interior.Color = RGB(255, 0, 0) 'Pinta
            End If
        Next j
    Next i

    
    If QtdJaImpressa > 0 Then
        'MsgBox "ORDEM(S) EM DESTAQUE JÁ FOI(FORAM) IMPRESSA(S)! DESEJA CONTINUAR?"
        resultado = MsgBox("ORDEM(S) EM DESTAQUE JÁ FOI(FORAM) IMPRESSA(S)! DESEJA CONTINUAR?", vbYesNo, "ORDENS JÁ IMPRESSAS")
        If resultado = vbYes Then
            Range("C5:E28").Interior.Color = RGB(54, 96, 146) 'Pinta
        Else
            ' Trunca função
            Range("C5:E28").Interior.Color = RGB(54, 96, 146) 'Pinta
            Exit Sub
        End If
    End If

End If

Re: Erro 1004 - Erro de definição de aplicativo

Enviado: 25 Mai 2017 às 21:35
por osvaldomp
Já experimentou marcar a permissão para Formatar células ao proteger a planilha ?