对象变量/块变量未设置调试
我不知道什么是错误的,但每当我运行宏,它给我一个运行时错误91对象变量或块变量未设置。这是一个总结,我想从一个只读工作簿(主)复制只名称(Sakinah),列A:Q并粘贴到Sakinah列A:Q。现在,复制部分工作正常,它只是粘贴部分。此代码被输入Sakinah,我已将其定义为Thisworkbook
我不确定哪里出了问题。请帮忙。对象变量/块变量未设置调试
下面是我的代码:我已经强调在发生错误的部分:
Sub Update_ReadOnly_Click()
Dim copyStartCellSakinah As Long
Dim excelFilePath
Dim masterWorkBook As Workbook
Dim readLastCell As Long
Dim manager As String
Dim A
Dim B
Dim C
Dim d
Dim E
Dim F
Dim G
Dim H
Dim I
Dim J
Dim K
Dim L
Dim M
Dim N
Dim O
Dim P
Dim Q
Dim sheet As String
Dim sakinahWorkBookPath As String
Dim masterWorkBookPath As String
Dim Sakinahworkbook As ThisWorkbook
excelFilePath = Application.ActiveWorkbook.Path
masterWorkBookPath = excelFilePath & "\Master.xlsm"
Set masterWorkBook = Workbooks.Open(masterWorkBookPath, ReadOnly = True)
'get copy row
copyStartCellSakinah = 4
readLastCell = masterWorkBook.Sheets("Master").Cells(Rows.Count,
1).End(xlUp).Row + 1
For x = 4 To readLastCell
cell = "C" & x
manager = masterWorkBook.Worksheets("Master").Range(cell).Value
If UCase(manager) = "SAKINAH" Then
sheet = "Sakinah"
cell = "A" & x
A = masterWorkBook.Worksheets("Master").Range(cell).Value
cell = "B" & x
B = masterWorkBook.Worksheets("Master").Range(cell).Value
cell = "C" & x
C = masterWorkBook.Worksheets("Master").Range(cell).Value
cell = "D" & x
d = masterWorkBook.Worksheets("Master").Range(cell).Value
cell = "E" & x
E = masterWorkBook.Worksheets("Master").Range(cell).Value
cell = "F" & x
F = masterWorkBook.Worksheets("Master").Range(cell).Value
cell = "G" & x
G = masterWorkBook.Worksheets("Master").Range(cell).Value
cell = "H" & x
H = masterWorkBook.Worksheets("Master").Range(cell).Value
cell = "I" & x
I = masterWorkBook.Worksheets("Master").Range(cell).Value
cell = "J" & x
J = masterWorkBook.Worksheets("Master").Range(cell).Value
cell = "K" & x
K = masterWorkBook.Worksheets("Master").Range(cell).Value
cell = "L" & x
L = masterWorkBook.Worksheets("Master").Range(cell).Value
cell = "M" & x
M = masterWorkBook.Worksheets("Master").Range(cell).Value
cell = "N" & x
N = masterWorkBook.Worksheets("Master").Range(cell).Value
cell = "O" & x
O = masterWorkBook.Worksheets("Master").Range(cell).Value
cell = "P" & x
P = masterWorkBook.Worksheets("Master").Range(cell).Value
cell = "Q" & x
Q = masterWorkBook.Worksheets("Master").Range(cell).Value
“直到这一点是很好,但是当我进入Sakinahworkbook.worksheets(片)这是给我的错误。
'copy
cell = "A" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = A
cell = "B" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = B
cell = "C" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = C
cell = "D" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = d
cell = "E" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = E
cell = "F" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = F
cell = "G" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = G
cell = "H" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = H
cell = "I" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = I
cell = "J" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = J
cell = "K" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = K
cell = "L" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = L
cell = "M" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = M
cell = "N" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = N
cell = "O" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = O
cell = "P" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = P
cell = "Q" & copyStartCellSakinah
Sakinahworkbook.Worksheets(sheet).Range(cell).Value = Q
copyStartCellSakinah = copyStartCellSakinah + 1
End If
Next x
' CLOSE THE SOURCE FILE.
masterWorkBook.Close True ' FALSE - DON'T SAVE THE SOURCE FILE.
Set masterWorkBook = Nothing
Application.EnableEvents = True
'Me.Visible = True
MsgBox "Updated Successfully"
End Sub
为了摆脱这种错误的,你必须分开申报和分配:
Dim Sakinahworkbook As ThisWorkbook
分为:
Dim Sakinahworkbook As Workbook
Set Sakinahworkbook = ThisWorkbook
此外,我会建议由一个循环做拷贝操作,而不是简化了这个代码为每一列引入变量:
For x = 1 to readLastCell
For i = 1 to 17
Sakinahworkbook.Worksheets(sheet).Range(x,i).Value = masterWorkBook.Worksheets("Master").Range(x,i).Value
Next i
Next x
我尝试过使用建议的解决方案将此工作簿定义为此工作簿,但它仍然无法正常工作。至于第二行代码,是否会运行我的代码?你能帮助更清洁的版本?真的真的是新手。谢谢!! – Carmen
您确定自己的工作薄中有“Sakinah”表吗? – smartobelix
是的,该工作表在Sakinah工作簿中被命名为Sakinah。 – Carmen
你应该声明Sakinahworkbook
为Workbook
,然后Set
它ThisWorkbook
:
Dim Sakinahworkbook As Workbook
Set Sakinahworkbook = ThisWorkbook
我非常惊讶的是As ThisWorkbook
甚至允许语法。
谢谢你的建议。我试过了,但仍然无法正常工作。任何建议? – Carmen
可能是一个小整理者调查使用“响” e'而不是你的代码,所以'range(“a”&x&“:”q“&x).offset('很多整理者,你的a到q都没有被有效地定义......甚至沿着这些行'ws2.range()。value = ws1.range()。value' –
@Nathan_Sav帮助使它成为一个更清洁的版本?这里有一个完整的新手 – Carmen