none
Tipos incompatíveis RRS feed

  • Pergunta

  • Boa tarde,
    Tenho a seguinte macro
    Private Sub ImportarTXTListaMaterial_Click()
        Dim Campos As Variant
        Dim arra(941), Arquivotxt, ca, cb, cc, cd, ce, aspas, layermm As String
        Dim layeraspas As String
        Dim strNome, strName, var1, var2, sPath, auxfilename As String
        Dim i, j, K, a, tamanho, comsPath, comArquivotxt, comauxfilename, aux1, aux2, aux3 As Long
        Dim contador, lin, z, quantidade, contresp, intErro As Integer
            contador = 0
        Dim oApp  As Excel.Application
        Dim oWks As Excel.Workbook
        Dim wsOrigem As Worksheet
        Dim wsDestino As Worksheet
        Dim filename As Variant
       
        'abre um "mini" explorer de arquivos
        Arquivotxt = Application.GetOpenFilename("Arquivos Texto(*.txt), *.txt")
        'abre o arquivo texto
        Open Arquivotxt For Input As #1
        
        K = 2
        'Enquanto não chega ao fim do arquivo texto
         While Not (EOF(1))
            'Captura 1 linha e armazena na variável Linha
            Line Input #1, linha
            'separa os campos e armazena na variável "Campos"
            Campos = Split(linha, ";")
            'Distribui os campos na planilha
            Dim Palavras(1) As String
            For j = 0 To UBound(Campos)
               Sheets("Plan3").Cells(K, j + 1).Value = Campos(j)
            Next
            'incrementa uma linha
            K = K + 1
        Wend
        'fecha o arquivo texto
        Close #1
        'Manipulando para criar novo arquivo excel
        comArquivotxt = Len(Arquivotxt)
        'Coloque aqui todo o caminho onde a planilha Lista_De_Material_Modelo e o .txt estão
        sPath = "C:\Autodesk\AutoCAD_2012_English_Win_64bit\Minhas Rotinas\"
        comsPath = Len(sPath)
        auxfilename = Right(Arquivotxt, (comArquivotxt - comsPath))
        comauxfilename = Len(auxfilename)
        filename = Left(auxfilename, (comauxfilename - 4))
        'Novo arquivo excel
        Set oApp = New Excel.Application
        Set oWks = Workbooks.Add
        Worksheets("Plan1").Activate
        'Salva Excel Criado
        oWks.SaveAs "C:\Autodesk\AutoCAD_2012_English_Win_64bit\Minhas Rotinas\" & filename & ".xls"
        'Arquivos e Abas de Origem e Destino
        Set wsOrigem = Workbooks("Lista_De_Material_Modelo").Worksheets("Plan3")
        Set wsDestino = Worksheets("Plan1")
        With wsOrigem
            .Range("A2:A20000").Copy Destination:=wsDestino.Range("A2:A20000")
            .Range("A2:A20000").Delete
        End With
        'Copia Modelos para a nova Pasta de Trabalho
        ThisWorkbook.Sheets("INC").Copy Before:=oWks.Sheets(1)
        ThisWorkbook.Sheets("E.S. E A.P.").Copy Before:=oWks.Sheets("INC")
        ThisWorkbook.Sheets("A.F.").Copy Before:=oWks.Sheets("E.S. E A.P.")
        ThisWorkbook.Sheets("A.Q.").Copy Before:=oWks.Sheets("A.F.")
        'ThisWorkbook.Close SaveChanges:=True
      
        'Cerne do programa lê cada linha importada do txt e adiciona quantidade na tabela

        
        For l = 2 To 20000
            ca = wsDestino.Cells(l, 1)

           
            aux1 = InStr(ca, "Tubo",1)
            quantidade = Left(ca, (aux1 - 2))
            aux2 = InStr(ca, "mm", 1)
            aspas = Chr(34)
            aux3 = InStr(ca, aspas, 1)
            tamanho = Len(ca)
            layermm = Right(ca, ((tamanho - aux2) - 2))
            layeraspas = Right(ca, ((tamanho - aux3) - 1))
            cb = Right(ca, ((tamanho - aux1) + 1))
            ce = Left(ca, ((tamanho - aux1) + 1))
            quantidade = CInt(ce)
            cc = layermm
            cd = layeraspas
            If cd = "INC" Then
                i = 1
                j = 182
                z = 0
                For i = 1 To 9
                    If arra(i) = cb Then
                        Sheets("INC").Activate
                        Cells(j, 5).Value = z + quantidade
                    End If
                    j = j + 1
                Next
            ElseIf cc = "E.S. E A.P." Then
                i = 10
                j = 102
                z = 0
                For i = 10 To 14
                    If arra(i) = cb Then
                        Sheets("E.S. E A.P.").Activate
                        Cells(j, 5).Value = z + quantidade
                    End If
                    j = j + 1
                Next
            ElseIf cc = "A.F" Then
                i = 15
                j = 196
                z = 0
                For i = 15 To 23
                    If arra(i) = cb Then
                        Sheets("A.F.").Activate
                        Cells(j, 5).Value = z + quantidade
                    End If
                    j = j + 1
                Next
            ElseIf cc = "A.Q." Then
                i = 24
                j = 231
                z = 0
                For i = 24 To 32
                    If arra(i) = cb Then
                        Sheets("A.Q.").Activate
                        Cells(j, 5).Value = z + quantidade
                    End If
                    j = j + 1
                Next
            End If
        Next

        
    End Sub


    O problema é que ao chegar na linha destacada dá um erro tipo 13 de tipos incompatíveis. Sabendo-se que minha variável ca é uma string, que a função Instr retorna um inteiro coloquei aux1, aux2 e aux3 como Integer, gerou o erro, declarei como string, long e até variant apenas e mesmo assim gerou o mesmo erro. Está faltando bem  pouco! Alguém poderia me ajudar?
    quarta-feira, 13 de fevereiro de 2013 18:40

