Опустить кавычки при копировании из ячейки



1230   10  

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(, выбор ячейки, а затем автозаполнение остальной части столбца. После того, как я сделал это, вставки в блокнот или любую другую программу больше не имели повторяющихся кавычек.

сначала вставьте его в Word, затем вы можете вставить его в блокнот, и он появится без кавычек

Если вы хотите выбрать несколько ячейки и скопировать значения в буфер обмена без всех этих раздражающих приводит следующий код может быть полезен. Это усовершенствование кода, приведенного выше от пользователя 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 Sub

To:

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.Value

by:

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

    Ничего не найдено.