LoginSignup
4
4

More than 5 years have passed since last update.

vbaの基礎

Last updated at Posted at 2015-01-29

メモる

プロシージャ単位で実行できるので適切なプロシージャに分割する。

sheet1.vba

Private sub main()
  Call f1
  Call f2
End Sub

Private sub f1()
  ...
End Sub

Private sub f2()
  ...
End Sub

f1, f2 が独立して実行できる上に、main()に統合できる。

モジュール(翻訳単位)で有効なオブジェクトは初期化する。


Private x as New Collection

Private sub main()
  Call init()
  Call f1()
  Call f2()
End Sub

Privete Sub init()
  Set x = Nothing
End Sub

Private sub f1()
  Dim data
  x.add data
End Sub

Private Sub f2()
  x.Count
End Sub

この場合、オブジェクト'x'はプロシージャ呼び出しをまたがって生存するので毎回、初期値の設定をしないと、オブジェクト'x'に追加(Append)される。

標準モジュールには読み取り専用でプロジェクトに局所化されるもの以外置かいない。

Module1.vba
  Option Private Module
  Public Const MIN=0, MAX=255

大域的な通用範囲は汚さず、変更せず。

クラスモジュールにする場合、共有部分は標準モジュールに置く。

Module1.vba
  Option Private Module
  Public Const READ_ONLY = 1, CREATE_NEW = 2, APPEND = 8
class1.vba
Private m_mode As Integer

Property Let mode(set_mode As Integer)

On Error GoTo ERR_MSG

  If set_mode <> READ_ONLY And _
     set_mode <> CREATE_NEW And _
     set_mode <> APPEND Then

  Err.Clear
  Err.Raise Number:=-1, Description:="invalid mode"

  Exit Property

  Else
    m_mode = set_mode
    Exit Property
  End If

ERR_MSG:
  MsgBox Err.Number & vbCrLf & Err.Description
  Exit Property

End Property


無闇にクラス(モジュール)化やエラー・ハンドリングに頼らない。

論理エラーはコワイ。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4