2

セルのコピー貼り付け操作中に書式設定を無効にする次のコードを使用しています-

Private Sub Worksheet_Change(ByVal Target As Range)
    With Application
        .EnableEvents = False
        myValue = Target.Formula
        .Undo
        Target.Formula = myValue
        .EnableEvents = True
    End With
End If
    Application.CutCopyMode = False
End Sub

コードは完璧に機能しますが、シートに他の多くの問題を挿入します。

  1. 元に戻す/やり直し機能を使用できない
  2. シングルクリックでセルのフォーカスを変更できません。

任意のアイデアをいただければ幸いです。

4

1 に答える 1

0

本質的に、標準の貼り付けを禁止し、場合によってはそれを特殊な/値の貼り付けに置き換えたいと考えています

次のように、貼り付け機能をトラップして、ユーザーに形式を選択して貼り付け/値を使用するように伝えるメッセージを割り当てることができます。

....
' place this in any suitable event trigger like 
Application.CommandBars("Edit").Controls("Paste").OnAction = "TrappedPaste"
....

Sub TrappedPaste()
    MsgBox "Your Paste is performed as PasteSpecialValues", vbOKOnly, "Paste"

    ' ok, now silently do a PasteSpecial/Values
    On Error GoTo TryExcel
    ' try to paste text
    ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False
    Exit Sub
TryExcel:
    On Error GoTo DoesntWork
     Selection.PasteSpecial xlPasteValues
     Exit Sub
DoesntWork:
    MsgBox "Sorry - wrong format for pasting", vbExclamation + vbOKOnly, "Paste Problem"
 End Sub

注意...これはすべての言語で機能するわけではないため、国際的なアプリケーションでは、より繊細にする必要があります

If ExistControl("Edit", 22) Then Application.CommandBars("Edit").FindControl(ID:=22).OnAction = "TrappedPaste"

アプリケーションには、ユーザーが「貼り付け」を取得できる場所が他にもあります。それらすべてをトラップする必要があります。

アプローチが気に入ったら、さらに詳しく説明できます。

于 2012-09-21T16:07:25.760 に答える