Macro para imprimir intervalo de páginas no Calc

Existe uma forma de criar uma macro para imprimir um intervalo de páginas de uma planilha do Calc tendo como referência o valor constante em uma célula? Exemplo: Se na célula A1 tem o valor 3, então será impresso o intervalo de páginas de 1 a 3.

Baseado nesses links:

https://wiki.openoffice.org/wiki/Printing_a_document

https://wiki.openoffice.org/wiki/Working_with_properties

Function fnNewProperty(sName, optional vValue)
	aProperty = createUnoStruct("com.sun.star.beans.PropertyValue")
	aProperty.Name = sName
	
	If not isMissing(vValue) Then
		aProperty.Value = vValue
	End If
		fnNewProperty = aProperty
End Function


Sub subAddProperty(mProperties, sName, optional vValue)
	nNext = uBound(mProperties) + 1
	redim preserve mProperties(nNext)
	
	If isMissing(vValue) Then
		mProperties(nNext) = fnNewProperty(sName)
	Else
		mProperties(nNext) = fnNewProperty(sName, vValue)
	End If
End Sub


Sub subPrint(oDoc, optional ncopies, optional bCollate, optional sPages, optional sFileName)
	Dim mPrintOptions()
	
	If not isMissing(nCopies) Then
		subAddproperty(mPrintOptions(), "CopyCount", nCopies)
	End If
	
	If not isMissing(bCollate) Then
		subAddproperty(mPrintOptions(), "Collate", bCollate)
	End If
	
	If not isMissing(sPages) Then
		subAddproperty(mPrintOptions(), "Pages", sPages)
	End If
	
	If not isMissing(sFilename) Then
		subAddproperty(mPrintOptions(), "FileName", sFileName)
	End If
	
	oDoc.print(mPrintOptions())
End Sub


Sub CustomPrint
	Dim oDoc, oPlan As Object
	Dim myUltimaPag, myIntervaloPg As String
	
	oDoc = ThisComponent
	oPlan = oDoc.Sheets.getByName("Base")
	'oPlan = oDoc.CurrentController.ActiveSheet

	myUltimaPag = oPlan.getCellRangeByName("A1").getString()
	myIntervaloPg = "1-" & myUltimaPag

	'Imprimir como Arquivo PDF
	'subprint(ThisComponent, 1, ,myIntervaloPg, "PrintExample.pdf")
	
	'Imprimir para impressora Padrão	
	subprint(ThisComponent, 1, ,myIntervaloPg)

	msgbox("Impressão das páginas " & myIntervaloPg & " concluída com sucesso!", 6, "Seu título de Aviso")
End Sub

Pode escolher imprimir na impressora padrão ou imprimir como PDF, como descrito no código!

Um arquivo de exemplo:
print.ods

Veja se ajuda!

Obrigado! Essa solução resolveu o meu problema. Agradeço a atenção.

Ola @Sapiroto, seja bem vindo ao Grupo.

Nomeei a célula A1 para AreaPrint, a página 1 para Area1, a pagina 1 e 2 para Area2 e a pagina 1 a 3 para Area3.

'================================================|
Sub IMPRIMIR
'================================================|
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "AreaPrint"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
Dim oSel as Object
	oSel = ThisComponent.getCurrentSelection()
'	MsgBox oSel.getString()
	Var1 = oSel.getString()
'end Sub
If Var1 = "1" Then
	Call AreaX "Area1"
ElseIf Var1 = "2" Then
	Call AreaX "Area2"
ElseIf Var1 = "3" Then
	Call AreaX "Area3"
Else
	MsgBox "Área desconhecida"
End If
End Sub

'================================================|
sub Areax ( xArea As String )
'================================================|
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = xArea
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
'dispatcher.executeDispatch(document, ".uno:PrintDefault", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Print", "", 0, Array())
end sub	

.

Caso a resposta atendeu sua necessidade, por gentileza, click na bolinha Descrição da imagem a esquerda da resposta, para finalizar a pergunta.

Obrigado! Essa solução funcionou, mas eu teria que ir acrescentando ao código “Area4”, “Area5” e assim por diante conforme a necessidade. Agradeço pela atenção.