Microsoft Access 掲示板

エクセル操作 Rangeと変数 / 4

17 コメント
views
4 フォロー
4
hiroton 2023/07/20 (木) 18:37:00 14585@f966d

うまいこと解説してるサイト見つけてペタッとして終わりたかったんですけど見つけられないですねぇ


このような問題を起こさないためには、「アクティブな」というその瞬間によって変わるような参照を使わないようにする必要があります。そのためには、オブジェクトの親子関係をしっかり把握して、最上位の親から目的の子まで、すべてをつなげる必要があります

Range/Cellsの場合

(Excel)Application   :xls = CreateObject("Excel.application")はこのレベル
 └Workbook
  └Worksheet
   └Range / Cells

つまり、xls.Cellsと記述すると「xls.ActiveWorkBook.ActiveSheet.Cells」と同等の結果になります

「アクティブな」参照をしないためにはWorkbookWorksheetを明示してあげればいいので、例えば

xls.Workbooks(1).Worksheets(1).Cells

のような記述が考えられます
また、毎回このような記述は冗長なので、変数で置き換えたり

Dim WS As object
Set WS = xls.Workbooks(1).Worksheets(1)
WS.Cells(~)
Set WS = Nothing

With ~ End Withステートメントを使ったり

With xls.Workbooks(1).Worksheets(1)
    .Cells(~)
End With

すると良いコードになります

通報 ...