私は比較的vbaに慣れていないので、優しくしてください:)
ctrl c/ctrl v またはコピー & ペーストが使用されているときに、スプレッドシートのセルの書式設定を保持すると思われるさまざまなスクリプトを確認しました。残念ながら、私の意図に沿ったバリエーションを得ることができないようです。これは、コピー&ペーストされている多くのデータが他のプログラムからコピーされ、ワークシートに貼り付けられていることが原因である可能性があると思います(したがって、元のプログラムのフォーマットをコピーして保持します)。私が操作しようとしたすべてのマクロは、セル/ワークシートまたはワークブック間でコピーするときにフォーマットを保持しようとするようで、別のプログラムからコピーするときにデータ形式に対処しません.
別のアプローチを探しています。論理的な観点から、コピーしたデータを変数として保存し、そのフォーマットを取り除き、生の値のみを貼り付ける方法が ctrl v または貼り付けイベントにあるはずだと考えています。Pastespecial をいじってみましたが、pastespecial を強制する (または pastespecial を pastespecial に置き換える) 方法がわかりません。
ここにいくつかのコードサンプルがありますが、私にはうまくいかないようです。私は得続けます:
マクロ "C:...Test.xlsm'!MyPaste' を実行できません。このブックでマクロを使用できないか、すべてのマクロが無効になっている可能性があります。
マクロは確実に有効化され、コードは [ThisWorkbook(Code)] に貼り付けられます
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim UndoList As String
Application.ScreenUpdating = False
Application.EnableEvents = False
On Error GoTo Whoa
'~~> Get the undo List to capture the last action performed by user
UndoList = Application.CommandBars("Standard").Controls("&Undo").List(1)
'~~> Check if the last action was not a paste nor an autofill
If Left(UndoList, 5) <> "Paste" And UndoList <> "Auto Fill" Then GoTo LetsContinue
'~~> Undo the paste that the user did but we are not clearing the clipboard
'~~> so the copied data is still in memory
Application.Undo
If UndoList = "Auto Fill" Then Selection.Copy
'~~> Do a pastespecial to preserve formats
On Error Resume Next
'~~> Handle text data copied from a website
Target.Select
ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False
Target.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
On Error GoTo 0
'~~> Retain selection of the pasted data
Union(Target, Selection).Select
LetsContinue:
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Sub