Excel VBA , 下标超出范围
Excel VBA , subscript out of range
所以我开始编写代码,从 Workbook1 UserForm 写入 WorkBook2 sheet。由于某些未知原因,它没有复制数据。
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ção177 - 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
假设 '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ção177 - 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
所以我开始编写代码,从 Workbook1 UserForm 写入 WorkBook2 sheet。由于某些未知原因,它没有复制数据。
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ção177 - 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
假设 '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ção177 - 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