Vba 对象变量/未设置块变量调试
我不知道出了什么问题,但每当我运行宏时,它都会给我一个运行时错误91对象变量或未设置块变量。总结一下,我想从只读工作簿(master)中只复制名称(Sakinah)和列A:Q,然后粘贴到Sakinah列A:Q中。现在,复制部分工作正常,只是粘贴部分。此代码输入到Sakinah中,我已将其定义为Vba 对象变量/未设置块变量调试,vba,excel,Vba,Excel,我不知道出了什么问题,但每当我运行宏时,它都会给我一个运行时错误91对象变量或未设置块变量。总结一下,我想从只读工作簿(master)中只复制名称(Sakinah)和列A:Q,然后粘贴到Sakinah列A:Q中。现在,复制部分工作正常,只是粘贴部分。此代码输入到Sakinah中,我已将其定义为Thisworkbook,我不确定出了什么问题。请帮忙 下面是我的代码:我突出显示了发生错误的部分: Sub Update_ReadOnly_Click() Dim copyStartCellSakina
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
您应该将
Sakinahworkbook
声明为工作簿
,然后将其设置为此工作簿
:
Dim Sakinahworkbook As Workbook
Set Sakinahworkbook = ThisWorkbook
我很惊讶,因为此工作簿在语法上允许。要消除此错误,您必须拆分声明和赋值:
Dim Sakinahworkbook As 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
使用范围而不是您的代码进行调查可能会更整洁一些,因此范围(“a”&x&“:“q”&x)。偏移量(
整洁得多,并且您的a到q实际上没有有效地定义..或者甚至沿着这些线ws2.range().value=ws1.range().value
@Nathan_Sav帮助使其成为一个更干净的版本?这里是一个完全的新手我尝试了推荐的解决方案,将工作簿定义为这个工作簿,但它仍然不工作。至于第二行代码,我的代码会运行吗?你能帮我使用更干净的版本吗?这里真的是一个新手。谢谢!!你确定吗你有一张“Sakinah”“在您的工作簿中?是的,该工作表在Sakinah工作簿中被命名为Sakinah。有两个单独的工作簿。一个主工作簿和一个Sakinahworkbook,从逻辑上讲,它应该是正确的。我真的不知道出了什么问题。请尝试将设置Sakinahworkbook=此工作簿
更改为设置Sakinahworkbook=工作簿。”(“Sakinah.xlsm”)
-当然,它必须是Sakinah工作簿的真实名称。也许您有更多的工作簿。此外,您还必须调试代码以找到原因。谢谢您的建议。我已经尝试过了,但仍然不起作用。有什么建议吗?
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