Excel VBA宏在记事本中复制不同的单元格值

Excel VBA宏在记事本中复制不同的单元格值,excel,vba,Excel,Vba,我想将不同的单元格数据复制到记事本中。我该怎么做呢。 示例:来自第3行B列(B3)的值,然后来自第3行E列(E3) 提前感谢。使用帮助器模块,您可以: Dim cell As Range Dim concat As String For Each cell In Range("$B$3,$E$3") concat = concat & vbCrLf & cell.Value Next ' Debug.Print concat Text2Clipboard c

我想将不同的单元格数据复制到记事本中。我该怎么做呢。 示例:来自第3行B列(B3)的值,然后来自第3行E列(E3)


提前感谢。

使用帮助器模块,您可以:

 Dim cell As Range
 Dim concat As String
 For Each cell In Range("$B$3,$E$3")
    concat = concat & vbCrLf & cell.Value
 Next

 ' Debug.Print concat
 Text2Clipboard concat
如果您没有选择
Range($B$3,$E$3”)
而是选择了
Selection
,那么您将得到当前选择的所有单元格

提示:您可以使用Ctrl+LeftMouseButton选择单个单元格

在VBA项目中的某个地方需要以下帮助器定义(我建议使用名为“剪贴板”的模块):

将函数abOpenClipboard Lib“User32”别名“OpenClipboard”(ByVal Hwnd As Long)声明为Long
将函数abCloseClipboard Lib“User32”别名“CloseClipboard”()声明为
将函数abemptycipboard Lib“User32”别名“emptycipboard”()声明为
将函数abIsClipboardFormatAvailable Lib“User32”别名“IsClipboardFormatAvailable”(ByVal wFormat As Long)声明为Long
将函数abSetClipboardData Lib“User32”别名“SetClipboardData”(ByVal wFormat As Long,ByVal hMem As Long)声明为Long
将函数abGetClipboardData Lib“User32”别名“GetClipboardData”(ByVal wFormat As Long)声明为Long
将函数abGlobalAlloc Lib“Kernel32”别名“GlobalAlloc”(ByVal wFlags为Long,ByVal dwBytes为Long)声明为Long
将函数abGlobalLock Lib“Kernel32”别名“GlobalLock”(ByVal hMem As Long)声明为Long
将函数abGlobalUnlock Lib“Kernel32”别名“GlobalUnlock”(ByVal hMem As Long)声明为布尔值
将函数abLstrcpy Lib“Kernel32”别名“lstrcpyA”(ByVal lpString1任意,ByVal lpString2任意)声明为
将函数abGlobalFree Lib“Kernel32”别名“GlobalFree”(ByVal hMem As Long)声明为Long
将函数abGlobalSize Lib“Kernel32”别名“GlobalSize”(ByVal hMem As Long)声明为Long
常数GHND=&H42
常数CF_TEXT=1
常量APINULL=0
函数Text2Clipboard(szText作为字符串)
作为整数的Dim-wLen
朦胧的记忆如长
我的记忆很长
Dim retval作为变体
将内存设置为布尔值
'获取长度,包括最后一个CHR$(0)的额外长度。
wLen=Len(szText)+1
szText=szText&Chr$(0)
hMemory=abGlobalAlloc(GHND,wLen+1)
如果hMemory=APINULL,则
MsgBox“无法分配内存。”
退出功能
如果结束
wfreemory=True
lpMemory=abGlobalLock(hMemory)
如果lpMemory=APINULL,则
MsgBox“无法锁定内存。”
免费转到T2CB_
如果结束
'将字符串复制到锁定的内存中。
retval=abLstrcpy(lpMemory,szText)
'不要发送剪贴板锁定的内存。
retval=abGlobalUnlock(hMemory)
如果abOpenClipboard(0&)=APINULL,则
MsgBox“无法打开剪贴板。可能其他应用程序正在使用它。”
免费转到T2CB_
如果结束
如果abEmptyClipboard()=APINULL,则
MsgBox“无法清空剪贴板。”
转到T2CB_关闭
如果结束
如果abSetClipboardData(CF_TEXT,hMemory)=apirull,则
MsgBox“无法设置剪贴板数据。”
转到T2CB_关闭
如果结束
wfreemory=False
T2CB_关闭:
如果abCloseClipboard()=APINULL,则
MsgBox“无法关闭剪贴板。”
如果结束
如果wfreemory,则转到T2CB_Free
退出功能
T2CB_免费:
如果abGlobalFree(hMemory)为空,则
MsgBox“无法释放全局内存。”
如果结束
端函数
注释

  • 代码“借用自”)
  • 在Windows XP SP3上的Excel 2003中测试

将单元格值写入文本文件,然后在记事本或您喜爱的文本编辑器中打开

' Write to file.
Open "C:\temp.txt" For Output As #1
Print #1, Range("B3").Value, Range("C4").Value
Print #1, Range("Q981").Value, "hello world!" ' or whatever else
Close #1
' Now open it in notepad.
Shell ("notepad ""C:\temp.txt""")

我想要第三行B列的值,然后是第四行C列的值?您可以编辑您的问题(单击编辑链接)。请注意,所需的实际列不会更改答案。当然你可以自己选择。在我的回答中,选择
范围($B$3,$C$4”)
(或者按照我的建议使用
选项
)。。。最后,打开记事本并粘贴。我想这是一个正确的解决方案,如果你想把问题逐字逐句地写下来的话!“将不同的单元格数据复制到记事本”可以通过模拟人进行复制粘贴来实现,但为什么不直接写入文本文件呢??无论如何,信息价值+1。@Jean-François:我想这很公平;在将“复制到记事本”解释为“纯文本”时,写入文件的灵活性要低得多(如图所示:他真正想要记事本中的数据的可能性有多大?)。另外,我不想逐字逐句地回答问题(我建议使用选择,而不是一些随机的固定范围)。然而,经验表明,如果答案与原始问题(措辞、样本)紧密相关,即使细节无关紧要,也能获得最佳理解。与问题相关的是额外的一英里,伊姆霍
' Write to file.
Open "C:\temp.txt" For Output As #1
Print #1, Range("B3").Value, Range("C4").Value
Print #1, Range("Q981").Value, "hello world!" ' or whatever else
Close #1
' Now open it in notepad.
Shell ("notepad ""C:\temp.txt""")