2012-04-03 8 views
1

財務記録用のExcel 2010ワークブックがあります。 1つのワークシートにはメニューがあります。このメニューでは、添付されたマクロ魔法のボタンを選択してメニューを構成するセルを隠し、トランザクション入力フォームを非表示にします。マクロ実行時にランタイムエラー '91'が発生する

このトランザクション入力には、ここで重要ではないいくつかの値が含まれています。データを入力したら、適切にラベル付けされた入力ボタンを押します。今すぐ私はこのボタンが正常に働いたドキュメントを書いたとき、それは正しいワークシートに空の行を挿入したレコードワークシートに送られたフォームに戻ってコピーされたデータは新しい空白の行に戻ってデータを挿入しました。その後、エントリが正しい順序で確実に表示されるように、dateカラムで最も新しいものから最も古いものにソートします。最後にフォームに戻り、データをクリアします。ヒストリーシートを非表示にするまで、これはうまくいきました。

シートを非表示にすると、操作を実行したシートを非表示にしてシートを再表示してマクロを再記録しました。マクロを実行すると、シートが非表示になります。その後、 "ランタイムエラー '91'オブジェクト変数またはWithブロック変数が設定されていません"エラーが発生します。マクロが完了しないため、履歴シートは表示され、フォームにはまだデータが残っています。黄色で強調表示行

Selection.ListObject.ListRows.Add (1) 

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 

:エラーがショーこれを表示されたときに与えられたオプションでのデバッグを選択

。私はVBAを知らないので、それを書いていないマクロを記録しており、私は頭や話をすることができません。

編集: わかりました、私はテーブルを参照する方法をfirguredています

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

だから、そこから私はちょうどつもり試してみてください、それをVBAではなく、再書き込み全部しようと思って上それを記録しなさい。 Googleは私の友人です。あなたのすべての協力に感謝します。あなたが何度も手伝ってくれるように助けてください。

+0

空白の行を挿入する前に実際にハングすることがわかりました。 – SpeedCrazy

+0

'.Select'はエラーの主な原因です:)直接操作を実行する必要があります。今、 'Selection.ListObject.ListRows.Add(1)'について 'Selection'はどのシートであり、' Selection'は正確に何ですか? –

+0

ここに私のn00bishnessのため申し訳ありませんが、正確には "直接操作をPreform"を意味するのですか?あなたのコメントの残りの部分は私と同じように混乱しています。申し訳ありません – SpeedCrazy

答えて

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

関連する問題