具有格式和范围的PasteSpecial VBA

时间:2018-12-10 16:31:55

标签: excel vba

嗨,我有以下代码:

Sub test()
    Dim objData As DataObject ' Set a reference to MS Forms 2.0
    Dim sHTML As String
    Dim sSelAdd As String
    Dim rng As Range

    Cells(2, 7).Value = Cells(2, 7).Value 
    Set rng = ActiveSheet.Cells(2, 7)

    Set objData = New DataObject
    sHTML = rng.Text
    objData.SetText sHTML
    objData.PutInClipboard
    ActiveSheet.PasteSpecial Format:="Unicode Text"
End Sub

但是我想知道是否可以使用此方法:

ActiveSheet.PasteSpecial Format:="Unicode Text"

在某种程度上,我也定义了粘贴范围。似乎要粘贴的文本被复制到多个单元格中,从而覆盖其他单元格。

2 个答案:

答案 0 :(得分:1)

您可以将其粘贴到当前选择的单元格中,这对于最终用户可能非常直观和有用:

Selection.PasteSpecial Format:="Unicode Text"

如果要在代码中定义位置,则可以执行以下操作:

Range("A1").PasteSpecial Format:="Unicode Text"

编辑:今天我了解到Range.PasteSpecial与Worksheet.PasteSpecial不同。

看起来您可以在尝试粘贴之前通过选择单元格来选择要粘贴数据的位置。这似乎对我有用:

Sub test()
    Dim objData As DataObject ' Set a reference to MS Forms 2.0
    Dim sHTML As String
    Dim sSelAdd As String
    Dim rng As Range

    Cells(2, 7).Value = Cells(2, 7).Value 
    Set rng = ActiveSheet.Cells(2, 7)

    Set objData = New DataObject
    sHTML = rng.Text
    objData.SetText sHTML
    objData.PutInClipboard
    rng.Select '<----Add this line.
    ActiveSheet.PasteSpecial Format:="Unicode Text"
End Sub

答案 1 :(得分:0)

我发现这可以正常工作:

Private Sub Worksheet_Activate()
 Dim objData As DataObject ' Set a reference to MS Forms 2.0
    Dim sHTML As String
    Dim sSelAdd As String
    Dim rng As Range

    Cells(1, 7).Value = Cells(1, 7).Value
    Set rng = ActiveSheet.Cells(1, 7)

    Set objData = New DataObject
    sHTML = rng.Text
    objData.SetText (sHTML)
    objData.PutInClipboard
    rng.Select
   Worksheets("GridData").Range("G1").Select
    ActiveSheet.PasteSpecial Format:= _
 "Unicode Text"
End Sub