• ベストアンサー

Msgboxで表示できる文字数の上限は939文字ですか?

VBAにてSQL文を作成し 「MsgBox SQL」 と実行したところ、 実際作成したSQL文の途中までしか表示されません。 「MsgBox Len(SQL)」 で文字数を取得したところSQL文の文字数は1388文字なのですが 実際MsgBox表示される文字数は939文字でした。 この939文字というのは Debug.Printで改行する地点と同じでした。 やはりこれ以上の文字数はMsgBoxでは表示できないのでしょうか? ちなみに環境はaccess2003、vistaです。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

Access VBAのヘルプを見ると、以下のように記述されています: > 名前付き引数 prompt に指定できる最大文字数は、1 バイト文字で > 約 1,024 文字です。ただし、使う文字の文字幅に依存します。 「名前付き引数 prompt」というのは、MsgBox関数の1番目の引数です。 単純に「最大文字数は約1024文字」ではなく、「1バイト文字で」と 断っているということは、恐らく2バイト文字(漢字・かななど)が 入るとその分、文字数としては減る、ということなのかと思います。 (なお、1バイト文字に限定しても「約」がつくというのは不明です(汗):  何らかの制御文字がカウントされない?) ですので、ご質問の件で、MsgBoxに939文字までしか表示されないと いうのは、全角文字を含んでいるために、940文字目になると、 引数promptに保持できる最大バイト数を超えてしまったため、 と推測されます。 であれば、これはMsgBox関数の仕様ということなので、ご質問のSQL文に ついては、これ以上の文字数は表示できない、ということになります。 (別の事例であれば、2バイト文字の文字数が違ってくる可能性が大きい  ため、これ以上の文字数を表示させられる(或いは逆にもっと文字数が  減ってしまう)場合もあり得ます) 2バイト文字の参考(念のため): http://ja.wikipedia.org/wiki/2%E3%83%90%E3%82%A4%E3%83%88%E8%A8%80%E8%AA%9E

nifufu2
質問者

お礼

1バイトまでしか表示できないのですね!すっきりしました! ありがとうございます。

