3

コードと質問の更新:このシートのモジュールの現在のコードは次のとおりです。

Private Sub Worksheet_Change(ByVal Target As Range)
     If Not Intersect(Target, Range("B2:B2")) Is Nothing Then
          Application.Run "MonthlyRead"
     End If
End Sub

Sub MPrintAll()
     Dim c As String
     Dim MonthlyList As Range
     Set MonthlyList = Worksheets("Monthly").Range("MonthlyList").Cells
     For Each cell In MonthlyList
         Range("b2").Value = cell.Value
         ActiveWorkbook.Worksheets("Monthly").PrintOut
     Next cell
End Sub

問題が発生している場所を特定するために、コードをステップ実行してきました。"Range(" b2 ")。Value = cell.Value"の後にF8キーを押すと、すぐにシートのコードの最初の行に移動し、印刷コマンドを完全にスキップします。また、セルB2にコピーして貼り付けるのではなく、指定された範囲の最初の値を削除します。

参考までに、上記の最初のルーチンによって呼び出されるModule1のコードを次に示します。

    Sub MonthlyRead()
         Call MEFTPS
         Call MUCT6
    End Sub
    Sub MEFTPS()
         If Range("a2").Value = "EFTPS Package" Then
              Call MShow
              Else: Call MHide
         End If
    End Sub
    Sub MHide()
        Rows("20:20").Select
        Selection.EntireRow.Hidden = True
        Rows("31:31").Select
        Selection.EntireRow.Hidden = True
        Rows("42:42").Select
        Selection.EntireRow.Hidden = True
        Rows("53:53").Select
        Selection.EntireRow.Hidden = True
        Range("B2").Select
    End Sub
    Sub MShow()
        Rows("20:20").Select
        Selection.EntireRow.Hidden = False
        Rows("31:31").Select
        Selection.EntireRow.Hidden = False
        Rows("42:42").Select
        Selection.EntireRow.Hidden = False
        Rows("53:53").Select
        Selection.EntireRow.Hidden = False
        Range("B2").Select
    End Sub
    Sub MUCT6()
        If Range("g3").Value = "Y" Then
             Call UCT6MShow
             Else: Call UCT6MHide
        End If
    End Sub
    Sub UCT6MHide()
        Rows("19:19").Select
        Selection.EntireRow.Hidden = True
        Rows("30:30").Select
        Selection.EntireRow.Hidden = True
        Rows("41:41").Select
        Selection.EntireRow.Hidden = True
        Rows("52:52").Select
        Selection.EntireRow.Hidden = True
        Range("B2").Select
    End Sub
    Sub UCT6MShow()
        Rows("19:19").Select
        Selection.EntireRow.Hidden = False
        Rows("30:30").Select
        Selection.EntireRow.Hidden = False
        Rows("41:41").Select
        Selection.EntireRow.Hidden = False
        Rows("52:52").Select
        Selection.EntireRow.Hidden = False
        Range("B2").Select
    End Sub

ページ上部のデータ検証ドロップリストからの選択に基づいて、個別の支払いスケジュールを設定する動的ワークシートを使用しています。ドロップリストには約300のオプションがあります。次に、これらのスケジュールを印刷して、他の2つのプログラムから取得した情報を確認します。これらのプログラムはすべて、1日で印刷、コピー、スキャン、パック、および郵送する必要があります。

ドロップリストから各クライアント名をリストの最初から最後まで順番に選択できるVBAコードを探しています。リストは、「QtrlyList」という名前の別のシートの名前付き範囲から入力されます。

私はいくつかの非常に単純なコードを持っていますが、それは機能しません。

    Sub PrintAll()
        For Each cell In QtrlyList
            Worksheets("Normal").PrintOut
        Next cell
    End Sub

コードを実行しようとすると、「TypeMismatch」エラーが発生します。これは「cell」または「QtrlyList」から来ていると私はかなり確信しています。どうやって直せばいいのかわからない。

4

1 に答える 1

1

このようなものはあなたのために働くかもしれません(テストされていません)

Sub PrintAll()

    Dim wb as Workbook, cell as Range

    Set Wb = ActiveWorkbook 'or ThisWorkBook if the code is in your reporting workbook 

    For Each cell In wb.Sheets("SheetNameHere").Range("QtrlyList").Cells
        With wb.Worksheets("Normal")
            'you want to set the value of whichever cell has the drop-down
           .Range("D2")).value=cell.Value
           DoEvents 'allow sheet to pick up changed value
           .PrintOut
        End with
    Next cell

End Sub
于 2012-11-15T22:53:38.347 に答える