■No35252に返信(魔界の仮面弁士さんの記事) >> Private _xlsApplication As Excel.Application = Nothing >> Friend ReadOnly Property xlsApplication As Excel.Application >> Get >> Return _xlsApplication >> End Get >> End Property > これではあまり意味が無いと思いますよ。結局のところ、 > Friend ReadOnly xlsApplication As Excel.Application > な読み取り専用フィールドと、さほど変わらないように見えます。 > > > COM オブジェクトを直接公開してしまうと、ExcelEx の外部で > ExEx1.xlsApplication.Workbooks.Add() > などと書かれてしまえば、COM オブジェクトの解放漏れに繋がります。 > > IDisposable としてカプセル化するのであれば、Excel の COM オブジェクトは > 外部からは直接操作できないようにして、すべてクラス内に隠蔽します。 > 戻り値と返すのも COM オブジェクトではなく、.NET のマネージオブジェクトにします。
全てをクラス内でやってしまう…と言う考え方で良いのでしょうか… 例えば… ----------------------------------------------------------------- Private _xlsApplication as Excel.Application = Nothing
Private _ExcelVisible As Boolean = True Public Property ExcelVisible As Boolean Set(Value as Boolean) _ExcelVisible = Value If value then _xlsApplication.Visible = True Else _xlsApplication.Visible = False End If End Set Get Return _ExcelVisible End Get End Property ----------------------------------------------------------------- …の様な感じで…
> Dim obj1 = 対象ワークブック.Sheets 'これは Sheets 型 …と言う事は Dim obj1 As Excel.Sheets > Dim obj2 = obj1(strSheetName) 'これは Object 型となることに注意 …と言う事は Dim obj2 As Object …で合ってますかね^^? ここの理解はまだ追い付いていません(>_<)
…と言う事は… ------------------------------------------------------------------------------------- Friend Sub WorkSheet_Select(strSheetName As String) Dim check As Boolean = False For x As Integer = 1 to _xlsSheets.Count If _xlsSheets(x) Is Excel.Worksheet then '← 怒られました^^; If CType(_xlsSheets (x), Excel.Worksheet).Name = strSheetName Then check = True Exit For End If End If Next If Not check Then _xlsWorkSheet = CType(_xlsSheets.Add(), Excel.Worksheet) _xlsWorkSheet.Name = strSheetName Else _xlsWorkSheet = CType(_xlsSheets(strSheetName), Excel.Worksheet) End If If SheetVisible Then _xlsWorkSheet.Select() End Sub -------------------------------------------------------------------------------------
下の方に書いてありました^^; > Dim ws = DirectCast(xlsSheets(n), Excel.Worksheet) これだと『WorkSheet』以外はNothingになるのでしょうか…
(DirectCastは明示的な型変換と書いてありました… http://vb.navi-ch.net/2015/07/18/post-118/ ------------------------------------------------------------------------------------- サンプルソース Dim a As Object = 3.14 Dim b As Integer = DirectCast(a, Integer) MsgBox(b) End Sub End Class 実行結果 メッセージーボックスも表示されません。 -------------------------------------------------------------------------------------