【问题标题】:VBA-Detecting Paste Action in other ProgramsVBA-检测其他程序中的粘贴动作
【发布时间】:2016-12-28 05:24:12
【问题描述】:

我的目标:让 Microsoft Excel 通知我已将剪贴板的内容粘贴到任何其他窗口中,以便它选择行中的下一项并复制它。

例如,在第一行如下所示的电子表格中:

A,b,c,d,e,f,g,h

如果我要复制 A,打开记事本(或任何其他程序)并粘贴,Excel 将继续复制 b。如果我再次粘贴到记事本中,它将选择并复制 C,在功能上允许我只复制 A,然后能够进入另一个程序并按 ctrl-v 7 次并在我的输出中获得 A 到 H。

这是一个奇怪的问题,在一个容易自动化的世界里,似乎效率很低。但是,我受法律合同的约束,不得使用某些类型的自动化。然而,这属于我在法律上允许做的事情。

有人有什么想法吗?我无法找到有关此类问题的任何文档。

【问题讨论】:

  • 很确定唯一的方法是继承另一个程序并拦截WM_PASTE消息。
  • 从目标应用程序驱动它怎么样?目标应用程序是否将数据从源复制到目标?还是使用中介?
  • @ThunderFrame - 你的意思是发布WM_PASTE而不是等待用户手动粘贴?
  • 看起来像是一份奇怪的法律合同。
  • 这绝对是一个奇怪的规则,但基本上,我们 32 年接触的数据库不允许我们附加任何类型的自动化。它是通过浏览器访问的。我们甚至不允许做一些事情,比如让宏将光标移动到适当的位置以便用户可以粘贴它,因为这太自动化了。基本上,我们能做的任何事情都必须完全取决于用户获取数据输入的方式。它如何进入系统被锁定。就像我说的那样,我们必须争取被允许复制/粘贴。

标签: vba excel


【解决方案1】:

您可以遍历单元格并直接写入文本文件。变量“x”跨列移动。变量“n”是在移动到下一列之前打印它的次数。

Sub textfile()

Dim PrintVal As String
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim Filename As Object

Set Filename = fso.CreateTextFile("C:\print.txt", True, True)


For x = 0 To 7

PrintVal = Cells(1, 1 + x).Value

For n = 1 To 7
Filename.write PrintVal
Next n

Next x

Filename.Close

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多