プロが教えるわが家の防犯対策術!

http://okwave.jp/qa/q4890392.html

MsgBox関数は半角で最大1024文字しか扱うことができないようです。

これ以上の文字数を扱いたいのですが
恐らくWindows APIを使えばできるのではないかと考えました。

APIを使った方法は
http://www.ne.jp/asahi/hishidama/home/tech/excel …
http://soudan1.biglobe.ne.jp/qa6488258.html

この辺りに書かれてあります。

それで

Declare Function MessageBoxPtr Lib "user32.dll" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal text As Long, ByVal caption As Long, ByVal nType As Integer) As Integer

Sub aaa()
Dim text() As Byte
Dim caption() As Byte
Dim ret As Integer

caption() = StrConv("dd7優勝a", vbFromUnicode)
text() = StrConv("b日本aaa", vbFromUnicode)
ret = MessageBoxPtr(0, VarPtr(text(0)), VarPtr(caption(0)), vbOKOnly)

End Sub


を実行してみたのですが
なぜか全角文字と半角文字を両方含んでいると
文字化けしてしまいます。
しかもなぜか実行するたびにその文字化けが変化していきます。

例えば以下のようです。

b日本aaawPAセ
b日本aaaユ君・
優勝{aaaユ君・
b日本aaa蛹N・


VarPtrがメモリのアドレスを取得する関数なそうなのですが
これがリセットされていないことが原因なのでしょうか?

一体どうすれば正常に取得できるか教えていただけないでしょうか?


ちなみに環境はWin8 Excel2010です。

よろしくお願いいたします。

A 回答 (2件)

こんにちは。



MessageBoxPrt が、半角・全角混在で、できないなら、元のMessageBox でやってみたらいかがですか?

Private Declare Function MessageBox Lib "User32.dll" Alias "MessageBoxA" ( _
  ByVal hWnd As Long, _
  ByVal lpText As String, _
  ByVal lpCaption As String, _
  ByVal uType As Long) As Integer

と書いて気が付きました。#1様の示されたリンク先と同じですよね。

ただ、Form などでTextBox に、スクロールを付けて使ったほうが便利そうです。
    • good
    • 0

こちらの


https://oshiete.goo.ne.jp/qa/4876776.html
#4さんの回答では?

試してみたところ、
lpText = "テスト" を
lpText = "始め" & String(1200, "@") & "最後"
では『始め』の後で改行?が入りました
"@" を "@" と全角にすると消える?
残念ながら、当方これ以上わかりません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A