2012-04-03 316 views
1

我有一个Excel 2010工作簿,用于财务记录。在一张工作表上我有一个菜单。在这个菜单上,我选择一个带有附加宏的按钮,隐藏组成菜单的单元格并取消隐藏交易输入表单。宏执行时运行时错误“91”

此事务输入包含这里是没有结果的几个值。输入数据后,您可以点击正确标记的输入按钮。现在当我编写文档这个按钮工作正常时,它将记录工作表插入到正确的表中的一个空行,然后回到表单复制数据返回到新的空行并插入数据。然后它会在日期栏中按照最新到最旧的顺序排列,以确保条目按正确的顺序排列。最后它回到表格并清除数据。这工作正常,直到我决定隐藏历史表。

当我决定隐藏工作表我重新录制宏取消隐藏片预成型的操作和重新隐藏的工作表。现在,当我运行宏时,它会隐藏工作表。然后挂起“运行时错误”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,因此录制的宏不会写入它们,而我无法制作头像和故事。

编辑: 好吧,我已经firgured如何引用表:

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

所以从那里,我只是要重新写了整个事情,要去尝试做在VBA,而不是把它记录下来。 Google是我的朋友。感谢你的帮助。你继续给予的任何帮助都会大大降低。

+0

刚才意识到它在插入空行之前实际挂起。 – SpeedCrazy 2012-04-03 21:32:21

+0

'.Select'是导致错误的主要原因:)您应该直接执行操作。现在关于'Selection.ListObject.ListRows.Add(1)'哪个表是'Selection'的,什么是'Selection'? – 2012-04-03 21:37:17

+0

对不起,我的n00bishness在这里,但你究竟是什么意思“直接预制操作”?您的评论的其余部分对我来说同样令人困惑。对不起 – SpeedCrazy 2012-04-03 21:39:12

回答

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 
+0

是的。非常感谢。 – SpeedCrazy 2012-04-03 22:27:13