【问题标题】:Copy row number of active cell to clipboard (Excel VBA)将活动单元格的行号复制到剪贴板(Excel VBA)
【发布时间】:2019-12-12 12:50:04
【问题描述】:

我想创建一个宏来获取活动单元格的行号并将其复制到剪贴板。

当我执行以下代码时,我得到“编译错误:无效的限定符”。

我已经忘记了我的大部分 VBA,但是这么简单的东西肯定可以工作吗?提前感谢您提供的任何帮助。

Sub macro3()
    Dim x As Integer
    x = ActiveCell.row
    x.Copy
End Sub

编辑: 使用下面的解决方案,我将其更改为以下(有效):

首先在 VBE 中的工具 > 引用下添加对 Microsoft Forms 2.0 对象库的引用后:

Sub macro3()
    Dim x As DataObject
    Set x = New DataObject
    x.settext ActiveCell.row
    x.putinclipboard
End Sub

【问题讨论】:

  • 一个Integer(顺便说一下使用Long)没有Copy方法。
  • 看看here。顺便说一句,我能问你为什么要在剪贴板中使用这个数字吗?
  • 看看这个解决方案:stackoverflow.com/questions/14738330/…
  • 我想将数字复制到剪贴板,以便在公式中使用它来将该行的数据导入新表。

标签: excel vba copy row


【解决方案1】:

一个选项,使用 DataObject - 在 VBE 的 Tools > References 下添加对 Microsoft Forms 2.0 Object Library 的引用。

Sub Test()
    Dim x As DataObject
    Set x = New DataObject

    x.SetText ActiveCell.Row 'Or CStr(ActiveCell.Row) to make the type conversion explicit
    x.PutInClipboard
End Sub

【讨论】:

  • 这不适用于 Windows 10,因为不再支持 PutInClipboard。
  • @Netloh 在 Windows 10 Enterprise 上为我工作。
  • 很奇怪。自升级以来,我一直无法使用该方法。需要改用 Windows API。就像这里描述的:stackoverflow.com/questions/14738330/…
  • 也适用于 Windows 10 Pro。但是您要么需要添加用户窗体,要么浏览 FM20.dll 以添加 Microsoft Forms 2.0 Object Library
  • 谢谢,使用 DataObject 变量对我有用(在 Windows 10 上)。我尝试使用 Long 变量,但没有成功。
【解决方案2】:

你可以看看这个answer。由于使用了后期绑定,所以不需要添加引用。

您的代码看起来像(私有子是从我上面链接到的答案中复制的):

Sub RowNumberToClipboard()
    Dim lRow As Long
    lRow = ActiveCell.Row

    Call CopyText (CStr(lRow))
End Sub


Private Sub CopyText(Text As String)
    'VBA Macro using late binding to copy text to clipboard.
    'By Justin Kay, 8/15/2014
    Dim MSForms_DataObject As Object
    Set MSForms_DataObject = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    MSForms_DataObject.SetText Text
    MSForms_DataObject.PutInClipboard
    Set MSForms_DataObject = Nothing
End Sub

【讨论】:

  • 感谢@BigBen,这是有道理的。我测试了代码并且它可以工作(即使没有将 long 转换为字符串),但我当然同意添加 CStr() 是一个更好的解决方案。
  • 如果没有CStr,您应该会收到ByRef argument Type Mismatch 错误。我不确定在没有CStr 的情况下你是如何让你的原始代码工作的。
  • @BigBen 我不想争论它,因为我绝对同意你的观点。但是我在没有CStr() 的情况下测试了代码,它没有抛出任何错误。
  • 如果你放弃 As String 也可以(虽然这也是个坏主意)。
猜你喜欢
  • 1970-01-01
  • 2015-02-07
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多