◆環境
VB6.0
MicrosoftXP
Word2000でWord出力していたのですが、Word2007に対応することになり、Word2000対応時点のソースを実行すると、今まで一行で表示されていた
データが、途中で改行されてしまい、困っています。
出力するデータは、リストボックスに表示されているデータです。
Wordファイルは、リストボックスに表示されているデータを60行3列で
出力しています。
参照設定で、MicrosoftWord12.0 ObjectLibrary
に変更しました。
----------------------
◆処理
Public m_WordApp As Word.Application
Public m_WordDoc As Word.Document
を宣言し、
60行1列のセルを作成し、
m_WordDoc.Tables.Add m_WordApp.Selection.Range, NumRows:=60, NumColumns:=1
With m_WordDoc.Tables(No)
.Borders.OutsideLineStyle = wdLineStyleNone 'これでCELLの線が消える
.Borders.InsideLineStyle = wdLineStyleNone 'これでCELLの線が消える
.Range.Paragraphs.Alignment = wdAlignParagraphJustifyHi '真ん中にそろう
End With
With m_WordDoc.Tables(No).Range.ParagraphFormat
' .LeftIndent = MillimetersToPoints(0)
' .RightIndent = MillimetersToPoints(0)
.LeftIndent = 0
.RightIndent = 0
.SpaceBefore = 0
.SpaceBeforeAuto = False
.SpaceAfter = 0
.SpaceAfterAuto = False
.LineSpacingRule = wdLineSpaceExactly
.LineSpacing = 12
.Alignment = wdAlignParagraphJustify
.WidowControl = False
.KeepWithNext = False
.KeepTogether = False
.PageBreakBefore = False
.NoLineNumber = False
.Hyphenation = True
' .FirstLineIndent = MillimetersToPoints(0)
.FirstLineIndent = 0
.OutlineLevel = wdOutlineLevelBodyText
.CharacterUnitLeftIndent = 0
.CharacterUnitRightIndent = 0
.CharacterUnitFirstLineIndent = 0
.LineUnitBefore = 0
.LineUnitAfter = 0
.AutoAdjustRightIndent = True
.DisableLineHeightGrid = False
.FarEastLineBreakControl = True
.WordWrap = True
.HangingPunctuation = True
.HalfWidthPunctuationOnTopOfLine = False
.AddSpaceBetweenFarEastAndAlpha = True
.AddSpaceBetweenFarEastAndDigit = True
.BaseLineAlignment = wdBaselineAlignAuto
End With
下記処理で
With m_WordDoc.Tables(TblNo)
.Cell(Row, 1).Range.InsertAfter Text
End With
書き込んでいます。
※Text as String
1ページにつき、60行出力させるために、セルを60行分作成し
その中にデータを入れることで実現しています。
#本当は行間を狭める方法がわかればよかったのですが、わからなかったため苦肉の策です。
Textには、vbTabが含まれていますが、それが改行として認識されているようにみえますが、そのようなことはあるのでしょうか?
現状、
Text = "A"+vbTab+"B"+vbTab+C
というデータの場合、Word出力をすると
A
B
C
とセル内に出力されます。
教えてください。
よろしくお願いいたします。
> #本当は行間を狭める方法がわかればよかったのですが
Word の機能としての意味であれば、このあたりとか。
http://pc.nikkeibp.co.jp/article/NPC/20060601/239697/
http://jjweb.itakura.toyo.ac.jp/pcroom/gyoukan.html
http://kokoro.kir.jp/word/gyoukan1.html
> ' .FirstLineIndent = MillimetersToPoints(0)
正しくは、 .FirstLineIndent = m_WordApp.MillimetersToPoints(0)
ですね。まぁ、コメントアウトされているので関係無いのですけれども。
魔界の仮面弁士さん、回答ありがとうございます。
私の文章の書き方が悪くて、上手に伝えられなかったのですが、
Wordの機能ではなく、Wordファイルに出力する際に行間の設定が
できればよかったという意味です。
それができなかったので、1ページにセルを60行作成し、セル内に
データを入力しています。
Word2000からWord2007に変更すると、一行で表示されていたデータが
改行されてしまうようになりました。
申し訳ありませんが、解決の糸口を教えていただけないでしょうか。
よろしくお願いいたします。
m_WordDoc.PageSetup.CharsLine = 60で1ページ60行にできるんじゃないの?
フォントサイズにもよるけど。
タカさんありがとうございます。
ただ、私がやりたいのは、1ページを60行に設定したいのです。
m_WordDoc.PageSetup.CharsLine =60
だと、1行の文字数が60文字の設定になってしまいました。
Wordの
[ファイル]-[ページ設定]
で、行数を60行に設定するのと同じことをソース上で実現したいです。
その場合、フォントの設定を8にしないと、行数に60行が設定できないので
こちらも合わせてご教授願います。
> PageSetup.CharsLine =60
LinesPage の書き間違いでしょうね。
> で、行数を60行に設定するのと同じことをソース上で実現したいです。
手順が分かっているのであれば、Word のメニュー項目から
『マクロの記録』を選んだ上で、
>> [ファイル]-[ページ設定]
を行えば、Alt+F11 で表示される VBA 画面に、その設定に必要な
設定が記録されますよね。その自動記録されたコードを見れば、
PageSetup オブジェクトのプロパティで設定できることが
分かるかと思います。
ツイート | ![]() |