【问题标题】:object variable/ with block variable not set debug对象变量/带有块变量未设置调试
【发布时间】:2017-06-13 16:24:28
【问题描述】:

我不知道出了什么问题,但是每当我运行宏时,它都会给我一个运行时错误 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(sheet) 时,它给了我一个错误。

 '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

【问题讨论】:

  • 使用range 而不是您的代码进行调查可能会更整洁,所以range("a" & x & ":"q" & x).offset( 更整洁,而且您的a 到q 实际上并没有有效地定义.. 甚至沿着这些行ws2.range().value = ws1.range().value
  • @Nathan_Sav 帮助使其成为更简洁的版本?这里是一个完整的新手

标签: vba excel


【解决方案1】:

要摆脱这个错误,你必须拆分声明和赋值:

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

【讨论】:

  • 我已尝试使用推荐的解决方案将工作簿定义为此工作簿,但仍然无法正常工作。至于第二行代码,那会为我的代码运行吗?你能帮助更清洁的版本吗?这里真的真的是个新手。谢谢!!
  • 您确定您的工作簿中有工作表“Sakinah”吗?
  • 是的,工作表在 Sakinah 工作簿中名为 Sakinah。
  • 有两个独立的工作簿。一本大师手册和一本 Sakinah 手册,从逻辑上讲应该是对的。老实说,我不知道出了什么问题。
  • 试着把Set Sakinahworkbook = ThisWorkbook改成Set Sakinahworkbook = Workbooks("Sakinah.xlsm")——当然必须是Sakinah工作簿的真名。也许你有更多的工作簿。此外,您必须调试代码才能找到原因。
【解决方案2】:

您应该将Sakinahworkbook 声明为Workbook,然后将Set 声明为ThisWorkbook

Dim Sakinahworkbook As Workbook
Set Sakinahworkbook = ThisWorkbook

我很惊讶As ThisWorkbook 甚至在语法上是允许的。

【讨论】:

  • 感谢您的建议。我已经尝试过了,但它仍然无法正常工作。有什么建议吗?
猜你喜欢
  • 2019-05-27
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 2018-12-11
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多