Access2003とAccess2007のGetFile().Typeの違い

プログラム中で、

objFile.GetFile(strFile).Type

で、エクセルファイルかどうかを調べておくことがあります(気休めですが)。

これが返す値が、2007では変更されています。
2003以前のファイルか、2007以降のファイルかを区別して返してくるので注意。
エクセルなら何でも良いなら、

InStr(objFile.GetFile(strFile).Type, "Excel")

でいけます。

Access2000とAccess2003のVBAの非互換性

Access2000からAccess2003へのアップデートをしたときに、プログラムの互換性の部分で引っかかったので、その備忘録です。何年も前ではありません。ごく最近の話です。

xsWks.Range(xsWks.Cells(r1, c1), xsWks.Cells(r2, c2)).value = varCellBuf

この部分で、エラーになるようになりました。varCellBufはvariantの二次元配列ですが、ここに一定以上の長さの文字列が入るとだめ。Access2000ではOKですが、Access2003ではだめ。

実行時エラー ‘1004’
アプリケーション定義またはオブジェクト定義のエラーです。

http://support.microsoft.com/kb/818808/jaあたりに関係しそうな記載がありますが、そのものずばりの記載はまだ見つけていません。

セルの表示は1024字までという制約があったので、これまで1セル当たりの文字数を1000字にしてきましたが、これを900字までの制限にしたらOKでした。やはり912文字なのか。

なお、Access2007に持っていくと、1000字のままでもエラーにはなりません。しかし別のエラーが出ましたので、それは別アーティクルで。

Round関数

  • Access2000以降のRound関数は四捨五入ではなく銀行型丸め関数である。
  • それ以前のAccessにはRound関数はない。
  • ExcelのRound関数は四捨五入である
Function myRound(x As Double, k As Long) As Double
    Dim work As Double
    If x >= 0 Then
        work = x * 10 ^ k + 0.5
    Else
        work = x * 10 ^ k - 0.5
    End If
    myRound = Int(work) / 10 ^ k
End Function