Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 对象变量/未设置块变量调试_Vba_Excel - Fatal编程技术网

Vba 对象变量/未设置块变量调试

Vba 对象变量/未设置块变量调试,vba,excel,Vba,Excel,我不知道出了什么问题,但每当我运行宏时,它都会给我一个运行时错误91对象变量或未设置块变量。总结一下,我想从只读工作簿(master)中只复制名称(Sakinah)和列A:Q,然后粘贴到Sakinah列A:Q中。现在,复制部分工作正常,只是粘贴部分。此代码输入到Sakinah中,我已将其定义为Thisworkbook,我不确定出了什么问题。请帮忙 下面是我的代码:我突出显示了发生错误的部分: Sub Update_ReadOnly_Click() Dim copyStartCellSakina

我不知道出了什么问题,但每当我运行宏时,它都会给我一个运行时错误91对象变量或未设置块变量。总结一下,我想从只读工作簿(master)中只复制名称(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

您应该将
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