PDF出力時の名前をシートのセルから引用したい。

シートをPDF出力する際の名前を、そのシートのとあるセルから持っていきたいのですが、どうするべきなのでしょうか?

私が調べた限りでは「PDFとして出力する&名前をセルから引用する」というマクロを作るのがいいのか?と思ったのですが…
ちなみに引用したいセルは2つあります。

例)「Sheet1.A3 - Sheet1.G3」

      Sheet1.A3はタイトル名、Sheet1.G3はTODAY関数の書式を全般にしたモノです。

私自身はマクロを使わない人なのでマクロのコーディングについてはよくわからないままでの回答なのですが、ご提示のアプローチは自然な考え方のひとつに思えます。その方法で何か問題がありそうなのでしょうか?

ニーズにも依るでしょうが、自分ならマクロに手を出すのが面倒なので(そして出来ればマクロはなるべく使いたくないので)、「Sheet1.A3 - Sheet1.G3」が表示される数式を記述したセルを設けてPDF出力時にその値をコピー&ペーストすることで済ませると思いますが。

ご回答ありがとうございます。
私もマクロ初心者なので使わずに済めばいいのですが、使ったほうがはるかに楽なのです…
「PDF出力する」、「その名前を2つのシートのセルから引用する」というマクロをご教授いただければ、と思っておりました。
LibreOfficeで作ったシートをOffice Exelで運用したいので1から勉強したほうが今後のためですかね…

ちなみに見積書を作る予定です。

開いている Calc からマクロでPDFを作るなら、LibreOffice 公式ガイドにPDFファイルを出力するサンプルコードがあります。

Basic マクロ

https://wiki.documentfoundation.org/Macros/General/006

Python マクロ

https://wiki.documentfoundation.org/Macros/Python_Guide/Documents#Export_to_PDF

日本語サイト

https://wiki.documentfoundation.org/Macros/Python_Guide/Documents/ja#PDF.E3.81.AB.E3.82.A8.E3.82.AF.E3.82.B9.E3.83.9D.E3.83.BC.E3.83.88

とりあえずエクスポートするコードまで。セルの値を持ってくるコードは後で回答に追記します。

REM BASIC系の文法に自信がないわけでないなら、
REM https://api.libreoffice.org/docs/idl/ref/index.html
REM あたりを見てたほうが勉強になる…と思ったが、PDFFilterは直接は載ってないんだな
Option Explicit
Sub Main()
    REM Use Extended typeが有効じゃないとエラーになる。そのときは変数の型はObjectで。
    Dim filter As com.sun.star.document.XFilter
    Dim properties(0) As com.sun.star.beans.PropertyValue
    filter = createUnoService("com.sun.star.document.PDFFilter")
    REM ファイル内にマクロを格納する前提のコード
    filter.setSourceDocument(ThisComponent)
    properties(0).Name = "OutputStream"
    REM Cドライブ直下ってエラーになるのね…
    properties(0).Value = createUnoService("com.sun.star.ucb.SimpleFileAccess").openFileWrite("C:\test\himajin100000test.pdf")
    REM 指定しなかった値は初期値
    REM https://opengrok.libreoffice.org/xref/core/filter/source/pdf/pdffilter.cxx?r=042033f1#77
    filter.filter(properties)
End Sub

ある程度厳格なものを目指したので最短ではない。

REM  *****  BASIC  *****
Option Explicit

Sub Main()
    REM ThisComponentはXModelだということが確定しているだけなので念の為。Use Extended typesを有効にしていない場合無意味なコード。
    Dim doc As com.sun.star.sheet.XSpreadsheetDocument
    doc = ThisComponent
    
    REM Generics? ねぇよ、んなもん。
    REM 多分com.sun.star.sheet.Spreadsheetサービスだと思われる(ドキュメントから直接は解らないのがツライ)
    REM com.sun.star.sheet.Spreadsheetはcom.sun.star.table.XCellRangeを実装している。
    Dim cellrange As com.sun.star.table.XCellRange
    cellrange = doc.getSheets().getByIndex(0)
    REM A2セル
    REM ここもやっぱり「多分」でしかいえないが、戻り値はcom.sun.star.table.Cellサービス
    
    Dim xText As com.sun.star.text.XTextRange
    xText = cellrange.getCellByPosition(0,1) 
    REM 他言語の人はcom.sun.star.awt.XMessageBoxFactoryで頑張る
    Msgbox(xText.getString())
End Sub

完全に余談ですが、他言語ともうちょっと共通したコードを書きたいなぁ、という人には、CreateUnoSerivce関数の代わりに

REM  *****  BASIC  *****
Option Explicit
Sub Main()
    Dim defaultcontext As com.sun.star.uno.XComponentContext
    Dim servicemanager As com.sun.star.lang.XMultiServiceFactory
    Dim simplefileaccess As com.sun.star.ucb.XSimpleFileAccess3
    defaultcontext = GetDefaultContext()
    servicemanager = defaultcontext.getServiceManager()
    simplefileaccess = servicemanager.createInstance("com.sun.star.ucb.SimpleFileAccess")
End Sub

というコードをプレゼントすることになります。妥協しましたが。

まだちゃんとは読んでいませんが、「選択したシートだけ」の類はこの辺が関わっていそうです。

https://opengrok.libreoffice.org/xref/core/filter/source/pdf/impdialog.cxx?r=0771ac00#461

選択範囲のみエクスポート、について思った通りの挙動をしていないので後で検証予定。

シートの範囲をPDFファイルとして出力する際のPDFファイル名に2つのセルの値を連結した値をセットするには?
という形でのマクロになります。

・範囲指定してPDF出力

・セルの値をファイル名として保存

という作業を連結してみました。

Sub storeCellRangeToPDF()

oDoc = ThisComponent
oController = oDoc.getCurrentController()
oSheet = oController.getActiveSheet()
oCellRange = oSheet.getCellRangeByName("$A$1:$B$10") '出力するセル範囲

Dim aFilterData(0) as new com.sun.star.beans.PropertyValue
aFilterData(0).Name = "Selection"
aFilterData(0).Value = oCellRange

Dim aMediaDescriptor(1) as new com.sun.star.beans.PropertyValue
aMediaDescriptor(0).Name = "FilterName"
aMediaDescriptor(0).Value = "calc_pdf_Export"
aMediaDescriptor(1).Name = "FilterData"
aMediaDescriptor(1).Value = aFilterData()

Dim PDFName as String
oSheet = ThisComponent.CurrentController.ActiveSheet
PDFName = oSheet.getCellRangeByName("J1").string       '出力するPDFファイル名をJ1セルとH3セルから取得
PDFName = PDFName & oSheet.getCellRangeByName("H3").string & ".PDF"    '拡張子が必要な場合は付与します

'"file:///以下にファイルパスとファイル名を記述します
'EドライブのDATAフォルダに保存する例
Dim Filepath as String
Filepath = "file:///E:/DATA/" &  PDFName
oDoc.storeToURL(Filepath , aMediaDescriptor())

End Sub