Excel VBA,下标超出范围

Excel VBA,下标超出范围,vba,excel,excel-2010,Vba,Excel,Excel 2010,所以我开始编写一段代码,将Workbook1用户表单写入WorkBook2工作表。不知什么原因,它没有复制数据 Private Sub CommandButton1_Click() On Error GoTo ErrHandler Application.ScreenUpdating = False Dim src As Workbook ' Open EXCEL Set src = Workbooks.Open("U:\Mecânica\Produção\63177 - Qu

所以我开始编写一段代码,将Workbook1用户表单写入WorkBook2工作表。不知什么原因,它没有复制数据

Private Sub CommandButton1_Click()
  On Error GoTo ErrHandler
  Application.ScreenUpdating = False
  Dim src As Workbook
   ' Open EXCEL
Set src = Workbooks.Open("U:\Mecânica\Produção\63177 - Qualidade\Rejeição Interna\Dados\Gaspar\Projeto Manutenção.xlsm", True, False)
WS_Count = src.Worksheets.Count
For o = 1 To WS_Count
 src.Worksheets(o).Unprotect password:="projmanutencao"
Next o

last = src.Worksheets(Manutencao).Range("A65536").End(xlUp).Row

    ' Write regists

   src.Worksheets(Manutencao).Cells(last + 1, 1) = Now()                        'data
   src.Worksheets(Manutencao).Cells(last + 1, 2) = manutencaoexp.ComboBox3      'nº equipamento
   src.Worksheets(Manutencao).Cells(last + 1, 3) = manutencaoexp.ComboBox5                          'avaria
   src.Worksheets(Manutencao).Cells(last + 1, 4) = manutencaoexp.ComboBox4      'serviços
'      src.Worksheets(Manutencao).Cells(last + 1, 5) = Velocidade                   'produtos
'      src.Worksheets(Manutencao).Cells(last + 1, 6) = Qualidade                    'duração
'      src.Worksheets(Manutencao).Cells(last + 1, 7) = Data                         'operario
   src.Worksheets(Manutencao).Cells(last + 1, 8) = manutencaoexp.ComboBox6      'tipo de manutenção

      For o = 1 To WS_Count
 src.Worksheets(o).Protect password:="projmanutencao"
 Next o


  Application.DisplayAlerts = False 'IT WORKS TO DISABLE ALERT PROMPT

  'SAVES FILE USING THE VARIABLE BOOKNAME AS FILENAME
  src.Save

  Application.DisplayAlerts = True 'RESETS DISPLAY ALERTS

' CLOSE THE SOURCE FILE.
src.Close True             ' FALSE - DON'T SAVE THE SOURCE FILE.
Set src = Nothing



ErrHandler:
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub
如果有人可以帮助修复这段代码,或者有一段代码可以从不同的工作簿用户表单复制。我得到了一个下标超出范围的错误


last=src.工作表(Manutenão).范围(“A65536”).结束(x1Up).行

假设“Manutencao”是工作表名称,然后将此行更改为:

last = src.Worksheets("Manutencao").Range("A65536").End(xlUp).Row
请注意工作表名称周围的
。无论您在何处引用此工作表,都必须更改此项

编辑:您的代码可以这样重写,更清楚一点

Private Sub CommandButton1_Click()
    Dim src As Workbook
    Dim last As Long

    On Error GoTo ErrHandler

    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .EnableEvents = False
    End With

    Set src = Workbooks.Open("U:\Mecânica\Produção\63177 - Qualidade\Rejeição Interna\Dados\Gaspar\Projeto Manutenção.xlsm", True, False)

    With src.Worksheets("Manutencao")
        .Unprotect Password:="projmanutencao"
        last = .Cells(Rows.Count, "A").End(xlUp).Row
        .Cells(last + 1, 1) = Now()                        'data
        .Cells(last + 1, 2) = manutencaoexp.ComboBox3      'nº equipamento
        .Cells(last + 1, 3) = manutencaoexp.ComboBox5                          'avaria
        .Cells(last + 1, 4) = manutencaoexp.ComboBox4      'serviços
'        .Cells(last + 1, 5) = Velocidade                   'produtos
'        .Cells(last + 1, 6) = Qualidade                    'duração
'        .Cells(last + 1, 7) = Data                         'operario
        .Cells(last + 1, 8) = manutencaoexp.ComboBox6      'tipo de manutenção
        .Protect Password:="projmanutencao"
    End With
    src.Close True             ' FALSE - DON'T SAVE THE SOURCE FILE.
    Set src = Nothing

ErrHandler:
    If Err Then
        Debug.Print "Error", Err.Number, Err.Description
        Err.Clear
    With Application
        .EnableEvents = True
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With
End Sub

如果您遇到错误,请说明错误发生的位置。last=src.Worksheets(Manutencao).Range(“A65536”).End(xlUp).row您尚未定义
Manutencao
。您尚未在代码中的任何位置定义变量
Manutencao
。它应该包含什么?如果它是一个名称,它需要按照Olly的回答引用。考虑到现在这有点过时,您可能希望使用rows.count而不是65536。