tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルListBox(VBA)のずれ
記事No13231
投稿日: 2008/11/13(Thu) 22:55
投稿者スプリンガー
いつもお世話になっております。

Windows XP Pro SP3
MS Office XP Excel2002 SP3
で開発しております。

今回教えていただきたいのは、
VBAのUserFormのListBoxに表示する値がずれるというものです。

ListBoxのフォントはMS ゴシック 9ptを使っております。
(プロポーショナルの無い方のゴシック体です。)

通常のアルファベットや漢字はちゃんとずれずに表示されるのですが、
「×」(ばつ)が入っていると、それ以降の文字がずれてしまいます。
たとえば、
"あいうえお   abc"
"あい×えお   abc"
と、2行追加すると、下の×の入っている文字列のほうが、少し短くなります。

フォントを明朝にしたり、サイズを12や15にしても同じでした。

テキストボックスで試してもずれてしまいます。
ただ、リッチテキストコントロールを使うと、ずれることなく表示しました。

どなたが原因のお分かりの方、ご教授願います。

以上、よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: ListBox(VBA)のずれ
記事No13232
投稿日: 2008/11/14(Fri) 08:28
投稿者花ちゃん
> ListBoxのフォントはMS ゴシック 9ptを使っております。
> (プロポーショナルの無い方のゴシック体です。)
> 通常のアルファベットや漢字はちゃんとずれずに表示されるのですが、
> 「×」(ばつ)が入っていると、それ以降の文字がずれてしまいます。

チョット試した限りではそのような事象はおきませんでした。

上記事象を再現できるコードを投稿して頂けませんか?
(これを見ている人がその通り実行すれば同じ現象が起きるような方法を)

どのように表示しておられるのか解らないし、×の文字も3種類程ありますし
又、上記事象を再現できるコードを作成する過程で原因が見つかる場合もありますので。

それとExcel のセルに同様に表示させた場合や VB6.0 上でも同じ事が起きるのかどうか?

[ツリー表示へ]
タイトルRe^2: ListBox(VBA)のずれ
記事No13233
投稿日: 2008/11/14(Fri) 10:02
投稿者スプリンガー
> 上記事象を再現できるコードを投稿して頂けませんか?
> (これを見ている人がその通り実行すれば同じ現象が起きるような方法を)
>
> どのように表示しておられるのか解らないし、×の文字も3種類程ありますし
> 又、上記事象を再現できるコードを作成する過程で原因が見つかる場合もありますので。
>
> それとExcel のセルに同様に表示させた場合や VB6.0 上でも同じ事が起きるのかどうか?

返答ありがとうございます。

Excelを立ち上げて、Visual Basic Editorの画面を開きます。
「挿入」でUserFormを追加し、その画面に標準のListBoxを貼り付けます。

コードに以下のイベントを追加してください。

Private Sub UserForm_Initialize()
    With ListBox1
        .AddItem "あいうえお   abc"
        .AddItem "あい×えお   abc"
        .AddItem "あいφえお   abc"
    End With
End Sub

で、F5で実行すると、
ユーザーフォームが表示され、そのリストがずれているのが確認できると思います。
「×」(ばつ)のほかにも「φ」(ファイ)などもずれるようです。
ずれ方としては、「×」が半角のような少し小さい表示になり、
それ以降ずれてしまいます。

VB6で同様に行ってみましたが、ずれずに表示されました。
Excelのセルに直接入力しても、ずれずに表示されます。

その他の画面関係の環境としては、
テーマ  XP(クラシックじゃない方)
ウィンドウとボタン XPスタイル
配色 シルバー
フォントサイズ 標準
解像度  1400×1050
DPI   96dpi

となっております。

以上、よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^3: ListBox(VBA)のずれ
記事No13234
投稿日: 2008/11/14(Fri) 10:08
投稿者魔界の仮面弁士
> コードに以下のイベントを追加してください。

最初の質問文にあった
>>> サイズを12や15にしても同じでした。
の点は、どうなっているのでしょうか?

少なくとも当方では、下記のコードでズレは発生していません。

Private Sub UserForm_Initialize()
    With ListBox1.Font
        .Name = "MS ゴシック"
        .Size = 12
        .Charset = 128
    End With
  
    ListBox1.AddItem "あいうえお   abc"
    ListBox1.AddItem "あい×えお   abc"
    ListBox1.AddItem "あいφえお   abc"
End Sub

[ツリー表示へ]
タイトルRe^3: ListBox(VBA)のずれ(追記)
記事No13236
投稿日: 2008/11/14(Fri) 11:08
投稿者花ちゃん
途中経過だけど。

