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 anterior y pegar el portapapeles en una celda en Excel, obtengo dos símbolos compuestos por cuadrados con un signo de interrogación adentro, como este: ⍰⍰. Pegar en el Bloc de notas ni siquiera muestra nada.
Solución:
Después de buscar durante 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 ()" de:
Public Sub Beispiel()
Call StringToClipboard("Hallo ...")
End Sub
A:
Sub CopyCellContents()
Call StringToClipboard(ActiveCell.Value)
End Sub
Y ejecútelo a través del menú de macros de Excel como se sugiere desde "user3616725" de la respuesta aceptada:
De vuelta en 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, Ctrl + c para una copia normal). Usé Ctrl + q.
Luego, cuando desee copiar una sola celda en el Bloc de notas / donde sea, simplemente haga Ctrl + q (o lo que elija) y luego haga Ctrl + vo Editar> Pegar en el destino elegido.
Editar (21 de noviembre de 2015):
@ comentario de "dotctor": ¡
No, esta 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. Cambiado a: "Posible problema en relación con la respuesta de" user3616725 ":". Como comentario ciertamente habría escrito mucho más compacto.