SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

Excel VBA (その一) 変数、定数、ダイアログ、マクロ

■グローバル変数の定義

  ・Excel でグローバル変数を使用する場合は、標準モジュールの General で
    public 宣言する必要があります。
    シートやフォームのモジュールで宣言してもエラーにはなりませんが、グロ
    ーバルとして扱えません。
    また、ブックをまたいでのグローバル変数の宣言と言うのもできません。

    【宣言方法】
      public 変数名 as 変数タイプ

■グローバル定数の定義

  ・グローバル変数に同じです。

    【宣言方法】
      public const 定数名 = 定数

■モードレスダイアログ

  ・Excel で表示可能なダイアログは、モーダルだけです。
    従って、他のコードを実行しながら、ダイアログを表示したままにはできま
    せん。ダイアログを表示したら、そのダイアログを終了するまで他の一切の
    処理は選択不能となります。

  ・モードレスダイアログに近い処理を行うには、シート上にボタンを配置する
    デザインしかないようです。

■マクロと関数

  ・Excel のシートからみたマクロとなるのは、標準モジュールに定義されたパ
    ラメタなし、戻り値なしのパブリック関数だけです。
    従って、マクロと呼ばれるものにパラメタを渡すことはできません。
    また、標準モジュールの private 宣言以外の関数は、そのブックのどこか
    らも呼び出すことができます。

    【宣言方法】
      public sub マクロ名()
        ...
      end sub

■他ブックマクロ呼び出し

  ・通常、他ブックの関数は呼べないが、マクロとしてなら可能である。
    残念ながら、パラメタを渡すことはできない。
    【補足】
    WindowsXP + Excel2003 では、パラメタを渡せるとの情報があります。
    「Application.Run "book1.xls!test", para1, para2, para3」
    私の調査不足かも...

    【呼び出し方法】
      Application.Run "book1.xls!test"

     ** 実行したマクロから返ってくるのを待つようなので注意。
        この命令を実行したシートが閉じられると、呼び出しているマクロも強
        制キャンセルされる。
        例えば、上の例の book1.xls!test の中で、呼び出しもとのシートを閉
        じる命令を発行すると、続く処理が打ちきられる。

     ** 上記の問題を回避するには、マクロにショートカットキー割り当てを行
        い、sendkeys "^A" の様にマクロをキックする。

■自動実行マクロ

  ・標準モジュールに sub auto_open() を記述すると、シートオープン時に自
    動実行される。オートオープンは止めるのが難しいので、次のような対処を
    すると良い。(自動起動マクロ)

  ・シートと同じフォルダに debug.txt があり、その内容が yes のときだけ、
    マクロを中止する。

Sub auto_open()

  Dim ph As String
  Dim fno As Integer
  Dim rec As String

'** 開発モードチェック
  ph = ThisWorkbook.path & "\"
  fno = freefile
  on error resume next
  open ph & "debug.txt" for input as fno
  if err = 0 then
    if eof(fno) = false then
      line input #fno, rec
      rec = lcase(trim(rec))
    end if
  end if
  close fno
  on error goto 0
  if rec = "yes" then
    msgbox "開発モードにつき、マクロ中止"
    exit sub
  end if

'** マクロキック
  SendKeys "^A"

End Sub

  ・終了時自動実行マクロは、次の関数で記述する。

Sub auto_close()

'** 終了時自動処理

End Sub

■Excel 保存、終了

  ・Excel の保存は、次のとおり。

  exl.ActiveWorkbook.Save

  ・Excel の保存終了は、次のとおり。

  exl.ActiveWorkbook.Save
  exl.Application.Quit

  ・Excel の非保存終了は、次のとおり。(Excel 終了)

  exl.Application.DisplayAlerts = False
  exl.Application.Quit

 尚、ブッククローズや Excel クローズの指示マクロが閉じられるオブェクト
 で実行されている場合、その次のステップは当然、閉じられて実行されません。

■シートセル参照方法

  ・汎用的には cells を使用すると便利である。
    Excel シート上のセルにアクセスするには、次のようにする。

  Workbooks("book1.xls").Worksheets("sheet1").Cells(y, x) = "test"
  a = Workbooks("book1.xls").Worksheets("sheet1").Cells(y, x)

  ・cells() と cells().value は同じ意味になります。
  ・cells().プロパティ でセルの任意プロパティを変更することも可能です。
  ・(y, x) の原点は (1, 1) から始まります。0 はないので注意。
  ・cells で指定する (y, x) は数学の座標系に基づいています。
      x は横方向、つまり、列方向です。
      y は縦方向、つまり、行方向です。

  .Cells(y, x)
         |  |_ 列 (カラム、col)
         |_ 行 (ロウ、row)

  .Cells(行, 列)

  ・現在のセル選択位置を取得するには、Column と Row を使用する。

  ThisWorkbook.Activate
  Sheets("Sheet1").Select
  MsgBox Selection.Row
  MsgBox Selection.Column

■VB6 からの Excel シートセル参照方法

  ・VB6 から、Excel シート上のセルにアクセスするには、次のようにする。

  dim es as variant

  Set es = GetObject("g:\tmp\book1.xls")
  es.Application.Visible = True
  es.Parent.Windows(1).Visible = True
  es.Worksheets("sheet1").cells(5, 5) = "sak"
  Text1 = es.Worksheets("sheet1").cells(1, 1)

 ・cells() は、Excel の VBA で使うのと一緒です。
   次は、セルの値を 2 倍にする関数です。
   Excel VBA のマクロとしても使えます。

public sub Nibai(st as wooksheet, y as integer, x as integer)

  st.cells(y, x) = st.cells(y, x) * 2

end sub

■VB 環境編資料
■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料
■VB テクニック編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2024 Y.SAK