6

クリップボードにExcelワークシート範囲が含まれている場合は、DataObjectオブジェクトを使用してその範囲のデータにアクセスできます。

そのデータの実際のソース範囲(つまり、ワークシート、行、列)も見つけることができますか?

または、(選択された範囲ではなく)破線のアウトライン境界線で示されている最後にコピーされた範囲を見つけることができますか?

できればExcel2003VBAを使用する

4

2 に答える 2

2

直接ではありません-クリップボードオブジェクトにはセルの値のみが含まれているようです(ただし、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

于 2012-08-24T22:31:43.160 に答える