OK、範囲内のセルが選択されたことを検出し、その横にボタンを作成するワークシートコードがあります。すべてが正常であるように見えましたが、ボタンを作成するとクリップボードがクリアされます。ここでは、関連する範囲内のセルが選択されるたびに呼び出され、元のコードは次のとおりです。Excel-VBA:ボタンを追加するとクリップボードがクリアされる - 回避策が必要
Public Sub splitTransactionIn(ByVal Target As Range)
Dim btn As Button
Set t = ActiveSheet.Range("E" & Target.Row)
rowNumber = Target.Row
On Error Resume Next
ActiveSheet.Buttons("Split").Delete
Set btn = ActiveSheet.Buttons.Add(t.Left, t.Top, t.Width, t.Height)
With btn
.OnAction = "btnIn"
.Caption = "Split transaction"
.Name = "Split"
End With
End Sub
私は、できるだけ早く.OnAction、.Captionまたは.nameのいずれかに達したとしてアウトセクションをコメントしてブレークポイントを挿入しようとした、とクリップボードがクリアされます。なぜ、私は分かりません。
は、論理的にはそれについて考えて、私はそれがクリアされた前のクリップボードをキャプチャし、サブの最後でそれを置き換えるために、コードのいくつかの余分なラインに追加ので、私はこれで終わる:
Public Sub splitTransactionIn(ByVal Target As Range)
Dim btn As Button
Dim objData As New MSForms.DataObject
Dim strText
objData.GetFromClipboard
strText = objData.GetText()
Set t = ActiveSheet.Range("E" & Target.Row)
rowNumber = Target.Row ' gets used elsewhere...
On Error Resume Next
ActiveSheet.Buttons("Split").Delete
Set btn = ActiveSheet.Buttons.Add(t.Left, t.Top, t.Width, t.Height)
With btn
.OnAction = "btnIn"
.Caption = "Split transaction"
.Name = "Split"
End With
objData.SetText strText
objData.PutInClipboard
End Sub
さて、これはうまくいっていますが、一点に過ぎません。そこで範囲内のセルを選択してコピー(Ctrl-C)し、同じ範囲で3セルをさらに下に選択して貼り付けます(Ctrl-V)。私が得るのはエラーメッセージです:「クリップボード上のデータは同じサイズではなく、選択されたエリアとしての形状」であり、OKを押すと、単一のセルにペーストされます。私はソースとターゲットが異なるサイズであることを知っていますが、コピー/貼り付け時にシートのこの部分はうまくいきます。明らかに私はクリップボードの読み書きに奇妙なことをしてきましたが、私は何が分かりません。
あなたが使用する必要がありますかコピーペースト?もしそうなら、クリップボードにどれくらいの時間データを保持する必要がありますか? – Comintern
はい、かなり基本的です。このシートを使用すると、ユーザーは何百行ものデータを取り込んでフィルタリングし、カテゴリに割り当てることができます。コピー/ペーストは、ドロップダウンからカテゴリを一度選択してコピーすると、1つの行に何百もの他の行に貼り付けることができます。 –
変数に格納するのはなぜでしょうか? – Comintern