10 ответов:
Если вы попытаетесь вставить в Word-Pad, Notepad++ или Word, у вас не будет этой проблемы. Чтобы скопировать значение ячейки как чистый текст, для достижения того, что вы описываете, вы должны использовать макрос:
в книге, где вы хотите, чтобы это применялось (или в вашем личном.формате 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чтобы добавить стандартный модуль в проект (книгу), откройте VBE с помощью Alt+F11 а затем щелкните правой кнопкой мыши на книге в верхнем левом окне проекта и выберите Вставить>модуль. Вставьте код в окно модуля кода, которое откроется справа.
назад в Excel, перейдите сервис>макрос>макросы и выберите макрос под названием "CopyCellContents", а затем выберите Параметры из диалогового окна. Здесь вы можете назначить макрос для сочетания клавиш (например, как CTRL+C для нормальной копии) - я использовал CTRL+ Q.
затем, когда вы хотите скопировать одну ячейку в блокнот / где угодно, просто сделайте Ctrl+q( или что бы вы ни выбрали), а затем сделайте CTRL+V или изменить > вставить в выбранном месте назначения.
мой ответ скопирован (с небольшими дополнениями) от: здесь
EDIT: (из комментов)
Если вы не нашли библиотеку Microsoft Forms 2.0 в справочниках список, Вы можете попробовать
- смотря для fm20.DLL вместо этого (спасибо @Peter Smallwood)
- нажмите кнопку Обзор и выберите
C:\Windows\System32\FM20.dll(32 бит Windows) (спасибо @JWhy)- нажмите кнопку Обзор и выберите
C:\Windows\SysWOW64\FM20.dll(на 64-разрядная версия)
у меня просто была эта проблема и обертывание каждой ячейки с
CLEANфункция исправила это для меня. Это должно быть относительно легко сделать, выполнив=CLEAN(, выбор ячейки, а затем автозаполнение остальной части столбца. После того, как я сделал это, вставки в блокнот или любую другую программу больше не имели повторяющихся кавычек.
Если вы хотите выбрать несколько ячейки и скопировать значения в буфер обмена без всех этих раздражающих приводит следующий код может быть полезен. Это усовершенствование кода, приведенного выше от пользователя 3616725.
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
мое решение, когда я попал в кавычки вопрос был лишить каретки возвращается из конца текста моих ячеек. Из-за этих возвращений каретки (вставленных внешней программой) Excel добавлял кавычки ко всей строке.
возможная проблема в отношении ответа от "user3616725":
Im на Windows 8.1 и, похоже, проблема со связанным кодом VBA из принятого ответа от "user3616725":Sub CopyCellContents() ' !!! IMPORTANT !!!: ' CREATE A REFERENCE IN THE VBE TO "Microsft Forms 2.0 Library" OR "Microsft Forms 2.0 Object Library" ' DO THIS BY (IN VBA EDITOR) CLICKING TOOLS -> REFERENCES & THEN TICKING "Microsoft Forms 2.0 Library" OR "Microsft Forms 2.0 Object Library" Dim objData As New DataObject Dim strTemp As String strTemp = ActiveCell.Value objData.SetText (strTemp) objData.PutInClipboard End Subдетали:
Запуск над кодом и вставка буфера обмена в ячейку в Excel я получаю два символа, состоящие из квадратов с вопросительным знаком внутри, например:⍰ ⍰. Вставка в блокнот даже не показывает что угодно.устранение:
После поиска в течение довольно долгого времени я нашел другой скрипт VBA от пользователя "Nepumuk", который использует API Windows. Вот его код, который наконец-то сработал для меня:Option Explicit Private Declare Function OpenClipboard Lib "user32.dll" ( _ ByVal hwnd As Long) As Long Private Declare Function CloseClipboard Lib "user32.dll" () As Long Private Declare Function EmptyClipboard Lib "user32.dll" () As Long Private Declare Function SetClipboardData Lib "user32.dll" ( _ ByVal wFormat As Long, _ ByVal hMem As Long) As Long Private Declare Function GlobalAlloc Lib "kernel32.dll" ( _ ByVal wFlags As Long, _ ByVal dwBytes As Long) As Long Private Declare Function GlobalLock Lib "kernel32.dll" ( _ ByVal hMem As Long) As Long Private Declare Function GlobalUnlock Lib "kernel32.dll" ( _ ByVal hMem As Long) As Long Private Declare Function GlobalFree Lib "kernel32.dll" ( _ ByVal hMem As Long) As Long Private Declare Function lstrcpy Lib "kernel32.dll" ( _ ByVal lpStr1 As Any, _ ByVal lpStr2 As Any) As Long Private Const CF_TEXT As Long = 1& Private Const GMEM_MOVEABLE As Long = 2 Public Sub Beispiel() Call StringToClipboard("Hallo ...") End Sub Private Sub StringToClipboard(strText As String) Dim lngIdentifier As Long, lngPointer As Long lngIdentifier = GlobalAlloc(GMEM_MOVEABLE, Len(strText) + 1) lngPointer = GlobalLock(lngIdentifier) Call lstrcpy(ByVal lngPointer, strText) Call GlobalUnlock(lngIdentifier) Call OpenClipboard(0&) Call EmptyClipboard Call SetClipboardData(CF_TEXT, lngIdentifier) Call CloseClipboard Call GlobalFree(lngIdentifier) End Subчтобы использовать его так же, как первый код VBA сверху, измените Sub "Beispiel()" от:
Public Sub Beispiel() Call StringToClipboard("Hallo ...") End SubTo:
Sub CopyCellContents() Call StringToClipboard(ActiveCell.Value) End Subи запустите его через меню макроса Excel, как предложено из "user3616725" из принятый ответ:
назад в Excel, перейдите сервис>макрос>макросы и выберите макрос называется "CopyCellContents", а затем выберите Параметры из диалогового окна. Здесь вы можно назначить макрос для сочетания клавиш (например, как Ctrl+c для нормального копировать) - я использовал Ctrl+q.
затем, когда вы хотите скопировать одну ячейку в блокнот/где, просто сделайте Ctrl+q (или все, что вы выбрали), а затем сделайте Ctrl+v или Правка>Вставить в выбранный назначение.
Edit (21 ноября 2015 года):
@ комментарий от "dotctor":
Нет, это серьезно не новый вопрос! На мой взгляд это хорошее дополнение принято отвечать, так как мой ответ решает проблемы, с которыми вы можете столкнуться при использовании кода из принятого ответа. Если бы у меня было больше репутации, я бы создал комментарий.
@ комментарий от "Teepeemm":
Да, вы правы, ответы начинаются с названия Проблема":" вводят в заблуждение. Изменено на: "возможная проблема в отношении ответа от "user3616725":". В качестве комментария я, конечно, написал бы гораздо более компактно.
чтобы сохранить разрывы строк при вставке в блокнот, замените эту строку в макросе:
strTemp = ActiveCell.Valueby:
strTemp = Replace(ActiveCell.Value, Chr(10), vbCrLf)
пожалуйста, используйте следующую формулу
=Clean("1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2.")и вы получите то, что вы хотите ;-)
также можно удалить эти двойные кавычки, поместив свой результат на" чистую " функцию.
пример: =CLEAN ("1"&CHAR (9)&"НЕКОТОРЫЕ ПРИМЕЧАНИЯ ДЛЯ СТРОКИ 1."&CHAR (9)&"2"&CHAR(9)&"НЕКОТОРЫЕ ПРИМЕЧАНИЯ ДЛЯ СТРОКИ 2.")
вывод будет вставлен без двойных кавычек на других программах, таких как Notepad++.
"Если вы хотите выбрать несколько ячейки и скопировать значения в буфер обмена без всех этих раздражающих котировки" (без ошибки в решении с несколькими ячейками Питера Смоллвуда) " следующий код может быть полезен."Это усовершенствование кода, приведенного выше от Питера Смоллвуда (который "является усовершенствованием кода, приведенного выше от пользователя 3616725"). Это исправляет следующие ошибки в Peter Smallwood решение:
- позволяет избежать ошибки компилятора " переменная не определена "(для" CR " - "clibboardFieldDelimiter" здесь)
- преобразовать пустую ячейку в пустую строку против "0".
- Добавить вкладку (ASCII 9) против CR (ASCII 13) после каждой ячейки.
- добавить возврат каретки (ASCII 13) + перевод строки (ASCII 10) (и возврат каретки (ASCII 13)) после каждой строки.
Примечание: Вы все равно не сможете скопировать символы, встроенные в ячейку, что приведет к выходу целевое поле, в которое вы вставляете эту ячейку (т. е. Tab или CR при вставке в окно редактирования таблицы Access или SSMS).
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
Comments