おしゃれにいけてる?

散歩やお買い物のことなどを書いています・・・

Entries

 EXCEL VBA TIPs. (他のワークブック上のマクロ・関数を実行する。)

 全体で一元的に管理したいデータを一つのワークブックに入れて、サーバーに置いて、その値を別のワークブックのマクロ上で使いたいと思った。

共通データをメンテするとき、サーバー上のワークブックを変更すればそれだけで済むから。

その際、サーバー上のデータを別のワークブックのマクロで直接参照してしまうと、データー構造が変わったときに、全てのワークブックのマクロを変えないといけなくなる。

それだとまずいので、サーバー上のデータを書いたワークブックに、データを抽出する関数を書いておく事にした。他のワークブックのマクロでは、その関数を呼びだして値を取得する。

 ワークシート DB.xls の関数 getValue を指定する記述は、

   "DB.xls" & "!" & "getValue"

実際の呼び出しは、Application.Run を使う。記述はこんな感じ。

   f_getValue = "DB.xls" & "!" & "getValue"
   Application.Run(f_getValue, 10)

Run の最後の引数は、関数 getValue の引数。なければ省略、もっとあれば、[カンマ+引数] の形で付け加える。

使用例を、メモメモ。

◎サーバー上のワークブックの関数
'ワークシート DB の範囲 Area の row 行目の値を返す。
Public Function getValue( row As Integer)
  getValue = ThisWorkbook.Worksheets("DB"). _
          Range(Area).Cells(row, 1).Value
 If IsError(getValue) Then getValue = Empty
End Function

◎別のワークブックのマクロで、上の関数を呼びだして値を取得する。
Public Sub test()
 Dim ans As String
 Workbooks.Open ("C:\EXCEL\DB.xls")
 f_getValue = "DB.xls" & "!" & "getValue"
 ans = Application.Run(f_getValue, 10)
 If IsEmpty(ans) Then MsgBox ("No Value!")
End Sub

関数名を一度 f_getValue に代入したのは、見やすくするため。直接、Application.Run() の中に書いても、もちろん OK。

 これを読んで、

   「 Access とかのデータベースソフト使えばいいジャン!」

って言うかもしれないけど、そうすると、他のソフトの使い方もマスターしなくてはいけない。最大のネックは、

   「他の人に引き継ぐのが大変になる。」

そんな感じ。

スポンサードリンク

Comment

Comment_form

管理者のみ表示。

左サイドメニュー

プロフィール

Author:ジョニー

ゆるゆると日々を過ごしてしまう、ダメダメ野郎の航海日記。



クリック (・。・)yoro

このブログ内を検索

最近の記事

カテゴリー

最近のコメント

QRコード

QRコード

月別アーカイブ

右サイドメニュー

カレンダー

02 | 2020/03 | 04
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

スポンサードリンク

FC2カウンター

#1228