次の方法で共有


Windows API の呼び出し (文字列関数操作の違い)

適用先: 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

関連項目

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。