[RESUELTO] sumar y restar los valores de columna D

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
physic
Mensajes: 85
Registrado: Lun Oct 29, 2018 12:55 am

[RESUELTO] sumar y restar los valores de columna D

Mensaje por physic »

Saludos ,

en el archivo 1, las columnas K, L, P, están vinculadas al archivo 2 .

En la columna D de la hoja 1 del archivo 1, los valores se pegaron allí por otra macro, por lo que estos valores no tienen fórmulas. Ahora, para cambiarlos, sólo puedo hacer esto con Macro .

Necesito crear una Macro en el archivo 1 para Recalcular los valores de toda la columna D con el siguiente cálculo:
D2 = D2 - K2 + L2 + P2
D2 = 1 - 25 + 2 + 1
D2 = - 21 >>> debe ser igual a Cero porque el resultado fue menor que 2
D13 = D13 - K13 + L13 + P13
D13 = 12 - 36 + 13 + 12
D13 = 1 >>> debe ser igual a Cero porque el resultado fue menor que 2
D14 = D14 - K14 + L14 + P14
D14 = 13 - 37 + 14 + 13
D14 = 3 >>> restos el valor calculado, pues el resultado fue mayor que 2
observación:
1) adjunto al archivo 1 , tiene como ejemplo una hoja de cálculo 2 , con todos los valores recalculados para la columna D .

2) los resultados menores que 2 en la columna D , deben ser igual a Cero (0) .

3) los valores Recalculados para la columna D , necesita permanecer en la propia columna D .

4 ) Después de Recalculados los valores de toda la columna D en el archivo 1, la macro debe abrir el archivo 2 y eliminar los valores de las columnas E, H, M, de la línea 2 hacia abajo .
Adjuntos
file 1.ods
(19.11 KiB) Descargado 212 veces
file 2.ods
(13.22 KiB) Descargado 200 veces
Última edición por physic el Mié Mar 27, 2019 11:58 pm, editado 1 vez en total.
LibreOffice 5.4.4.2 >>> Windows 7
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: sumar y restar los valores de columna D

Mensaje por PepeOooSevilla »

Hola.

Copia y pega esta macro en "file 1.ods". En principio hace lo que necesitas. Ten en cuenta que debes cambiar la ruta "K:\file 2.ods" de la variable "RutaArchivoCalc2":

Código: Seleccionar todo

Option Explicit

'La columna A es la 0
Const COL_D As Long = 3
Const COL_E As Long = 4
Const COL_H As Long = 7
Const COL_K As Long = 10
Const COL_L As Long = 11
Const COL_M As Long = 12
Const COL_P As Long = 15

Sub CalcularColumnaD()
	Dim ArchivoCalc1 As Object
	Dim ArchivoCalc2 As Object
	Dim RutaArchivoCalc2 As String
	Dim HojaActiva As Object
	Dim Fila As Long
	Dim Auxiliar As Variant
	Dim mArg()

	On Error GoTo TRATAR_ERROR
	
	ArchivoCalc1 = ThisComponent
	HojaActiva = ArchivoCalc1.getSheets().getByName("Planilha1")
	'Fila 2. La fila 1 es la 0
	Fila = 1
	With HojaActiva
		' Mientras no esté vacía la columna D
		Do While .getCellByPosition(COL_D, Fila).getString() <> ""
			Auxiliar = .getCellByPosition(COL_D, Fila).getValue() - .getCellByPosition(COL_K, Fila).getValue() + _
					.getCellByPosition(COL_L, Fila).getValue() + .getCellByPosition(COL_P, Fila).getValue()
			If Auxiliar < 2 Then
				.getCellByPosition(COL_D, Fila).setValue(0)
			Else
				.getCellByPosition(COL_D, Fila).setValue(Auxiliar)
			End If
			Fila = Fila + 1
		Loop
	End With
	'Eliminar valores de determinadas celdas del archivo 2
	RutaArchivoCalc2 = ConvertToUrl("K:\file 2.ods")
	ArchivoCalc2 = StarDesktop.loadComponentFromURL(RutaArchivoCalc2, "_blank", 0, mArg())
	'Fila 2. La fila 1 es la 0
	Fila = 1
	With ArchivoCalc2.getSheets().getByName("Planilha1")
		Do While .getCellByPosition(COL_E, Fila).getString() <> ""
			.getCellByPosition(COL_E, Fila).clearContents(com.sun.star.sheet.CellFlags.VALUE)
			.getCellByPosition(COL_H, Fila).clearContents(com.sun.star.sheet.CellFlags.VALUE)
			.getCellByPosition(COL_M, Fila).clearContents(com.sun.star.sheet.CellFlags.VALUE)
			Fila = Fila + 1
		Loop
	End With
	MsgBox "Macro finalizada.", 64, "¡Atención!"
	Exit Sub
TRATAR_ERROR:
	MsgBox "Se ha producido un ERROR ...", 16, "¡Atención!"
End Sub
Saludos cordiales.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
physic
Mensajes: 85
Registrado: Lun Oct 29, 2018 12:55 am

[Resuelto] sumar y restar los valores de columna D

Mensaje por physic »

sr. PepeOooSevilla ,

muchas gracias , su Macro se quedó perfecta , funcionó muy bien . :bravo:
felicitaciones por su conocimiento . :bravo:

un enorme abrazo mi amigo . :) :super:
LibreOffice 5.4.4.2 >>> Windows 7
Responder