-2

Excel で別のワークシートに印刷する必要がある情報の行を含むワークブックがあります。チェックボックスを利用して、印刷する必要があるアイテムとスキップする必要があるアイテムを指定しようとしています。チェックボックスは列「A」にあり、チェックしてマクロを実行すると、その特定の行の各セルのデータを取得し、別のワークシート (フォーム) に転送し、ワークシートをプロンプトして pdf に保存します。フォームをクリアし、メイン ワークシートに戻って、すべての行がチェックされるまで続行します。ただし、現在、私のコードは最初の「TRUE」ステートメントのみをループしており、残りのステートメントには続いていません。コードは次のとおりです。

Private Sub CommandButton1_Click()

    On Error GoTo ErrHandler:

    Dim i As Integer
    For i = 1 To 10
        If ActiveSheet.OLEObjects("CheckBox" & i).Object.Value = False Then
        Else
            If ActiveSheet.OLEObjects("CheckBox" & i).Object.Value = True Then
                Call PrintWO
            Else
            End If
            Do Until ActiveSheet.OLEObjects("CheckBox" & i).Object.Value = 10
                MsgBox "Nothing Selected to Print"
                Exit Do
                Exit Sub
            Loop
        End If
    Next i
    ErrHandler:
End Sub
4

1 に答える 1

2

なぜあなたが2票の反対票を投じられたのかはわかりませんが、それでも...

あなたの問題は2つあります。初め:

Do Until ActiveSheet.OLEObjects("CheckBox" & i).Object.Value = 10

チェックボックスの値が 10 になることはありません。整数ではなく、True、False、または null のいずれかになります。その結果、チェック ボックスがその値になることはあり得ないため、その Do ループは決して終了しません。

あなたが実際に必要としているのは、PrintWO への呼び出しが行われたかどうかを追跡するためのブール値フラグだと思います (そのブロックが実行された場合は True に設定します)。そうでない場合は、For ブロックが完了した後にそのメッセージを表示します。

次に、何もしないエラー ハンドラを使用することはほとんどありません。少なくともエラーの内容を表示する必要があります。私の最初の考えは、あなたのコードは上記の行でエラーをスローするというものでした。どうやらそうはなりませんが、その Do Until が終了することもありません。つまり、最終的にプロセスを強制終了するか、クラッシュすることになると思います。

于 2012-10-17T17:28:23.963 に答える