excel - mac - clipboard windows
Dejar de cotizaciones al copiar de la celda (10)
Problema :
Al copiar una celda de Excel fuera del programa, las comillas dobles se agregan automáticamente.
Detalles :
Estoy usando Excel 2007 en una máquina con Windows 7. Si tengo una celda con la siguiente fórmula:
="1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2."
El resultado en la celda (formateado como número) se ve así en Excel:
1SOME NOTES FOR LINE 1.2SOME NOTES FOR LINE 2.
Bien y bueno. Pero, si copio la celda en otro programa, como el bloc de notas, obtengo comillas dobles molestas al principio y al final. Observe que las pestañas creadas por "CHAR (9)" se mantienen, lo cual es bueno.
"1 SOME NOTES FOR LINE 1. 2 SOME NOTES FOR LINE 2."
¿Cómo puedo evitar que aparezcan estas comillas dobles cuando lo copio a otro programa? En otras palabras, ¿puedo evitar que estos se agreguen automáticamente cuando la celda se copia en el portapapeles?
"Si desea seleccionar varias celdas y copiar sus valores en el portapapeles sin todas esas comillas molestas" ( sin los errores en la solución multicelda de Peter Smallwood) "el siguiente código puede ser útil". Esta es una mejora del código dado anteriormente por Peter Smallwood (que "es una mejora del código dado anteriormente del usuario 3616725"). Esto corrige los siguientes errores en la solución de Peter Smallwood:
- Evita el error del compilador "Variable no definida" (para "CR" - "clibboardFieldDelimiter" aquí)
- Convierta una celda vacía en una cadena vacía frente a "0".
- Agregar pestaña (ASCII 9) vs. CR (ASCII 13) después de cada celda.
- Agregue un CR (ASCII 13) + LF (ASCII 10) (frente a CR (ASCII 13)) después de cada fila.
NOTA: Aún no podrá copiar los caracteres incrustados dentro de una Celda que causarían una salida del campo objetivo al que está pegando esa Celda (es decir, Tabulador o CR al pegar en la Ventana de Acceso a la Tabla de Edición o 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
Acabo de tener este problema y envolver cada celda con la función CLEAN
me lo arregló. Eso debería ser relativamente fácil de hacer haciendo =CLEAN(
, seleccionando su celda, y luego autocompletando el resto de la columna. Después de hacer esto, pega en el Bloc de notas o cualquier otro programa ya no tiene comillas duplicadas.
Mi solución cuando llegué al tema de las cotizaciones fue quitar los retornos de carro del final del texto de mis celdas. Debido a estos retornos de carro (insertados por un programa externo), Excel estaba agregando comillas a toda la cadena.
Para mantener saltos de línea al pegar en el bloc de notas, reemplace esta línea en la macro:
strTemp = ActiveCell.Value
por:
strTemp = Replace(ActiveCell.Value, Chr(10), vbCrLf)
Por favor use la fórmula a continuación
=Clean("1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2.")
y obtendrás lo que quieres ;-)
Primero péguelo en Word, luego puede pegarlo en el bloc de notas y aparecerá sin las comillas
Si desea seleccionar varias celdas y copiar sus valores en el portapapeles sin todas esas comillas molestas, el siguiente código puede ser útil. Esta es una mejora del código proporcionado anteriormente del usuario3616725.
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
Si intenta pegar en Word-Pad, Notepad ++ o Word, no tendría este problema. Para copiar el valor de la celda como texto puro, para lograr lo que describes debes usar una macro:
En el libro de trabajo donde desea que se aplique (o en su Personal.xls si desea usar en varios libros de trabajo), coloque el siguiente código en un módulo estándar:
Código:
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
Para agregar un módulo estándar a su proyecto (libro de trabajo), abra el VBE con Alt + F11 y luego haga clic derecho en su libro de trabajo en la ventana superior izquierda del proyecto y seleccione Insertar> Módulo. Pegue el código en la ventana del módulo de código que se abrirá a la derecha.
Vuelva a Excel, vaya a Herramientas> Macro> Macros y seleccione la macro llamada "CopyCellContents" y luego elija Opciones en el cuadro de diálogo. Aquí puede asignar la macro a una tecla de método abreviado (por ejemplo, como CTRL + C para la copia normal) - Utilicé CTRL + Q.
Luego, cuando quiera copiar una sola celda en Bloc de notas / donde sea, simplemente haga Ctrl + q (o lo que elija) y luego haga una CTRL + V o Edición> Pegar en el destino elegido.
Mi respuesta está copiada (con algunas adiciones) de: here
EDITAR : (de los comentarios)
Si no encuentra la Biblioteca de Microsoft Forms 2.0 en la lista de referencias, puede intentarlo
- buscando FM20.DLL en su lugar (gracias @Peter Smallwood)
- haciendo clic en Examinar y seleccionando
C:/Windows/System32/FM20.dll
(Windows de 32 bits) (gracias @JWhy) - hacer clic en Examinar y seleccionar
C:/Windows/SysWOW64/FM20.dll
(en 64 bits)
También es posible eliminar estas comillas dobles colocando el resultado en la función "Limpiar".
Ejemplo: = CLEAN ("1" & CHAR (9) & "ALGUNAS NOTAS PARA LA LÍNEA 1." & CHAR (9) & "2" & CHAR (9) & "ALGUNAS NOTAS PARA LA LÍNEA 2.")
La salida se pegará sin las comillas dobles en otros programas como Notepad ++.
Posible problema en relación con la respuesta de "user3616725":
Estoy en Windows 8.1 y parece haber un problema con el código VBA vinculado de la respuesta aceptada de "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
Detalles:
Al ejecutar el código y pegar el portapapeles en una celda de Excel obtengo dos símbolos compuestos por cuadrados con un signo de interrogación dentro, como este: ⍰⍰. Pegar en el Bloc de notas ni siquiera muestra nada.
Solución:
Después de buscar por bastante tiempo, encontré otro script VBA del usuario "Nepumuk" que hace uso de la API de Windows . Aquí está su código que finalmente funcionó para mí:
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
Para usarlo de la misma manera que el primer código VBA de arriba, cambie el Sub "Beispiel ()" desde:
Public Sub Beispiel()
Call StringToClipboard("Hallo ...")
End Sub
A:
Sub CopyCellContents()
Call StringToClipboard(ActiveCell.Value)
End Sub
Y ejecutarlo a través del menú macro de Excel como se sugiere desde "usuario3616725" de la respuesta aceptada:
Vuelva a Excel, vaya a Herramientas> Macro> Macros y seleccione la macro llamada "CopyCellContents" y luego elija Opciones en el cuadro de diálogo. Aquí puede asignar la macro a una tecla de acceso directo (p. Ej., Como Ctrl + c para la copia normal) - Utilicé Ctrl + q.
Luego, cuando desee copiar una sola celda en Bloc de notas / donde sea, simplemente haga Ctrl + q (o lo que elija) y luego haga Ctrl + v o Editar> Pegar en el destino elegido.
Editar (21 de noviembre de 2015):
@ comentario de "dotctor":
No, esto en serio no es una pregunta nueva! En mi opinión, es una buena adición para la respuesta aceptada ya que mi respuesta aborda los problemas que puede enfrentar al usar el código de la respuesta aceptada. Si tuviera más reputación, habría creado un comentario.
@ comentario de "Teepeemm":
Sí, tiene razón, las respuestas que comienzan con el título "Problema:" son engañosas. Se cambió a: "Posible problema en relación con la respuesta de" user3616725 ":". Como comentario, ciertamente habría escrito mucho más compacto.