2

ユーザー入力が必要なコンボ ボックスがいくつかあります。Access 2000 では、ODBC 経由で ERP データベース (FoxPro) にリンクしています。そのため、テーブル構造をまったく変更できません。何らかの理由で、多くのフィールドには先行ゼロがあります。コンボ ボックスで [ リストに制限] を[はい]に設定しています。

コンボ ボックスのサンプル:

ここに画像の説明を入力

ユーザーが先頭のゼロを入力する必要がなかったらいいのにと思います。ただし、ユーザーが 47009 を入力すると、次のエラーが表示されます。

The text you entered isn't an item in the list.

フィールドはテキストで、行ソースは次のようになります。

SELECT recid, recnum FROM receiver ORDER BY recnum; 

そして、最初の列にバインドしています。

ユーザーにリストの内容を強制し、先頭のゼロを入力する必要をなくす方法はありますか?

4

1 に答える 1

3

recnumコンボ ボックスの値集合ソースについては、フィールド文字列値から先頭のゼロを破棄するクエリを使用できます。カスタム VBA 関数で正規表現を使用すると、これらのゼロを簡単に取り除くことができます。StripLeadingZeros()これは、以下に含まれる関数のイミディエイト ウィンドウのデモです。

? StripLeadingZeros("000000AV1-00011")
AV1-00011
? StripLeadingZeros("000000TI1-00035")
TI1-00035

したがって、このようなクエリでその関数を使用できます...

SELECT recid, StripLeadingZeros(recnum) FROM receiver ORDER BY 2; 

そのクエリをコンボ ボックスの行ソースとして使用すると、ユーザーには先行ゼロが表示されません。先頭のゼロを入力する必要はなく、表示する必要がある場合はrecnum、3 番目の列として単独で追加できます。

文字列値に数字のみが含まれている場合、タスクはより簡単になります。関数を使用して、Val()これらの文字列を数値としてキャストできます。を引き続き使用できますがStripLeadingZeros()Val()より高速になるはずです。

SELECT recid, Val(recnum) FROM receiver ORDER BY 2; 
Public Function StripLeadingZeros(ByVal pstrInput As String) As String
    Static re As Object
    If re Is Nothing Then
        Set re = CreateObject("VBScript.RegExp")
        re.pattern = "^0*"
    End If
    StripLeadingZeros = re.Replace(pstrInput, vbNullString)
End Function
于 2013-08-26T19:43:22.343 に答える