同じPC上でも、Excel 2007 とそれ以前のバージョンでは違うようですね。
(VBA や Forms のバージョンも同じ)
魔界の仮面弁士さんが投稿されたコードで確認

どうも、×±÷ の文字だけが違うフォントで表示されているような感じですね。
(× の文字だけが太く表示される 市販のフォントを使用しても同じ)

Excel 2002 の場合とExcel 2007 の場合の違いを調べてはいるのですが、Excel 2007
以前のバージョンについては、最新のサービスパックが当たっていないくらいしか...。

TextBox 等他のコントロールでも同じくフォントが狭く表示されるようです。
又、VB6.0 で Microsoft Forms 2.0 を使って表示しても同じ現象が起きます。

[ツリー表示へ]
タイトルRe^4: ListBox(VBA)のずれ(追記)
記事No13237
投稿日: 2008/11/14(Fri) 13:22
投稿者スプリンガー
返答ありがとうございます。

> Excel 2002 の場合とExcel 2007 の場合の違いを調べてはいるのですが、Excel 2007
> 以前のバージョンについては、最新のサービスパックが当たっていないくらいしか...。

サービスパックは最新のものを当てていると思います。
Windows XP SP3
Office XP SP3
VB6 SP6

VB6.0 でも Microsoft Forms 2.0 を使うとずれんですね。

「×」(ばつ)はとりあえず、「X」(エックス)とかに置き換えて
逃げるしか無いですかね。他のずれてしまう文字をどうするかは
考えていませんが・・・。

以上になります。

[ツリー表示へ]
タイトルRe^4: ListBox(VBA)のずれ(追記)
記事No13238
投稿日: 2008/11/14(Fri) 13:44
投稿者魔界の仮面弁士
> 同じPC上でも、Excel 2007 とそれ以前のバージョンでは違うようですね。
> (VBA や Forms のバージョンも同じ)

なるほど、当方は Excel 2007 です。(旧バージョンの Office は入れていません)

同一 PC での検証はできませんが、手元に Excel 97 を入れた VirtualPC が
あったので、それぞれ撮影してみました。確かにずれますね…。
http://www.vb-user.net/images/20081114/ExcelListBox.png


> 又、VB6.0 で Microsoft Forms 2.0 を使って表示しても同じ現象が起きます。

VB6 から MSForms.ListBox を使う場合においては、UserForm に貼った場合と
VB の Form に貼った場合とで、異なるズレ方をするようです。

《スクリーン フォントの縁を滑らかにする - 無効》
http://www.vb-user.net/images/20081114/MSFormsListBox.png

《スクリーン フォントの縁を滑らかにする - ClearType》
http://www.vb-user.net/images/20081114/MSFormsListBoxClearType.png

《スクリーン フォントの縁を滑らかにする - 標準》
http://www.vb-user.net/images/20081114/MSFormsListBoxStandard.png


'------------------
Option Explicit

'Me(Form1) は VB.Form
'Form2 は MSForms.UserForm
Private Sub Command1_Click()
    Dim f As Font
    Set f = New StdFont
    f.Name = "MS ゴシック"
    f.Size = 15
    f.Charset = 128

    Form2.Show

    Set Me.List1.Font = f
    Me.List1.AddItem "あいうえお   abc"
    Me.List1.AddItem "あい×えお   abc"
    Me.List1.AddItem "あいφえお   abc"

    Set Me.ListBox1.Font = f
    Me.ListBox1.AddItem "あいうえお   abc"
    Me.ListBox1.AddItem "あい×えお   abc"
    Me.ListBox1.AddItem "あいφえお   abc"

    Set Form2.ListBox1.Font = f
    Form2.ListBox1.AddItem "あいうえお   abc"
    Form2.ListBox1.AddItem "あい×えお   abc"
    Form2.ListBox1.AddItem "あいφえお   abc"

    ' 自作 UserControl にも以下同様に設定
End Sub

[ツリー表示へ]
タイトルRe^5: ListBox(VBA)のずれ(追記)
記事No13242
投稿日: 2008/11/15(Sat) 00:00
投稿者スプリンガー
返答ありがとうございます。

やはり解決策はなさそうですね・・・。

フォントをMS明朝にしてみると、
「×」以降のフォントがゴシックみたいな別のフォントになってしまって、
それでずれているようです。

妥協して、文字の置き換えなどでカバーしたいと思います。
(すべてはカバーできないかもしれませんが。)

色々とありがとうございました。


でも、腑に落ちない・・・。

[ツリー表示へ]