1

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

このトランザクション入力フォームには、ここでは重要ではないいくつかの値が含まれています。データを入力したら、適切にラベル付けされた入力ボタンを押します。ドキュメントを書いたとき、このボタンは正常に機能しました。レコード ワークシートに移動し、正しいテーブルに空白行を挿入し、フォームに戻ってデータをコピーし、新しい空白行に戻ってデータを挿入しました。次に、日付列で新しいものから古いものへの並べ替えを押して、エントリが正しい順序になっていることを確認します。最後に、フォームに戻り、データをクリアします。履歴シートを非表示にするまで、これはうまくいきました。

シートを非表示にすることにしたとき、マクロを再記録し、操作を実行してシートを再非表示にしました。マクロを実行すると、シートが再表示されます。その後、「実行時エラー '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 に答える