2016-11-05 184 views
0

所以这就是我想要做的。我有一张表来解析快照之间的Cisco路由器接口错误,以便创建每个接口上有多少数据包和错误的摘要。我有一个按钮绑定到一个宏执行此复制只是摘要本身。复制范围与VBA到剪贴板

x1 = Cells(2, 6).Value 
y1 = Cells(3, 6).Value 
x2 = Cells(4, 6).Value 
y2 = Cells(5, 6).Value 

ActiveSheet.Range(Cells(y1, x1), Cells(y2, x2)).Copy 

列出的每个单元格都具有要正确复制的节的行或列的值。 x2的单元格是根据多少个接口设置的,因此它可以更改所选范围。

我的问题在于想要将此和最新的快照(它位于摘要部分正上方的单元格中)一起复制。我想在复制到剪贴板时将摘要理想地放在摘要下。为此,我想我需要将范围转换为一个字符串,然后将两个字符串添加到剪贴板中。然而,我甚至无法将范围转换为我可以放入剪贴板的东西。这是我使用的代码,下面是在这里找到的用于将范围转换为字符串数组以及将字符串放入剪贴板的另一个代码。然而,我不知道如何将字符串数组放入剪贴板,因为它总是作为'Object required'出错。任何帮助,将不胜感激。

x1 = Cells(2, 6).Value 
y1 = Cells(3, 6).Value 
x2 = Cells(4, 6).Value 
y2 = Cells(5, 6).Value 
    ' Get values into a variant array 
Dim variantValues As Variant 
variantValues = ActiveSheet.Range(Cells(y1, x1), Cells(y2, x2)).Value 

' Set up a string array for them 
Dim stringValues() As String 
ReDim stringValues(1 To UBound(variantValues, 1), 1 To UBound(variantValues, 2)) 

' Put them in there! 
Dim columnCounter As Long, rowCounter As Long 
For rowCounter = UBound(variantValues, 1) To 1 Step -1 
    For columnCounter = UBound(variantValues, 2) To 1 Step -1 
     stringValues(rowCounter, columnCounter) = CStr(variantValues(rowCounter, columnCounter)) 
    Next columnCounter 
Next rowCounter 

' Return the string array 
RangetoStringArray = stringValues 

Set MSForms_DataObject = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") 
MSForms_DataObject.SetText RangetoStringArray.Value 
MSForms_DataObject.PutInClipboard 
Set MSForms_DataObject = Nothing 
+4

您可以'Range.Copy'并从剪贴板中获取字符串变量中的文本。下一个范围相同,连接两个结果并放入剪贴板。 – Slai

+0

@Slai Wow工作,而且更容易。看起来我只是让自己变得更加复杂!非常感谢你 –

回答

0

我解决了它与Slai的技巧。

Sub CopyCompSnap() 

    x1 = Cells(2, 6).Value 
    y1 = Cells(3, 6).Value 
    x2 = Cells(4, 6).Value 
    y2 = Cells(5, 6).Value 

    Dim DataObj As MSForms.DataObject 
    Set DataObj = New MSForms.DataObject 

    ActiveSheet.Range(Cells(y1, x1), Cells(y2, x2)).Copy 
    DataObj.GetFromClipboard 
    On Error Resume Next 
    string1 = DataObj.GetText(1) 
    If Err.Number <> 0 Then 
     string1 = "Clipboard is Empty" 
    End If 
    ActiveSheet.Range("B5").Copy 
    DataObj.GetFromClipboard 
    On Error Resume Next 
    string2 = DataObj.GetText(1) 
    If Err.Number <> 0 Then 
     string2 = "Clipboard is Empty" 
    End If 
    strCopy = string1 & string2 
    Set MSForms_DataObject = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") 
    MSForms_DataObject.SetText strCopy 
    MSForms_DataObject.PutInClipboard 
    Set MSForms_DataObject = Nothing 

End Sub