作成日: 2024/08/01 最終更新日: 2024/10/23
文書種別
不具合
状況
修正済み
詳細
帳票テンプレートに名前定義が設定されている場合、ProcessTemplateメソッドを実行すると、出力後の帳票で名前定義が参照範囲エラー(#REF!)になります。
なお、以下の条件をすべて満たす場合、この問題は発生しません。
1.名前定義の参照範囲が、先頭のシート上のセル範囲のみである
2.先頭のシートにテンプレート構文が設定されている
なお、以下の条件をすべて満たす場合、この問題は発生しません。
1.名前定義の参照範囲が、先頭のシート上のセル範囲のみである
2.先頭のシートにテンプレート構文が設定されている
回避方法
この問題はバージョン7.2.2で修正されました。
※修正版を適用しない場合の回避方法は以下の通りです。
ProcessTemplateメソッドの実行前に名前定義の情報を保持しておき、メソッド実行後に復元してください。
※修正版を適用しない場合の回避方法は以下の通りです。
ProcessTemplateメソッドの実行前に名前定義の情報を保持しておき、メソッド実行後に復元してください。
Dim Names = SaveDefinedNames(workbook)
workbook.ProcessTemplate()
RestoreDefinedNames(workbook, Names)
---------------------------
Private Function SaveDefinedNames(workbook As Workbook) As List(Of (Name As String, RefersTo As String, Comment As String, WorksheetName As String))
Dim Names As New List(Of (Name As String, RefersTo As String, Comment As String, WorksheetName As String))
For i As Integer = 0 To workbook.Names.Count - 1
Dim name As IName = workbook.Names(i)
Names.Add((name.Name, name.RefersTo, name.Comment, Nothing))
Next
For Each worksheet As IWorksheet In workbook.Worksheets
For i As Integer = 0 To worksheet.Names.Count - 1
Dim name As IName = worksheet.Names(i)
Names.Add((name.Name, name.RefersTo, name.Comment, worksheet.Name))
Next
Next
Return Names
End Function
Private Sub RestoreDefinedNames(workbook As Workbook, Names As List(Of (Name As String, RefersTo As String, Comment As String, WorksheetName As String)))
workbook.Names.Clear()
For Each worksheet As IWorksheet In workbook.Worksheets
worksheet.Names.Clear()
Next
For Each NowName In Names
If NowName.WorksheetName Is Nothing Then
Dim name = workbook.Names.Add(NowName.Name, NowName.RefersTo)
name.Comment = NowName.Comment
Else
Dim worksheet = workbook.Worksheets(NowName.WorksheetName)
If worksheet IsNot Nothing Then
Dim name = worksheet.Names.Add(NowName.Name, NowName.RefersTo)
name.Comment = NowName.Comment
End If
End If
Next
End Sub