Excel执行时运行时错误“91”

时间:2012-04-03 21:25:51

标签: excel-vba excel-2010 vba excel

我有一份Excel 2010财务记录工作簿。在一个工作表上,我有一个菜单。在此菜单中,我选择一个带有附加宏的按钮,该按钮隐藏构成菜单的单元格并取消隐藏事务输入表单。

此事务输入表单包含几个不重要的值。输入数据后,您会点击相应标记的输入按钮。现在,当我写这个文档时,这个按钮运行正常;它转到记录工作表,在正确的表中插入一个空行,返回到表单,复制数据,返回到新的空行,并插入数据。然后它会在日期列上点击最新到最旧的排序,以确保条目的顺序正确。最后,它返回到表单并清除数据。这工作正常,直到我决定隐藏历史记录表。

当我决定隐藏工作表时,我重新录制宏,取消隐藏工作表并执行操作并重新隐藏工作表。现在,当我运行宏时,它会取消隐藏工作表。然后它会挂起“运行时错误'91'对象变量或未设置块变量”错误。它没有完成宏,使历史表保持可见,并且表格仍然充满数据。

在出现错误时给出的选项中选择调试显示:

  Sub transaction()
'
' transaction Macro
'

'
    Sheets("Income").Select
    Sheets("Transaction History").Visible = True
    Selection.ListObject.ListRows.Add (1)
    Sheets("Income").Select
    Range("B6:G6").Select
    Selection.Copy
    Sheets("Transaction History").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("Transaction History").ListObjects("Table9").Sort. _
        SortFields.Clear
    ActiveWorkbook.Worksheets("Transaction History").ListObjects("Table9").Sort. _
        SortFields.Add Key:=Range("Table9[[#All],[Date]]"), SortOn:=xlSortOnValues _
        , Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Transaction History").ListObjects("Table9"). _
        Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Sheets("Transaction History").Select
    ActiveWindow.SelectedSheets.Visible = False
    Range("B6:G6").Select
    Selection.ClearContents
    Rows("6:8").Select
    Range("A8").Activate
    Selection.EntireRow.Hidden = False
    Range("B6").Select
    ActiveCell.FormulaR1C1 = "=R[1]C"
    Rows("7:7").Select
    Selection.EntireRow.Hidden = True
    Range("C6").Select
End Sub

使用行

Selection.ListObject.ListRows.Add (1)

以黄色突出显示。我不知道任何VBA,因此录制的宏不会写它们,我也不能为此做头脑或故事。

编辑: 好的,我已经确定了如何引用该表:

Worksheets("Transaction History").ListObjects("thistory").ListRows.Add (1)

所以从那以后,我只是要重写整个事情,试着在VBA中做而不是记录它。谷歌是我的朋友。感谢你的帮助。你继续提供的任何帮助都是非常苛刻的。

1 个答案:

答案 0 :(得分:2)

这是你在尝试的吗?

Sub transaction()
    Dim wbI As Worksheet, wbO As Worksheet

    Set wbI = Sheets("Income")
    Set wbO = Sheets("Transaction History")

    With wbO
        .Visible = True

        .ListObjects("thistory").ListRows.Add (1)

        wbI.Range("B6:G6").Copy

        .Range("B2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

        With .ListObjects("thistory").Sort
            With .SortFields
                .Clear
                .Add Key:=Range("thistory[[#All],[Date]]"), SortOn:=xlSortOnValues _
                , Order:=xlDescending, DataOption:=xlSortNormal
            End With
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With

        .Visible = False
   End With

   With wbI
        .Range("B6:G6").ClearContents
        .Rows("6:8").Hidden = False
        .Range("B6").FormulaR1C1 = "=R[1]C"
        .Rows(7).Hidden = True
   End With

End Sub