1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Access以外からNz関数を使う場合の罠

Posted at

概要

Access以外でAccessを参照設定してNz関数を使うと不可視のAccessインスタンスができる、場合によっては正しく終了せずに見えないまま残る。

Nz関数とは

公式のリファレンスでは普通の使い方の話だけ。
ここには書かれていないがNz関数はAccessの中に含まれる関数なので実行にはAccessのインスタンスが必要らしい。

?Nz(Null, "ぬるぽ") 'ぬるぽと表示される

その関係でAccessを参照設定したExcelからイミディエイトで上記を実行してすぐに、cmd.exeでtasklistを行うとACCESS.EXEが起動している。
実行してしばらくすると消えているので基本的には実行後に終了するようになっているはずなのだが、何かのミスでAccessのインスタンスが残ることがある。

対処法

この見えないAccessがあるときにaccdbファイルなどAccessのファイルを開くとその見えないインスタンスで開かれてしまって正常に開かれているにも関わらず見えないという状態が発生する。
こうなってしまった場合はcmdから「taskkill /f /im access.exe」で強制終了させるというのが一つ。

GetObject(, "Access.Application").Visible = True

またはイミディエイトでGetObjectを使ってAccessを捕まえて見えるようにすることでも対応できる。

代替手段

Public Function Nz(ByVal Value_ As Variant, Optional IfNull_ As Variant) As Variant
    If IsNull(Value_) Then
        Nz = IfNull_
    Else
        Nz = Value_
    End If   
End Function

Access.Nzが呼び出されないように自作の関数で上書きしてしまう。
かなり雑な作りだがだいたいこれでなんとかなる。

余談

逆もまた然りで、AccessからExcelを参照設定してWorksheetFunctionのメソッドを使った場合も同じように不可視のExcelインスタンスが立ち上がるかもしれない(未調査)。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?