イルカ続き

イルカいじりの本家artonさんにアニメーションで指定した動作を行う前にAgent::sayの呼び出しに入ってしまうと指摘を頂いたので、「アニメーションが起動してから素数を数え出す」動きに見えるようビジーウェイトをかける代わりにできるだけ算出する素数の数を増やしてみた。
するとイルカがアニメーションを起動したままBalloonを出さずマクロが終了してしまった。
算出した素数の数が多すぎてBalloonが表示できるTextの限界を超えたのか……。ならば限界に挑戦だ。


Public Sub TestBalloonTextLimit()
Dim strMsg As String
Dim iRet As Integer

For n = 1 To 65535
strMsg = strMsg + "x"
With Assistant.NewBalloon
.Text = strMsg
iRet = .Show
End With

SendKeys " "

If iRet = 0 Then
Cells(1, 1).Value = n & "文字は無理です..."
Exit Sub
End If
Next n
End Sub

これを実行するとセル(1,1)に「211文字は無理です...」という遺言が残る。
「210文字か、意外に小さいな」と思い、次は文字列を全角「あ」の繰り返しにしてみると、これが一向に終わらない。
いろんな文字で試してみて、どうやら、Balloonが「画面に表示できるだけ」表示しようとするのだということが見えた。

  • 半角「x」の羅列だと文字列全部が1単語と見なされ、ワードラップがかかり改行できないので画面の横幅いっぱい1行分で終了
  • 全角「あ」なら適当なところで改行され、なかなか終わらない
  • 全角でも、禁則文字である「。」だと、改行できなくて画面の横幅いっぱい1行分で終了
結論
Balloonオブジェクトは「1画面で表示できるメッセージのみを表示する」という仕様。

なんか舌足らずだがこうとしか言いようがない。それにしても無駄知識の極みである。