Sheetsの実装はこうなっております。 ---------------------------------------------------------------------------------------------------- Public Sub Sheets(strSheetName As String) xlsWorkSheet = xlsApplication.Sheets(strSheetName) If SheetVisible Then xlsWorkSheet.Select() End Sub ----------------------------------------------------------------------------------------------------
>>Friend xlsApplication As Excel.Application = Nothing > これらの COM オブジェクトを非 Private として公開されていますが、 > Friend で公開するにしても、ReadOnly な Property にしておくべきかと。 > > ただし ReadOnly だとしても、ExcelEx 外から Open や Close 等、あるいは Cells 等への > アクセスは無制限に可能となってしまいますので、COM オブジェクトを直接公開すると、 > ExcelEx だけでは、参照と解放の管理をまかないきれなくなることがあります。
明記はしませんでしたが、IDisposableも実装しています。(実装パターンそのまま) ---------------------------------------------------------------------------------------------------- Private disposedValue As Boolean Protected Overridable Sub Dispose(disposing As Boolean) If Not disposedValue Then If disposing Then ' TODO: マネージド状態を破棄します (マネージド オブジェクト) WorkBook_Close() End If
' TODO: アンマネージド リソース (アンマネージド オブジェクト) を解放し、ファイナライザーをオーバーライドします ' TODO: 大きなフィールドを null に設定します disposedValue = True End If End Sub
(以下、Excel側VBAコード) ---------------------------------------------------------------------------------------------------- Private Sub Workbook_Open() Dim row As Integer Dim work As String Dim No As String Dim FolderName As String Dim i As Integer
On Error Resume Next
If ActiveWorkbook.Name = "御見積書_原紙_1.xlsm" Or ActiveWorkbook.Name = "御見積書_原紙_2.xlsm" Then Check = True If Sheets("【設計用】見積書").Range("H1").Value <> "No." Then Sheets("【原紙】【設計用】材料一覧表").Select Cells.Select Selection.Copy Sheets("【設計用】材料一覧表").Select Range("A1").Select ActiveSheet.Paste Sheets("【原紙】【設計用】見積書").Select Cells.Select Selection.Copy Sheets("【設計用】見積書").Select Range("A1").Select ActiveSheet.Paste End If
NewNo Check = False End If
UserForm1.Show (False)
Range("A5").Select End Sub ----------------------------------------------------------------------------------------------------