Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
#23424
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
Você não está autorizado a ver ou baixar esse anexo.
#23435
Já experimentou marcar a permissão para Formatar células ao proteger a planilha ?
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord