適用先: Access 2013 | Access 2016
テキストのメモリ ストレージ形式は、Visual Basic for Applications (VBA) コードと Access Basic コードによって異なります。 (Access Basic は、以前のバージョンの Microsoft Access で使用されていました)。テキストは、Access Basic コード内の ANSI 形式と Visual Basic の Unicode 形式で格納されます。 このトピックでは、現在のバージョンの Microsoft Access で文字列を処理するときの潜在的な問題の 1 つについて説明します。 詳細については、「 文字列関数操作の相違点」を参照してください。
いくつかの Windows API 関数では、文字列のバイト長が重要な意味を持ちます。 たとえば、次のプログラムは、Windows がセットアップされているフォルダーを返します。 Microsoft Access では、 LeftB (Buffer, ret) は正しい文字列を返しません。 これは、ret の値が、ANSI 文字列のバイト長を示しているにもかかわらず、LeftB 関数が Unicode の文字列を操作しているためです。 このような場合は、InStr 関数を使って、文字列の中の Null 終端文字列までの文字を返すように修正します。
Private Declare Function GetWindowsDirectory Lib "kernel32" _
Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, _
ByVal nSize As Long) As Long
Private Sub Command1_Click()
Buffer$ = Space(255)
ret = GetWindowsDirectory(Buffer$, 255)
' WinDir = LeftB(Buffer, ret) '<--- Incorrect code"
WinDir = Left(Buffer$, InStr(Buffer$, Chr(0)) - 1)
'<--Correct code"
Print WinDir
End Sub
関連項目
- 開発者フォーラムにアクセスする
- support.office.com のヘルプにアクセスする
- answers.microsoft.com のヘルプにアクセスする
- UtterAccess のフォーラムにアクセスする
- 開発者と VBA のプログラミング ヘルプ センター (FMS) にアクセスする
- StackOverflow のアクセス ポスト
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。