Vino Layuan 2015
Pero no tendrá mucho impacto en un uso normal.
Existe una solución temporal a este problema:
// -
Código adicional en Worksheet_SelectionChange:
Subhoja privada_SelectionChange(ByVal objetivo como rango)
Vaya a error
/manejo de errores cuando ocurra un error, y vaya a err cuando ocurra una excepción.
Atenuar copia como rango
Atenuar iCutCopymode como número entero
Si CutCopyMode, entonces
Establezca rngCutCopy = CutCopyRange
Otro
Establece rngCutCopy = Nada
Terminará si...
iCutCopymode = CutCopyMode
//Tu código p >
Si iCutCopymode = xlCopy, entonces
rngCutCopy. Copiar
ElseIf iCutCopymode = xlCut Then
rngCutCopy. Recorte
Terminará si...
Error:
No hace nada cuando ocurre '/Excepción, simplemente bloquea el diálogo.
Conectores finales
// -
Código extra en módulo
Opción explícita
/Bloquear El especificado bloque de memoria en la memoria y devuelve un valor de dirección que apunta al comienzo del bloque de memoria.
Función de declaración privada GlobalLock _
Lib "kernel32" ( _
ByVal hMem As Long) _
Misma longitud
/ Desbloquea la memoria previamente bloqueada, invalidando el puntero al bloque de memoria.
Función de declaración privada GlobalUnlock _
Lib "kernel32" ( _
ByVal hMem As Long) _
Misma longitud
/Obtener el tamaño del bloque de memoria.
Función de declaración privada GlobalSize _
Lib "kernel32" ( _
ByVal hMem As Long) _
Misma longitud
/Abrir Portapapeles
Función de declaración privada OpenClipboard _
Lib "user32" ( _
ByVal hwnd As Long) _
Misma longitud
/Cerrar portapapeles
Función de declaración privada CerrarClipboard _
Lib "user32" () _
Misma longitud
/Obtener datos del portapapeles
Función de declaración privada GetClipboardData _
Lib "user32" ( _
ByVal wFormat As Long) _ p>
Siempre y cuando
/ Copia datos en la memoria de una ubicación a otra.
Subcopia de declaración privada de memoria_
lib " kernel 32 " u
Alias "RtlMoveMemory" (_
Cualquier destino, _
Cualquier fuente, _
La longitud de ByVal es Long)
'// - //
// - se utiliza para obtener la función para copiar o cortar un rango de celdas.
'// - //
Función pública CutCopyRange() como un rango
Ir a Hanlder cuando ocurre un error
Dim bytData() es Byte, hMem es Long, nClipsize es Long, lpData es Long
Dim sSource es una cadena, sTemp() es una cadena
Marque el libro como una cadena y agregue el trabajo Etiquetar tabla como cadena, rango de etiquetas como cadena
/Abrir portapapeles
Abrir portapapeles.
/Obtener información sobre la copia de celdas de Excel en el portapapeles.
hMem = GetClipboardData(49154)
/Si hay datos.
Si CBool(hMem) entonces
/Obtener el tamaño de la memoria de datos
nClipsize = GlobalSize (hMem)
/Lock este bloque de memoria, devuelve la dirección inicial del bloque de memoria.
lpData = bloqueo global (hMem)
Si lpData & lt& gt entonces 0
/Redefinir el tamaño de la matriz
Cambiar bytData( 0 a nClipsize - 1) Cambiar tamaño a bytes
/Copiar memoria a matriz
CopyMemory bytData(0), ByVal lpData, nClipsize
/Convertirá matriz binaria a cadena
sSource = StrConv (bytData, vbUnicode)
/Dividir cadena
sTemp = Split(sSource, Chr(0))
/Si se encuentra "\" en la cadena dividida 2 (es decir, el libro se ha guardado)
Si InStr (sTemp(1), "\") Entonces
p>/Obtener el nombre del libro
sWorkbook = Mid(sTemp(1), InStrRev (sTemp(1), " \") + 1)
Otros
/Obtener el nombre del libro
sWorkbook = sTemp(1)
Terminará si...
/Obtener el nombre de la hoja de trabajo
sSheet = Left(sTemp(2), InStr (sTemp(2), "!") - 1)
/Obtener la dirección del rango de celdas
sRange = r 1c 1 _ To _ a 1(Mid(sTemp(2), InStr (sTemp(2), "!") + 1))
/ Obtener el estado de corte o copia celda
set CutCopyRange = Libros de trabajo(sLibro de trabajo). Sábanas (sábanas). Rango
Termina si
/Desbloquear memoria
GlobalUnlock hMem
/Si no está en estado de copia o corte.
Otros
Establecer CutCopyRange = Nada
Terminará si...
/Cerrar el portapapeles
Cerrar portapapeles
Función de salida
Handel:
Depurar. Error de impresión. cantidad y cantidad.
Bien. Descripción
Función final
'// -
//-Se utiliza para convertir el estilo de referencia R1C1 de la celda al estilo A1-
'// -
Función privada r 1c 1 _ To _ a 1(RgStr As String)As String
Dim sTemp() as String
Si InStr (RgStr, ":") entonces
sTemp = Split(RgStr, ":")
r 1c 1 _ To _ a 1 = r 1c 1 _ To _ a 1(sTemp(0))&":"&r 1c 1 _ To _ a 1(sTemp(1))
Otro
RgStr = Mid(RgStr, 2)
sTemp = Split(RgStr, " C ")
r 1c 1 _ To _ a 1 = Chr(64+sTemp(1))& sTemp(0 )
Terminará si...
Finalizar función