Du schreibst nicht, ob du einen Druckbereich im Calc oder Writer haben willst. Aber nachdem du eine Seite ausdrucken willst, gehe ich eher vom Writer aus. Ich nehme auch an, wenn du 11 eingibst möchtest du die Seite 11 und nicht die Seite 22.
Dein Wunsch ist zumindestens für Writer relativ einfach mit Hilfe des Makrorekorders zu verwirklichen. Für die Eingabe der Seitenzahl brauchst du lediglich eine InputBox-Abfrage. Die Antwort ordnest du dem entsprechenden Argument zu.
sub Drucken()
Dim Nr as string
Nr = InputBox("Geben Sie die Druckseite ein")
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Copies"
args1(0).Value = 1
args1(1).Name = "RangeText"
args1(1).Value = Nr
args1(2).Name = "Collate"
args1(2).Value = true
dispatcher.executeDispatch(document, ".uno:Print", "", 0, args1())
end sub
Auch für Calc gibt es Druckbereiche. Das Problem ist, eine Zeile hat 256 Spalten. Das heißt, wenn du nur eine Zeile angibst, würdest du eine Menge Papier drucken. Du musst auch Spalten angeben.
Ich habe mir mal vor einiger Zeit einen Codeschnipsel gemacht. Ich weiß nicht ob er noch funktioniert. Ich hatte manchmal Problem mit dem Druckbefehl, wenn das Makro schneller zu Ende war als der Ausdruck. Das sollte mit dem Befehl "wait" eigentlich nicht passieren. Aber dem war nicht so. Ich schreib dir mal den Code auf zum experimentieren:
Sub BereichDrucken
dim Bereich
Dim Args1(0)
Dim Args2(1) as new com.sun.star.beans.PropertyValue
Dim Probs
Dim sDrucker as string
rem ----------------------------------------------------------------------
oDoc = ThisComponent
oTab = oDoc.sheets(0)
Probs = oDoc.getPrinter()
sDrucker = Probs(0).value
rem ----------------------------------------------------------------------
'Festlegen Bereich
Bereich = oTab.getCellRangeByPosition(0,4,1,9)
'Druckbereich setzen
args1(0) = Bereich.RangeAddress
oTab.setprintAreas(args1())
args2(0).name = "Name"
args2(0).value = "<" & sDrucker & ">"
args2(1).name = "Wait"
args2(1).value = true
oDoc.print(args2())
'Druckbereich wieder löschen
redim args1()
oTab.setprintAreas(args1())
end Sub