Red de conocimiento de recetas - Recetas caseras - Vino Layuan 2015

Vino Layuan 2015

En Excel2003, si escribe código VBA en el evento "Worksheet_SelectionChange", la función de pegar no funcionará. Todavía no existe una buena solución; se dice que es un error de 2003. El siguiente código puede resolver temporalmente este problema, pero el código en sí también tiene algunos errores: si se selecciona toda la fila, es un error, simplemente detectelo :-).

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

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) _

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