前提
マクロを書いているWorkbookとは別のWorkbookのシートに対して処理をするコードを書いています。
別のWorkbookのファイル名と、処理するシート名は事前に分かっている状態です。
掲載しているコードが書いてあるモジュールとは別に、「Util」というモジュールが存在しています。
以下の4つの処理は「Util」に書いてあり、メインコードから呼び出しています。
- 自動更新停止(autoUpdateStop)
- 対象ファイルの存在確認(isExistsFile)
- 対象シートの存在確認(isExistsWs)
- 自動更新再開(autoUpdateResume)
発生している問題・エラーメッセージ
メイン処理に入る前に事前処理だけでコードが長くなっているので、プロシージャを分けたいがどこで分ければ良いか悩んでいます。
今回だけでなく、いつもこの問題で悩んでいる気がします。
ご意見よろしくお願い致します。
該当のソースコード
Public Sub main() On Error GoTo ErrHdl Const BOOK_PATH As String = "C:\Data\Office\file\graph\sample.xlsx" '//対象ファイルのフルパス Const SH_NAME As String = "test" '//対象シート名 '//自動更新停止 Util.autoUpdateStop '//対象ファイルの存在確認 If Util.isExistsFile(BOOK_PATH) = False Then MsgBox "対象ファイルが存在しません" '//自動更新再開 Util.autoUpdateResume Exit Sub End If Dim wb As Workbook Set wb = Workbooks.Open(BOOK_PATH) '//同一名称のファイルが既に開かれていたら処理を中止する If wb Is Nothing Then MsgBox "同一名称のファイルが既に開かれています" '//自動更新再開 Util.autoUpdateResume Exit Sub End If '//対象シートの存在確認 If Util.isExistsWs(wb, SH_NAME) = False Then MsgBox "対象シートが存在しません" Exit Sub End If Dim ws As Worksheet Set ws = wb.Worksheets(SH_NAME) Dim dataArea As Range '//対象の表のセル範囲 Set dataArea = ws.UsedRange '//ここからメイン処理
お示しの部分がちょうどWorksheetを取得するところまでなので…そこまでの処理を
BOOK_PATHとSH_NAMEを引数に、
取得したWorksheetを戻り値にする
Functionにしたいのではないですか?
> メイン処理に入る前に事前処理だけでコードが長くなっているので
そこまで長くないと思いますよ。どうしてもまとめたいならその「事前処理」をまるごと分けたら良いんじゃないでしょうか?
YellowGreenさん、meg_さん、コメントありがとうございます。
meg_さんのおっしゃる通り、自分でも「事前処理」をまるごと分ける事を少し考えていました。
「事前処理」を別プロシージャにして、YellowGreenさんのやり方で試してみたいと思います。
お二人共、貴重なご意見ありがとうございました。

回答1件
あなたの回答
tips
プレビュー