Respostas

  • Boa noite João.

    Parece que stá faltando um argumento na sua função! Do jeito que está vc inicia a busca pelo número "ca" e procura "1" dentro da palavra "Tubo". Imagino que não seja esse seu desejo, certo?

    Sintaxe

    InStr([start, ]string1, string2[, compare])

    Veja a descrição:

    start Opcional. Expressão numérica que define a posição inicial de cada pesquisa. Se omitido, a pesquisa iniciará na posição do primeiro caractere. Se start contiver Null, ocorrerá um erro. O argumento start será necessário, se compare for especificado.
    string1 Obrigatória. Expressão de seqüência sendo pesquisada.
    string2 Obrigatória. Expressão de seqüência de caracteres procurada.
    compare Opcional. Especifica o tipo de comparação de seqüência de caracteres. Se compare for Null, ocorrerá um erro. Se compare for omitido, a configuração Option Compare determinará o tipo de comparação. Especifique um LCID (LocaleID) válido para usar regras específicas da localidade na comparação.

    Isso resolve?

    Abraço.


    Filipe Magno

    quinta-feira, 14 de fevereiro de 2013 01:33

Todas as Respostas

  • Boa noite João.

    Parece que stá faltando um argumento na sua função! Do jeito que está vc inicia a busca pelo número "ca" e procura "1" dentro da palavra "Tubo". Imagino que não seja esse seu desejo, certo?

    Sintaxe

    InStr([start, ]string1, string2[, compare])

    Veja a descrição:

    start Opcional. Expressão numérica que define a posição inicial de cada pesquisa. Se omitido, a pesquisa iniciará na posição do primeiro caractere. Se start contiver Null, ocorrerá um erro. O argumento start será necessário, se compare for especificado.
    string1 Obrigatória. Expressão de seqüência sendo pesquisada.
    string2 Obrigatória. Expressão de seqüência de caracteres procurada.
    compare Opcional. Especifica o tipo de comparação de seqüência de caracteres. Se compare for Null, ocorrerá um erro. Se compare for omitido, a configuração Option Compare determinará o tipo de comparação. Especifique um LCID (LocaleID) válido para usar regras específicas da localidade na comparação.

    Isso resolve?

    Abraço.


    Filipe Magno

    quinta-feira, 14 de fevereiro de 2013 01:33
  • Isso mesmo! Muito obrigado! Pensei que poderia eliminar o start e o compare simultaneamente!
    quinta-feira, 14 de fevereiro de 2013 10:19