2014年9月28日日曜日

[VBA] Excel のパスワードを設定する。

VBA で Excel の「読み取りパスワード」「書き込みパスワード」を設定する方法です。

パスワードの種類によってプロパティが分かれており、リファレンスからは見つけにくいが、
Workbook の Password プロパティ、もしくは Workbook.SaveAs メソッドのパラメーター を使います。

Dim XlsApp As New Excel.Application
Dim Book As Workbook
Set Book = XlsApp.Workbooks.Open("ファイル名.xlsx")
Book.Password = "password01" ' 読み取りパスワード
Call Book.SaveAs(Filename:="ファイル.xlsx", _
  Password:="password01", _ ' 読み取りパスワード
  WriteResPassword:="password01", _ ' 書き込みパスワード
  ReadOnlyRecommended:=True) ' 読み取り専用を推奨する
Book.Close

パスワードは「最大 15 文字」となる。

Workbook.SaveAs メソッド
http://msdn.microsoft.com/ja-jp/library/microsoft.office.tools.excel.workbook.saveas.aspx

2014年9月3日水曜日

[VBA/VBS] データ型を確認する方法

VBA/VBScript において、変数等のデータ型を確認する方法です。

■ Is 関数を使う

Is 関数を使って、データの状態を確認できますが、これでは(例)数値であるが、Integer か Double といった具体的なデータ型までは分かりません。関数の結果はブール値です。
  • IsArray(配列)
  • IsDate(日付または時刻)
  • IsEmpty(初期化の有無)
  • IsNull(Null 値)
  • IsNumeric(数値)
  • IsObject(オブジェクト)
VBScript の関数
http://msdn.microsoft.com/ja-jp/library/cc392480.aspx

■ TypeName 関数を使う

これが最も具体的なデータ型を確認できます。データ型を表す文字列の名称が得られます。

(例)Debug.Print TypeName("ABC")
(結果)String


TypeName 関数
http://msdn.microsoft.com/ja-jp/library/cc392344.aspx

■ VarType 関数を使う


TypeName と同等ですが、
  • 結果が VbVarType 列挙体 で得られる。
  • Object 型の区別が具体的でない (VbVarType.vbObject という1括りになる)
という違いがあります。データ型によって判定&分岐するならば、これが使いやすいと思います。

(例)Debug.Print VarType("ABC")
(結果)8 (= VbVarType.vbString)


VarType 関数
http://msdn.microsoft.com/ja-jp/library/cc392346.aspx