2013-11-25 6 views
1

Я работаю в первый раз с VBA, и у меня есть ошибка, которую я не могу исправить.excel macro "object required" error

Я хочу передать некоторые поля из одного листа в другой. Это дает мне «объект требуется», но я не могу показаться, чтобы выяснить так, продал это ...

Мой код заключается в следующем:

Sub principal_main() 

    Dim Max_rows, j, row_number As Integer 
    Dim i, count As Integer 
    Dim name_Row As String 
    Dim morada, localidade, email, cod_postal, data As String 
    Dim telefone, nif As Integer 
    Dim escreve As Range 

    count = 0 
    row_number = 12 
    name_Row = "" 
    Max_rows = 23200 



    For i = 13 To Max_rows 
     If name_Row = "" Then 
      name_Row = myWorksheet.Range("B" & i).Value 
      morada = "" 
      localidade = "" 
      email = "" 
      cod_postal = "" 
      data = "" 
      telefone = 0 
      nif = 0 
      count = 0 

     Else 
      count = count + 1 
      If count = 26 Then 
       name_Row = "" 
      End If 

      Select Case count 
       Case 2 
        morada = myWorksheet.Range("B" & i).Value 
        telefone = myWorksheet.Range("I" & i).Value 

       Case 4 
        localidade = myWorksheet.Range("B" & i).Value 
        email = myWorksheet.Range("I" & i).Value 

       Case 5 
        cod_postal = myWorksheet.Range("B" & i).Value 
        nif = myWorksheet.Range("I" & i).Value 

       Case 7 
        data = myWorksheet.Range("C" & i).Value 
        nome_row = Replace(nome_row, " - ", "") 
        For j = 0 To 10 
         nome_row = Replace(nome_row, j, "") 
        Next 

        Set Sheets("final").Range("B" & count_copiados) = name_Row 
        Set Sheets("final").Range("C" & count_copiados) = morada 
        Set Sheets("final").Range("D" & count_copiados) = cod_postal 
        Set Sheets("final").Range("E" & count_copiados) = localidade 
        Set Sheets("final").Range("F" & count_copiados) = telefone 
        Set Sheets("final").Range("G" & count_copiados) = email 
        Set Sheets("final").Range("H" & count_copiados) = nif 
        Set Sheets("final").Range("I" & count_copiados) = data_ficha 
        'Sheets("final").Row(count_copiados).collumn("B") = name_Row 
        'Sheets("final").Row(count_copiados).collumn("C") = morada 
        'Sheets("final").Row(count_copiados).collumn("D") = cod_postal 
        'Sheets("final").Row(count_copiados).collumn("E") = localidade 
        'Sheets("final").Row(count_copiados).collumn("F") = telefone 
        'Sheets("final").Row(count_copiados).collumn("G") = email 
        'Sheets("final").Row(count_copiados).collumn("H") = nif 
        'Sheets("final").Row(count_copiados).collumn("I") = data_ficha 
      End Select 


     End If 
    Next 
End Sub 

новый код, с некоторыми изменениями:

Option Explicit 

Sub principal_main() 

    Dim Max_rows, row_number As Long 
    Dim i, j, count, count_copiados As Long 
    Dim name_Row As String 
    Dim morada, localidade, email, cod_postal, data_ficha As String 
    Dim telefone As Variant 
    Dim nif As Integer 
    Dim escreve As Range 
    Dim myWorksheet As Worksheet 
    myWorksheet = Sheets(1) 
    count = 0 
    row_number = 12 
    name_Row = "" 
    Max_rows = 23200 
    count_copiados = 13 


    For i = 13 To Max_rows 
     If name_Row = "" Then 
      name_Row = myWorksheet.Range("B" & i).Value 
      morada = "" 
      localidade = "" 
      email = "" 
      cod_postal = "" 
      data_ficha = "" 
      telefone = 0 
      nif = 0 
      count = 0 

     Else 
      count = count + 1 
      If count = 26 Then 
       name_Row = "" 
      End If 

      Select Case count 
       Case 2 
        morada = myWorksheet.Range("B" & i).Value 
        telefone = myWorksheet.Range("I" & i).Value 

       Case 4 
        localidade = myWorksheet.Range("B" & i).Value 
        email = myWorksheet.Range("I" & i).Value 

       Case 5 
        cod_postal = myWorksheet.Range("B" & i).Value 
        nif = myWorksheet.Range("I" & i).Value 

       Case 7 
        data_ficha = myWorksheet.Range("C" & i).Value 
        name_Row = Replace(name_Row, " - ", "") 
        For j = 0 To 10 
         name_Row = Replace(name_Row, j, "") 
        Next 

        Set Sheets("final").Range("B" & count_copiados) = name_Row 
        Set Sheets("final").Range("C" & count_copiados) = morada 
        Set Sheets("final").Range("D" & count_copiados) = cod_postal 
        Set Sheets("final").Range("E" & count_copiados) = localidade 
        Set Sheets("final").Range("F" & count_copiados) = telefone 
        Set Sheets("final").Range("G" & count_copiados) = email 
        Set Sheets("final").Range("H" & count_copiados) = nif 
        Set Sheets("final").Range("I" & count_copiados) = data_ficha 
        'Sheets("final").Row(count_copiados).collumn("B") = name_Row 
        'Sheets("final").Row(count_copiados).collumn("C") = morada 
        'Sheets("final").Row(count_copiados).collumn("D") = cod_postal 
        'Sheets("final").Row(count_copiados).collumn("E") = localidade 
        'Sheets("final").Row(count_copiados).collumn("F") = telefone 
        'Sheets("final").Row(count_copiados).collumn("G") = email 
        'Sheets("final").Row(count_copiados).collumn("H") = nif 
        'Sheets("final").Row(count_copiados).collumn("I") = data_ficha 
        count_copiados = count_copiados + 1 
      End Select 


     End If 
    Next 
