Haz tu Pregunta
0

Por que no funciona en intercambio de celdas de una macro de excel

preguntado 2019-11-09 20:09:46 +0100

Imagen Gravatar de josejb

updated 2019-11-10 18:40:27 +0100

Hola, no tengo muchas nociones de programación, pero tengo algunas macros en excel para trabajar con los turnos de trabajo de personal, y he conseguido que todas funcionen en calc, excepto una que me hace un intercambio de celdas, que son los cambios que realiza el personal, como puedo hacer que me funione esa macro en calc.

Sub IntercambiarCeldas()
' IntercambiarCeldas Macro
' Intercambia los valores de 2 celdas
'
' Acceso directo: CTRL+j
'
    Dim Rng1 As Range, Rng2 As Range
Dim arr1 As Variant, arr2 As Variant

Set Rng1 = Application.Selection
Set Rng1 = Application.InputBox("Range1:", , Rng1.Address, Type:=8)

Application.ScreenUpdating = False
arr1 = Rng1.Value
arr2 = Rng2.Value
Rng1.Value = arr2
Rng2.Value = arr1
Application.ScreenUpdating = True
End Sub
edit re-etiquetar marcar como ofensivo cerrar fusionar delete

1 Responder

Ordenar por » viejos nuevas más votado
0

respondido 2019-11-10 00:17:38 +0100

Imagen Gravatar de mauricio

updated 2019-11-10 17:43:46 +0100

Siempre menciona tu sistema operativo y versión de LibreOffice, ayuda a quien quiera ayudarte.

Es muy útil, también, que siempre menciones en que línea da el error. El soporte para VBA mejora con cada versión de LibreOffice, pero no es completo, sigo recomendando siempre, migrar el código. Copio el código de una macro que hace lo mismo, interncambiar el valor de un par de celdas.

IMPORTANTE: Las celdas deben estar previamente seleccionadas.

Sub swap_values()

    doc = ThisComponent
    sel = doc.CurrentSelection

    If sel(0).ImplementationName = "ScCellObj" Then
        c1 = sel(0)
        c2 = sel(1)
    Else
        If sel(0).Columns.Count = 2 Then
            c1 = sel(0).getCellByPosition(0,0)
            c2 = sel(0).getCellByPosition(1,0)
        Else
            c1 = sel(0).getCellByPosition(0,0)
            c2 = sel(0).getCellByPosition(0,1)      
        End If
    End If

    tmp = c1.String
    c1.String = c2.String
    c2.String = tmp

End Sub
edit marcar como ofensivo delete enlace mas

Comments

Siento no haberlo descrito correctamente; no como tú, que lo has hecho perfecto y rápido. Me has solucionado el problema, que reducirá en mucho mi tiempo de trabajo. Mil gracias

Imagen Gravatar de josejb josejb ( 2019-11-11 18:52:54 +0100 )edit
Ingresa/Regístrate para Contestar

Herramientas de Preguntas

1 seguidor

Estadisticas

Preguntado: 2019-11-09 20:09:46 +0100

Visto: 15 veces

Ultima actualización: Nov 10