関連するQ&A

  • MsgBoxで表示する文字列を改行するには

    エクセルのVBAにおいて、 MsgBoxで表示する文字列を意図的に改行することはできるでしょうか。  MsgBox "メッセージを改行しました。" と書けば、  メッセージを改行しました。 と表示されますが、 これを、  メッセージを  改行しました。 と表示させるにはどのように書いたらよいでしょうか。

  • lenは文字数を取得する関数ですよね?

    vbaで Sub test() Dim i As Long Debug.Print Len(i) End Sub とすると、4が返るのですが、なぜなのかまったくわかりません。 iには0が入っているので、一文字だから1が返ると思うのですが・・・

  • 文字数の取得方法(Active Basic 4)

    タイトルのとおりです。 Active Basicを使ってプログラミングをしているのですが、どうしても文字数の取得方法がわかりません。 命令文「Len()」を使えば文字列の「Byte」はわかりますが、文字数が取得できません。 何か良い方法はありますか? (Active Basic 参考プログラム) Dim Str$ As String Str$ = "abc"    '3文字 計3バイト Print Len(Str$)   '「3」が表示されます Str$ = "やほ~"   '3文字 計6バイト Print Len(Str$)   '「6」が表示されます

  • エクセル 2007/5/23の文字数が9文字としてカウントされないのはなぜ?

    エクセルにて 2007/5/23とセルに書いてあります。 そのセルの文字の数をlen関数で数えると9文字と表示されず、 5文字となりますが、なぜですか? また'2007/5/23とすると、ちゃんと9文字になりますが、 VBAで’を追加して、ちゃんと9文字と表示されるように する方法を教えてください。

  • VBAでMsgBox内の文を改行させたい

    お教え下さい WindowsXP、Excel2002 で、VBAを使ってExcelシートを操作しようと プログラムを組んで居る者です 質問とは、メッセージ・ボックスを開き、[ nRtn = MsgBox(Prompt:="先ず、… ) ] 等々と コード表示で 所定の文をこのボックス内に表示させますが、この表示文を 途中で改行をさせる場合、如何なるコードを使ったら良いのか、お教え下さい akqsp 拜

  • 文字列を返すVCで作成したDLL関数をVBで呼ぶと...

    VC++で文字列を返すDLL関数を作成しました。 LPCSTR GetVcString(void) これをVBでStringとして受け取り、MsgBoxで表示すると正常に取得できているようなのですが、Lenで文字数を取得すると変な値が返ってきます。 1. Dim Ret As String 2. Ret=GetVcString() 3. MsgBox(Ret) ← VCで返された文字列は正常に表示されている 4. MsgBox(Str(Len(Ret))) ← 実際の文字数とはかけ離れた数値になる 2行目と3行目の間に、 Ret=Left(Ret,InStr(Ret,vbNullChar)-1) を噛ませれば文字数は正常な値になるのですが、このような処理をしなくても正常に文字数を取得する方法があれば教えてください。

  • フォーム1が開いているのならMsgBoxを表示

    Sub マクロ() If フォーム1が開いているのなら Then MsgBox "フォーム1は開いています" End If End Sub アクセスで上記の事をやりたいのですが、コードを教えていただけますか? Sub test() Dim myForm As Form For Each myForm In Forms Debug.Print myForm.Name Next End Sub で、フォームをループできるのですが、いちいちループさせずに、フォーム1だけをつかんで、 起動している(開いている)ならメッセージボックスを表示させたいです。

  • Word, Excel, PowerPointで2バイト文字検索

    お世話になります。 Word, Excel, PowerPointのデータ(ファイル)にある2バイト文字を検索し、順番にハイライト表示(選択状態)にしていく処理をVBAで作りたいと考えています。 当方はC言語やPHPのプログラミングの経験はあるのですが、VBやVBAは初めてでして中々思うように作成が出来ません。 現在はとりあえず試験的に以下のようなプロシージャを作成し、メッセージボックスで表示するところまでは作成出来ています。 Sub check_2byte_stirngs(text As Object)     moji_len = Len(text)     byte_len = LenB(StrConv(text, vbFromUnicode))     If (moji_len <> byte_len) Then       '2バイト文字発見       For i = 1 To Len(text)         one_char = Mid(text, i, 1)         If LenB(StrConv(one_char, vbFromUnicode)) <> Len(one_char) Then           MsgBox one_char         End If       Next     End If End Sub これに以下のような機能を追加したいと思っています。 ・「次へ」を表示するダイアログを付ける(その場で編集可能にしたいのでMsgBoxは使わない) ・見つかった文字の場所までカーソルを移動させて選択状態にする どちらか一方でもお分りの方がいらっしゃいましたら、ご教示願いますでしょうか。 以上、宜しくお願い致します。

  • MsgBoxへの和暦表示について

     G2に=DATE(C1,G1,1)で日付を取得し和暦表示で「H25年03月」とセルの書式設定で しているのですが、これをMsgBoxに同じように表示させたいのですが、お教え願えま せんでしょうか。 Windows7 Office2010 Dim ret As Integer ret = MsgBox(ActiveSheet.Range("G2").Value & "の勤務割表を編集データを元に作成します。よろしいですか?", _ vbOKCancel + vbQuestion, "作成") Select Case ret Case vbOK 処理のコード文 Case vbOKCancel Exit Sub End Select

  • SQL文を出力する事ってできないですか?

    AccessVBAでクエリのSQL文を出力する事ってできないですか? 例えば、 クエリ1があったとして、 そのSQL文をDebug.Printで書きだしたいのですが 可能でしょうか? ADOXあたりを使えば可能でしょうか? ナビゲーションウインドウで右クリックして デザインビューで開き、SQLビューを見ればSQL文が見れますが たくさんのSQL文を取得して、 それを条件分岐したいのでVBAで書きだしたいのです。 よろしくお願いします。

専門家に質問してみよう