1

我有一个用于财务记录的 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 中完成,而不是记录它。谷歌是我的朋友。感谢你的帮助。非常感谢您继续提供的任何帮助。

4

1 回答 1

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
于 2012-04-03T22:23:21.150 回答