[RESUELTO]Bloquear hoja d calc con contraseña mediante macro

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
fer17rugbier
Mensajes: 4
Registrado: Mié Ago 11, 2021 7:09 am

[RESUELTO]Bloquear hoja d calc con contraseña mediante macro

Mensaje por fer17rugbier »

Hola buenos dias,

Estoy aprendiendo a programar macros en LibreOffice y me encuentro con el siguiente problema:
Estoy programando la macro para bloquee y desbloquee la pagina mediante una contraseña. El problema que me sale al ejecutar la macro es que la hoja se desbloquea solo cuando no se introduce ninguna contraseña en el InputBox y la contraseña que introduzco en codigo me marca como contraseña incorrecta.

De antemano muchas gracias por su ayuda.

Les dejo el codigo para que me puedan echar una mano.

Saludos.

Código: Seleccionar todo

Sub ProtegerHoja()
 

Dim oHojaActiva As Object
Dim x As Object


	oHojaActiva = StarDesktop.CurrentComponent
	if oHojaActiva.supportsService("com.sun.star.sheet.SpreadsheetDocument") Then
		for each x in ThisComponent.Sheets()
			x.Protect( "Fernando" )
		next
		MsgBox "La hoja se ha protegido correctamente"
	end if
	

	
End Sub

Sub DesprotegerHoja()

Dim oHojaActiva As Object
Dim x As Object
Dim pass As String

	
	oHojaActiva = StarDesktop.CurrentComponent		
	pass = InputBox ("¿Cual es la clave?")

	if Fernando <> pass then
		MsgBox "Contraseña incorrecta"
	else
		oHojaActiva.supportsService("com.sun.star.sheet.SpreadsheetDocument")
			for each x in ThisComponent.Sheets()
				x.UnProtect( "Fernando" )
			next
				MsgBox "Hoja desprotegida"
	end if



End Sub
Última edición por fer17rugbier el Mar Ago 17, 2021 7:59 am, editado 2 veces en total.
LibreOffice 6.2 en Windows 10
Neftali R
Mensajes: 169
Registrado: Mar Jun 15, 2021 12:48 pm
Ubicación: Venezuela

Re: Bloquear hoja de calculo con contraseña mediante macro

Mensaje por Neftali R »

Bienvenido al foro fer17rugbier,

Claro que aquí te ayudamos.

Me parece que el problema está aquí
if Fernando <> pass then
Ahí estás comprobando si la variable Fernando es diferente de la variable pass, lo cual en realidad debería arrojarte un error, ya que la variable Fernando nunca fue declarada(de hecho, en mi IDE eso hace que salte un error), lo que tendrías que poner es.

If "Fernando" <> pass then

Con "Fernando" entre comillas para que el IDE lo reconozca como un String y no como una Variable.

Código: Seleccionar todo

Sub ProtegerHoja()
Dim oHojaActiva As Object
Dim x As Object


'oHojaActiva = StarDesktop.CurrentComponent
oHojaActiva = ThisComponent
	If oHojaActiva.supportsService("com.sun.star.sheet.SpreadsheetDocument") Then
		For Each x In ThisComponent.Sheets()
		x.Protect( "Fernando" )
		Next
	MsgBox "La hoja se ha protegido correctamente"
	End If
End Sub

Sub DesprotegerHoja()

Dim oHojaActiva As Object
Dim x As Object
Dim pass As String
   
'oHojaActiva = StarDesktop.CurrentComponent      
oHojaActiva = ThisComponent
pass = InputBox ("¿Cual es la clave?")

	'If pass <> "Fernando" Then
	'MsgBox "Contraseña incorrecta"
	'Else
		If oHojaActiva.supportsService("com.sun.star.sheet.SpreadsheetDocument") Then
        	For Each x In ThisComponent.Sheets()
 	        On Error Goto Etiqueta:
            x.UnProtect( pass )
         	Next
       		MsgBox "Hoja desprotegida"
		End If
	'End If
If pass = "Condición Imposible" Then
Etiqueta:
MsgBox "Contraseña Incorrecta"
End If

End Sub
Yo utilizo ThisComponent en lugar de StarDesktop.CurrentComponent, este último en realidad estaba obteniendo el IDE en lugar del archivo.

También, en lugar de comprobar que la contraseña sea correcta antes de ejecutar UnProtect, es mejor ejecutar UnProtect y si la contraseña es incorrecta (salta un error) entonces ahí sí decir que la contraseña es incorrecta.

Además, no sabía que se podría hacer eso de
For Each x In ThisComponent.Sheets()
Donde lo aprendiste?

Otra cosa, yo a "oHojaActiva" lo llamaría "oDoc", porque hace referencia a el documento en su conjunto y a "x" lo llamaría "oSheets" porque hace referencia a las hojas en el archivo, eso lo haría más fácil y claro de leer para un tercero (y para ti mismo).

Para aprender OOBasic, te recomiendo encarecidamente el libro de Mauricio, es muy muy bueno para empezar desde cero (lo cual fue mi caso) y si ya tienes experiencia programando, igualmente es muy útil.

https://forum.openoffice.org/es/forum/v ... =50&t=1545

Cualquier duda o problema que tengas, también si necesitas orientación, no dudes en preguntar.

Saludos.
LibreOffice 7.2.6.2 | Windows 7 Ultimate
fer17rugbier
Mensajes: 4
Registrado: Mié Ago 11, 2021 7:09 am

Re: [RESUELTO]Bloquear hoja d calc con contraseña mediante m

Mensaje por fer17rugbier »

Muchas gracias por la ayuda Neftali, funcionó a la perfección.

Utilizaré tus consejos para seguir programando. Lo de For Each lo encontre en internet, no me acuerdo exactamente donde, fue mi desesperación por solucionar el problema.
Estoy con el libro de Mauricio aprendiendo. Me ha servido de gran ayuda y sigo apoyandome en él.

Saludos
LibreOffice 6.2 en Windows 10
Responder