Office 2000 VBA 新規文字列操作関数 について

Access 2000 の ReadMe.txt にあたる Acread9.txt を読んでいたら,以下の文がありました。 (一部文を修正)

vbDatabaseCompare のため動作しない関数
--------------------------------------
InStrRev、Split、Filter、Replace の関数は、
vbDatabaseCompare を使用した結果発生するエラーのため動作しないことがあります。
この問題を解決するには、vbBinaryCompare や vbTextCompare のような比較引数を明示的に指定します。

Access では,VB6,Excel,Word にはない文字列比較の仕方(Option Compare Database)を規定では採用するようになっています。 (各モジュールの先頭で自動的に宣言)

InStrRev(string1, string2, start, 比較方法)

start と 比較方法 は,省略可能なので,省略していました。 そのために,引数には vbCompareDatabase が渡されるらしいです。

(以下の定義だと vbBinaryCompare が規定値になっていますが ... うーん)

製造時期によって,この定数を認識しないでエラーになる場合があるようです。
これは,InStrRev 関数 は,もともと VB6 で採用されたもので,引数に vbDataBaseCompare は,想定していなかったためでしょうか? 
つまり,うっかり忘れていた? のでしょうか?? ...

ということで,原因はともかく,

InStrRev(string1, string2, start, vbBinaryCompare)

InStrRev(string1, string2, start, vbTextCompare)

と,明示的に引数に指定しておいたほうが,誰が使うかわからないときは安全ということになります。

ということで,「つくれます Access2000版」 でも修正します。

 

vbBinaryCompareは,文字を比較するときに,大文字と小文字,半角と全角,ひらがな と カタカナ を区別します

vbTextCompare は,文字を比較するときに,大文字と小文字,半角と全角,ひらがな と カタカナ を区別しません

vbDatabaseCompare は,各国情報の比較の仕方に基づきます。

 

なお,普通は,以下のように,VBA.Strings クラス内等で定義されいるので,省略した時でも,vbBinaryCompare になり,エラーは発生しないはずなのですが ... 

( 各引数は,省略時の規定値を設定できます。 変数 As データ型 = 規定値 )

 

Public Enum VbCompareMethod    
'列挙型は,データ型として扱われます。
    vbBinaryCompare = 0
    vbTextCompare = 1
    vbDatabaseCompare = 2
End Enum

Function InStrRev(StringCheck As String, _
                  StringMatch As String, _
                  [Start As Long = -1], _
                  [Compare As VbCompareMethod = vbBinaryCompare]) As Long

 

 

つくれますの部屋

Copyright(C) 2000 Yasuharu Takahashi, All Rights Reserved.