クリップボードにExcelワークシート範囲が含まれている場合は、DataObjectオブジェクトを使用してその範囲のデータにアクセスできます。
そのデータの実際のソース範囲(つまり、ワークシート、行、列)も見つけることができますか?
または、(選択された範囲ではなく)破線のアウトライン境界線で示されている最後にコピーされた範囲を見つけることができますか?
できればExcel2003VBAを使用する
クリップボードにExcelワークシート範囲が含まれている場合は、DataObjectオブジェクトを使用してその範囲のデータにアクセスできます。
そのデータの実際のソース範囲(つまり、ワークシート、行、列)も見つけることができますか?
または、(選択された範囲ではなく)破線のアウトライン境界線で示されている最後にコピーされた範囲を見つけることができますか?
できればExcel2003VBAを使用する
直接ではありません-クリップボードオブジェクトにはセルの値のみが含まれているようです(ただし、Excelは明らかに境界線を覚えています):
Sub testClipborard()
Dim test As String
Dim clipboard As MSForms.DataObject
Set clipboard = New MSForms.DataObject
clipboard.GetFromClipboard
test = clipboard.GetText
MsgBox (test)
End Sub
これを実行するには、Microsoft Forms 2.0 ライブラリへの参照が必要になることに注意してください (セルに値がない場合も失敗します)。
そうは言っても、次のようなことを試すことができます-これをVBAエディターのモジュールに追加します。
Public NewRange As String
Public OldRange As String
Public SaveRange As String
Public ChangeRange As Boolean
そして、シートオブジェクトで次を使用します
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
'save previous selection
OldRange = NewRange
'get current selection
NewRange = Selection.Address
'check if copy mode has been turned off
If Application.CutCopyMode = False Then
ChangeRange = False
End If
'if copy mode has been turned on, save Old Range
If Application.CutCopyMode = 1 And ChangeRange = False Then
'boolean to hold "SaveRange" address til next copy/paste operation
ChangeRange = True
'Save last clipboard contents range address
SaveRange = OldRange
End If
End Sub
一見うまくいきますが、クリップボードの問題を回避しようとしているため、さまざまなバグが発生しやすい可能性があります。 http://www.ozgrid.com/forum/showthread.php?t=66773