End Sub 
+0

Где вы размерности и присвоить переменную 'myWorksheet'? Поместите «Option Explicit» в верхнюю часть вашего модуля, а затем попробуйте очистить свои ошибки. Рассмотрим 'Dim myWorksheet как Worksheet',' Set = myWorksheet = Sheets (1) ' –

+0

Спасибо, теперь он запускается, он дает новую ошибку (переполнение), но это должно быть из-за плохого кодирования. Спасибо –

+0

, вероятно, потому, что вы используете 'Integer' и переполняете его. Измените 'Integer' на' Long'. Также обратите внимание, что «Dim telefone, nif as Integer» размеры «telefone» как 'Variant' и' nif' как 'Integer', а не как« Целые числа » –

ответ

1

попробовать

Option Explicit 

Sub principal_main() 

    Dim Max_rows&, row_number& 
    Dim i&, j&, count&, count_copiados& 
    Dim name_Row$ 
    Dim morada$, localidade$, email$, cod_postal$, data_ficha$ 
    Dim telefone As Variant 
    Dim nif& 
    Dim escreve As Range 
    Dim myWorksheet As Worksheet 
    Set myWorksheet = Sheets(1) 
    count = 0 
    row_number = 12 
    name_Row = "" 
    Max_rows = 23200 
    count_copiados = 13 


    For i = 13 To Max_rows 
     If name_Row = "" Then 
      name_Row = myWorksheet.Range("B" & i).Value 
      morada = "" 
      localidade = "" 
      email = "" 
      cod_postal = "" 
      data_ficha = "" 
      telefone = 0 
      nif = 0 
      count = 0 

     Else 
      count = count + 1 
      If count = 26 Then 
       name_Row = "" 
      End If 

      Select Case count 
       Case 2 
        morada = myWorksheet.Range("B" & i).Value 
        telefone = myWorksheet.Range("I" & i).Value 

       Case 4 
        localidade = myWorksheet.Range("B" & i).Value 
        email = myWorksheet.Range("I" & i).Value 

       Case 5 
        cod_postal = myWorksheet.Range("B" & i).Value 
        nif = myWorksheet.Range("I" & i).Value 

       Case 7 
        data_ficha = myWorksheet.Range("C" & i).Value 
        name_Row = Replace(name_Row, " - ", "") 
        For j = 0 To 10 
         name_Row = Replace(name_Row, j, "") 
        Next 

        Sheets("final").Range("B" & count_copiados) = name_Row 
        Sheets("final").Range("C" & count_copiados) = morada 
        Sheets("final").Range("D" & count_copiados) = cod_postal 
        Sheets("final").Range("E" & count_copiados) = localidade 
        Sheets("final").Range("F" & count_copiados) = telefone 
        Sheets("final").Range("G" & count_copiados) = email 
        Sheets("final").Range("H" & count_copiados) = nif 
        Sheets("final").Range("I" & count_copiados) = data_ficha 
        'Sheets("final").Row(count_copiados).collumn("B") = name_Row 
        'Sheets("final").Row(count_copiados).collumn("C") = morada 
        'Sheets("final").Row(count_copiados).collumn("D") = cod_postal 
        'Sheets("final").Row(count_copiados).collumn("E") = localidade 
        'Sheets("final").Row(count_copiados).collumn("F") = telefone 
        'Sheets("final").Row(count_copiados).collumn("G") = email 
        'Sheets("final").Row(count_copiados).collumn("H") = nif 
        'Sheets("final").Row(count_copiados).collumn("I") = data_ficha 
        count_copiados = count_copiados + 1 
      End Select 
     End If 
    Next 
End Sub 
+0

спасибо, нашел проблему с вашей помощью –

+0

@RicardoAlves рад, что я как-то помогу! –