いつもどこかでデスマーチ♪

不定期に、私の日常を書き込みしていきます。

Excel の VBA ではまった…

2013年01月18日 10時56分59秒 | メモ
まぁ、自分が悪いんだけどサー

今回Excel VBAの Function についてです。


Excel VBAでAccess(mdb)を使用したプログラムを書くことがあると思うんですよ。
で、下記コードを書きました。(一部のみ)
Private adoCn As ADODB.Connection
Private adoRs As ADODB.Recordset

'DBA接続用プロバイダーを取得する
Public Function getProvider()
    getProvider = "Microsoft.Jet.OLEDB.4.0"
End Function

'DBA接続用ファイルパスを取得する
Public Function getDBAFilePath()
    getDBAFilePath = ThisWorkbook.Path & "\データ.mdb"
End Function

'DBへ接続する
Private Sub getConnection()
    If adoCn Is Nothing Then
        Set adoCn = New ADODB.Connection 'データ ソースへの接続
        adoCn.Provider = getProvider() 'Accessへ接続プロバイダ名
        adoCn.Open getDBAFilePath() '接続するmdbファイル名
    End If
End Sub


コレで問題なく動くんですよ。正しく…きちんと…

でも、たまーーーーーーーーーーーーーーーにエラーを出します。
「""を開くことができません。アプリケーションで認識できないデータベースであるか、またはファイルが破損しています。」
と…

問題なのは「""」の部分。普通は「"データ.mdb"を開くことが…」とエラーがでます。
でも「""を開くことが…」と出ます。

なんだこれっ!?と2・3テストしながら悩んだ結果、解りましたっ!
判る人はもう判ると思います。

下記2つのFunctionです。
・Public Function getProvider()
・Public Function getDBAFilePath()

そう。Functionなのに、戻り値の型が記述されていません。

なにそれ…確かに書いてない俺が悪いんだけどさー
何でまともに動いてて、いきなり戻り値が空になるのさー


って訳で、2つのメソッドの戻り値の型をきちんと指定すれば出なくなりました。
'DBA接続用プロバイダーを取得する
Public Function getProvider() As String
    getProvider = "Microsoft.Jet.OLEDB.4.0"
End Function

'DBA接続用ファイルパスを取得する
Public Function getDBAFilePath() As String
    getDBAFilePath = ThisWorkbook.Path & "\データ.mdb"
End Function


はぁ…ビルドエラーにしてくれ…又は、常に空を返すようにしてくれ…


まぁ、ルールに乗っ取ってない自分が悪いんだけどサー
文法エラーぐらい全部出せよ…不親切すぎるよな…
(知らないだけかな?)


VBAがまた嫌いになる今日この頃でした…


検索用:Excel vba 戻り値 空になる 戻り値が取れない 戻り値が違う
たまに エラーが出る エラーが発生する タイミング 不明

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Extjs4.1 から FormのSubmit... | トップ | Visual Studio 2008 で問題発... »

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

メモ」カテゴリの最新記事