1

バックグラウンド

ユーザーがテキスト ボックスにデータを入力する Excel 2007 フォームがあり、ユーザーが [OK] コマンド ボタンをクリックすると、そのテキストに基づいてマクロが実行されます。ただし、別の場所 (例: Ctrl + C) から文字列をコピーし、最初に貼り付けて [OK] を押すと、コピー バッファーがクリアされたように見えます。もう一度どこかに貼り付けようとしても、何も起こりません。ただし、[キャンセル] コマンド ボタンをクリックすると、2 回目の貼り付け機能が保持されます。[OK] をクリックしたときに実行されるマクロは非常に単純です。新しいシートを作成し、データベースからデータを挿入し、ループ チェックを実行するため、どの VBA メソッドもコピー バッファをクリアしないと思います。 . 私が考えることができる唯一のことは.Select、ある時点で使用してからセットアップすることです.PrintAreaCells(row, col) = Cells(row, col)、しかし、それはすべて構文を介して行われるため、選択したデータをコピー/貼り付けしないため、コピー/貼り付けの効果はありません。さらに、クリップボード ペインを表示しても何も消去されません。エントリはそこに残ります。

質問

コマンド ボタン/テキスト ボックスにリンクされたマクロを実行した後に Excel 2007 がコピー バッファを消費するのは単なるバグですか、それとも問題を引き起こしている可能性のある何かがありますか? Ctrl + Cバグの場合、ユーザーが最初に入力した文字列に戻す方法はありますか?

4

1 に答える 1

0

問題が見つかりました。マクロが呼び出すすべてのサブルーチンを調べたわけではありません。サブルーチンがたくさんあり、そのほとんどが些細なことのように見えるからです。ただし、一見些細なことの1Selection.Copyつには、ブレークポイントを設定するとコピーバッファがクリアされ、選択に設定される場所がありました。

選択プロセスが複雑なため、このサブを変更して選択を使用しないようにすることはできませんでしたが、元のマクロ入力を取り込んで次のことを行うマクロの最後にサブを追加することができました。

Sub InputToCopyBuffer (someInputVar As String)
    Dim clipboard As MSForms.DataObject
    Set clipboard = New MSForms.DataObject
    clipboard.SetText someInputVar
    clipboard.PutInClipboard
End Sub

コードはわずかに変更され、Access/VBA を使用してクリップボードにコピーする方法から取得されますか?

于 2013-05-31T17:48:53.403 に答える