问题:
在程序外部从Excel复制单元格时,会自动添加双引号.
详细信息:
我在Windows 7计算机上使用Excel 2007.如果我有一个包含以下公式的单元格:
="1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2."
Run Code Online (Sandbox Code Playgroud)
单元格中的输出(格式为数字)在Excel中如下所示:
1SOME NOTES FOR LINE 1.2SOME NOTES FOR LINE 2.
Run Code Online (Sandbox Code Playgroud)
好,好.但是,如果我将单元格复制到另一个程序,例如记事本,我会在开头和结尾都会出现烦人的双引号.请注意保留由"CHAR(9)"创建的选项卡,这很好.
"1 SOME NOTES FOR LINE 1. 2 SOME NOTES FOR LINE 2."
Run Code Online (Sandbox Code Playgroud)
当我复制到另一个程序时,如何防止这些双引号出现?换句话说,当将单元格复制到剪贴板时,是否可以防止这些自动添加?
Gre*_*ter 71
我刚刚遇到这个问题并用CLEAN函数包装每个单元格为我修复它.这应该相对容易,通过=CLEAN(选择您的单元格,然后自动填充列的其余部分.在我这样做之后,粘贴到记事本或任何其他程序不再有重复的引号.
use*_*725 26
如果你尝试粘贴到Word-Pad,Notepad ++或Word,你就不会遇到这个问题.要将单元格值复制为纯文本,要实现您描述的内容,您必须使用宏:
在要应用此工作簿的工作簿中(如果要在多个工作簿中使用,则在Personal.xls中),将以下代码放在标准模块中:
码:
Sub CopyCellContents()
'create a reference in the VBE to Microsft Forms 2.0 Lib
' do this by (in VBA editor) clicking tools - > references and then ticking "Microsoft Forms 2.0 Library"
Dim objData As New DataObject
Dim strTemp As String
strTemp = ActiveCell.Value
objData.SetText (strTemp)
objData.PutInClipboard
End Sub
Run Code Online (Sandbox Code Playgroud)
要将标准模块添加到项目(工作簿),请使用Alt+ 打开VBE,F11然后在左上角的项目窗口中右键单击工作簿,然后选择"插入">"模块".将代码粘贴到将在右侧打开的代码模块窗口中.
返回Excel,转到工具>宏>宏,然后选择名为"CopyCellContents"的宏,然后从对话框中选择选项.在这里你可以将宏分配给一个快捷键(例如像CTRL+ C正常拷贝) - 我用CTRL+ Q.
然后,当您想要将单个单元格复制到记事本/任何位置时,只需执行Ctrl + q(或您选择的任何内容),然后在所选目标中执行CTRL+ V或编辑>粘贴.
我的答案是从这里复制的(有一些补充)
编辑 :(来自评论)
如果在引用列表中找不到Microsoft Forms 2.0 Library,则可以尝试
C:\Windows\System32\FM20.dll(32位Windows)(感谢@JWhy)C:\Windows\SysWOW64\FM20.dll
(在64位上)如果要选择多个单元格并将其值复制到剪贴板而没有所有令人讨厌的引号,则以下代码可能有用.这是对user3616725上面给出的代码的增强.
Sub CopyCells()
'Attach Microsoft Forms 2.0 Library: tools\references\Browse\FM20.DLL
'Then set a keyboard shortcut to the CopyCells Macro (eg Crtl T)
Dim objData As New DataObject
Dim cell As Object
Dim concat As String
Dim cellValue As String
CR = ""
For Each cell In Selection
If IsNumeric(cell.Value) Then
cellValue = LTrim(Str(cell.Value))
Else
cellValue = cell.Value
End If
concat = concat + CR + cellValue
CR = Chr(13)
Next
objData.SetText (concat)
objData.PutInClipboard
End Sub
Run Code Online (Sandbox Code Playgroud)
“如果您想选择多个单元格并将它们的值复制到剪贴板,而不需要所有那些烦人的引号”(没有Peter Smallwood 的多单元格解决方案中的错误)“以下代码可能有用。” 这是 Peter Smallwood 上面给出的代码的增强(“是 user3616725 上面给出的代码的增强”)。这修复了 Peter Smallwood 解决方案中的以下错误:
注意:您仍然无法复制单元格中嵌入的字符,这会导致您将该单元格粘贴到的目标字段退出(即粘贴到 Access 或 SSMS 的编辑表窗口时按 Tab 或 CR)。
Option Explicit
Sub CopyCellsWithoutAddingQuotes()
' -- Attach Microsoft Forms 2.0 Library: tools\references\Browse\FM20.DLL
' -- NOTE: You may have to temporarily insert a UserForm into your VBAProject for it to show up.
' -- Then set a Keyboard Shortcut to the "CopyCellsWithoutAddingQuotes" Macro (i.e. Crtl+E)
Dim clibboardFieldDelimiter As String
Dim clibboardLineDelimiter As String
Dim row As Range
Dim cell As Range
Dim cellValueText As String
Dim clipboardText As String
Dim isFirstRow As Boolean
Dim isFirstCellOfRow As Boolean
Dim dataObj As New dataObject
clibboardFieldDelimiter = Chr(9)
clibboardLineDelimiter = Chr(13) + Chr(10)
isFirstRow = True
isFirstCellOfRow = True
For Each row In Selection.Rows
If Not isFirstRow Then
clipboardText = clipboardText + clibboardLineDelimiter
End If
For Each cell In row.Cells
If IsEmpty(cell.Value) Then
cellValueText = ""
ElseIf IsNumeric(cell.Value) Then
cellValueText = LTrim(Str(cell.Value))
Else
cellValueText = cell.Value
End If ' -- Else Non-empty Non-numeric
If isFirstCellOfRow Then
clipboardText = clipboardText + cellValueText
isFirstCellOfRow = False
Else ' -- Not (isFirstCellOfRow)
clipboardText = clipboardText + clibboardFieldDelimiter + cellValueText
End If ' -- Else Not (isFirstCellOfRow)
Next cell
isFirstRow = False
isFirstCellOfRow = True
Next row
clipboardText = clipboardText + clibboardLineDelimiter
dataObj.SetText (clipboardText)
dataObj.PutInClipboard
End Sub
Run Code Online (Sandbox Code Playgroud)