Excel VBA, индекс вне диапазона - PullRequest
0 голосов
/ 30 мая 2018

поэтому я начал писать код, который записывал бы из Workbook1 UserForm на лист 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.Worksheets(Manutenção).Range("A65536").End(x1Up).Row

1 Ответ

0 голосов
/ 30 мая 2018

Предполагая, что «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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...