【问题标题】:How to I insert code snippets in the VBA editor?如何在 VBA 编辑器中插入代码片段?
【发布时间】:2020-08-19 15:33:41
【问题描述】:

我正在尝试将我最常使用的代码 sn-ps 集合在一起,并且我希望有一种方法可以将它们插入到 VBA 编辑器中的位置。

现在我正在使用下面的代码将 sn-p 复制到剪贴板,但我仍然需要自己粘贴它。 有没有更直接的方法可以在我选择的 VBA 编辑器中插入 sn-p,而无需我粘贴?

下面的pasteClipboard 子例程在 VBA 编辑器中不起作用:(

Private Sub copyCodeToClipboard(codeType As enCodeSnippets)
    Dim codeText
    codeText = getCodeText(codeType)
    copyToClipboard codeText
End Sub

Sub copyToClipboard(textI)
    'GLOBAL CALLER TO COPY TEXT TO CLIPBOARD
    Dim DObj As New DataObject
    
    DObj.SetText (textI)
    DObj.PutInClipboard
End Sub

Sub pasteClipboard()
    Application.SendKeys "^v", True
End Sub

【问题讨论】:

  • 与其复制代码 sn-p,不如在打开工作簿时创建一个导入项目的模块?这样,您的所有项目都将始终拥有最新版本
  • 您可以使用代码库或类似mztools.com

标签: excel vba


【解决方案1】:

您可以使用 Shell 对象发送击键来粘贴剪贴板的内容,如下所示:

Sub pasteClipboard()
    Dim keys As String
    Dim wsh As Object
    Application.Wait Now() + TimeValue("00:00:02")
    keys = "^v"
    Set wsh = CreateObject("WScript.Shell")
    wsh.SendKeys keys, True
    Set wsh = Nothing
End Sub

等待时间是可选的。我个人在没有它的情况下运行代码并且它有效。 这受到 Jan Karel Pieterse 对 this thread 的回答的启发。

【讨论】:

    【解决方案2】:

    延迟后,我通过一个一个地发送密钥来解决这个问题。我以前使用剪贴板的代码开始失败,因为粘贴时它会返回“??”而不是实际的文本。

    Sub sendKeysOneByOne(codeType As enCodeSnippets)
        'USE THIS MACRO TO CREATE CODE IN VBA
        Dim textI, I, letterToSend, waitSeconds
        
        textI = getCodeText(codeType)
        waitSeconds = 3
        
        For I = 1 To waitSeconds
            DoEvents
            Application.Wait (Now() + TimeValue("00:00:01"))
            Application.StatusBar = "Pasting  where your mouse is in " & waitSeconds - I & " seconds"
            DoEvents
        Next
        
        For I = 1 To Len(textI)
            letterToSend = Mid(textI, I, 1)
            SendKeys letterToSend
        Next
        
        Application.StatusBar = False
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-02
      • 2021-11-21
      • 2019-08-11
      • 2017-04-11
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多