[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/12/22(Wed) 13:03
投稿者名:ごん
Eメール:
URL :
タイトル:
ワードテーブルのページ境界検出
こんにちは、お世話になります。

 VB6からワードのテーブルを作り、表印刷を行っていますが、
プログラムから指定する改ページが上手く合わずに、ページから
溢れ次のページに表示される事が有ります。

 ページが変わった場合には、前のページのセルに表示していた
一部を再表示するか、ページが溢れる前に、改ページして、余白が
残っても次のページに表示するかにしたいのですが、上手く行きま
せん、何か良い方法が有りましたらご教授下さい。

 現在は、printer.textheightで文字高さを調べ、印字許容高さから
判定していますが、printer.textheightの行送りと、ワードの行送り
が違うのか上手く行きません。

投稿時間:2004/12/22(Wed) 17:36
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: ワードテーブルのページ境界検出
ページ設定で1ページに表示する行数を決めていれば、自分で表を書いているなら
何行目から何行目までに書いているかも解るはずだから1ページに表示できるか
出来ないか解るかと思いますが。
コードについてはマクロ取ってそのマクロを見て見るとかすればどうでしょう。

投稿時間:2004/12/22(Wed) 18:40
投稿者名:ごん
Eメール:
URL :
タイトル:
Re^2: ワードテーブルのページ境界検出
> ページ設定で1ページに表示する行数を決めていれば、自分で表を書いているなら
> 何行目から何行目までに書いているかも解るはずだから1ページに表示できるか
> 出来ないか解るかと思いますが。
> コードについてはマクロ取ってそのマクロを見て見るとかすればどうでしょう。

 早速のご返事有難う御座います。

 マクロには反映しない内容なのですが、シンプルに考えて見れば良かった
のかも知れませんね、セルの途中で次のページに移るので、セルの基準高さ
+文字の行ピッチ*(n-1行)等と考えていましたが、可能な行数は、セル内で
も文章全体の可能な行数を超えるとのと同じなのですね、有難う御座います、
試してみます。

投稿時間:2004/12/24(Fri) 11:47
投稿者名:ごん
Eメール:
URL :
タイトル:
10.5ポイント以下の設定でエラー
> ページ設定で1ページに表示する行数を決めていれば、自分で表を書いているなら
> 何行目から何行目までに書いているかも解るはずだから1ページに表示できるか
> 出来ないか解るかと思いますが。
> コードについてはマクロ取ってそのマクロを見て見るとかすればどうでしょう。

ご指導の件、なるほどと思ってやってみたのですが以下の条件の時にエラーが起こります。
DocWs.Content.Font.Name = "MS 明朝"'Xfont_name
DocWs.Content.Font.Size = 8'Xfont_size
With DocWs.Sections(1).PageSetup
        .LineNumbering.Active = False
        .Orientation = wdOrientPortrait
        .TopMargin = MillimetersToPoints(lparam(3)) '25
        .BottomMargin = MillimetersToPoints(lparam(4)) '20
        .LeftMargin = MillimetersToPoints(lparam(1)) '20
        .RightMargin = MillimetersToPoints(lparam(2)) '20
        .Gutter = MillimetersToPoints(0)
        .HeaderDistance = MillimetersToPoints(15)
        .FooterDistance = MillimetersToPoints(17.5)
        .PageWidth = MillimetersToPoints(210) 'A4縦
        .PageHeight = MillimetersToPoints(297)
        .FirstPageTray = wdPrinterDefaultBin
        .OtherPagesTray = wdPrinterDefaultBin
        .SectionStart = wdSectionNewPage
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .VerticalAlignment = wdAlignVerticalTop
        .SuppressEndnotes = False
        .MirrorMargins = False
        .TwoPagesOnOne = False
        .GutterPos = wdGutterPosLeft
        .CharsLine = 59 'NumChar
        .LinesPage = 58 'NumRaw
        .LayoutMode = wdLayoutModeGrid 'wdLayoutModeDefault
End With

 ワードを表示状態で見てみると、画面表示は"MS 明朝",8になって
いますが、ページ設定は、"MS 明朝",10.5となっており、エラーも
.CharsLine が49となる為、”値が有効範囲を超えています”が出ます。

 引き続き、ワード上のページ設定で、"MS 明朝",8にして、文字数、
行数を、66,65とした後でVBを継続動作させると正常動作します。

 ページ設定が生かされていないので、念のため先に以下を加えても
同じエラーが起きます。
With DocWs.Styles(1).Font
   .NameFarEast = Xfont_name
   .NameAscii = "Century"
   .NameOther = "Century"
   .Name = "Century"
   .Size = Xfont_size
End With

 何か重要な設定が抜けているのでしょうか?

投稿時間:2004/12/24(Fri) 13:15
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 10.5ポイント以下の設定でエラー
ページ内に表示している文字すべてが8ポイントに設定されていますか?
どこかで、コピー・ペーストしていませんか?

参考リンク
 hhttp://support.microsoft.com/default.aspx?scid=kb;JA;410949

投稿時間:2004/12/24(Fri) 14:36
投稿者名:ごん
Eメール:
URL :
タイトル:
Re^2: 10.5ポイント以下の設定でエラー
> ページ内に表示している文字すべてが8ポイントに設定されていますか?
> どこかで、コピー・ペーストしていませんか?
>
> 参考リンク
>  hhttp://support.microsoft.com/default.aspx?scid=kb;JA;410949

 ご返事有難う御座います。

 ワードのインスタンスを作った直下の
DocWs.Sections(1).PageSetup .CharsLine = NumCharで
発生しているので、まだ何も操作していません。

投稿時間:2004/12/24(Fri) 14:53
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: 10.5ポイント以下の設定でエラー
エラーが発生するのが確認できる最低限のコードを投稿して下さい。
(ペーストするだけで動く)
部分的なコードを投稿してもらっても同じ状態で確認できないので!!

投稿時間:2004/12/24(Fri) 15:20
投稿者名:ごん
Eメール:
URL :
タイトル:
Re^4: 10.5ポイント以下の設定でエラー
> エラーが発生するのが確認できる最低限のコードを投稿して下さい。
> (ペーストするだけで動く)
> 部分的なコードを投稿してもらっても同じ状態で確認できないので!!

ご多忙のところすみません。

Sub testA()
Dim myAppOpen As Boolean
'
Dim NumChar As Integer
Dim NumRaw As Integer
Dim Xfont_name As String
Dim Xfont_size As Integer
Dim ret
'
Xfont_name = "MS 明朝"
Xfont_size = 9
NumChar = 59
NumRaw = 58

     On Error GoTo ErrRtn

     Set DocApp = GetObject(, "Word.Application")
     myAppOpen = True
'
MacroContinue:
     ' Wordのインスタンスが作成されていなかったら作成する
     If myAppOpen = False Then
         Set DocApp = CreateObject("Word.Application")
     End If
'
    On Error GoTo 0
    
    Set DocWs = DocApp.Documents.Add
    DocApp.Visible = True 'False
'
    'ドキュメント操作
'
    DocWs.Content.Font.Name = Xfont_name            'フォント設定
    DocWs.Content.Font.Size = Xfont_size            'フォントサイズ設定
    DocWs.ActiveWindow.View.Zoom.Percentage = 100   '拡大率
'
    With DocWs.Sections(1).PageSetup                'ページ設定
        .LineNumbering.Active = False
        .Orientation = wdOrientPortrait
        .TopMargin = MillimetersToPoints(25) 'lparam(3)) 25
        .BottomMargin = MillimetersToPoints(20) 'lparam(4)) '20
        .LeftMargin = MillimetersToPoints(20) 'lparam(1)) '20
        .RightMargin = MillimetersToPoints(20) 'lparam(2)) '20
        .Gutter = MillimetersToPoints(0)
        .HeaderDistance = MillimetersToPoints(15)
        .FooterDistance = MillimetersToPoints(17.5)
        .PageWidth = MillimetersToPoints(210) 'A4縦
        .PageHeight = MillimetersToPoints(297)
        .FirstPageTray = wdPrinterDefaultBin
        .OtherPagesTray = wdPrinterDefaultBin
        .SectionStart = wdSectionNewPage
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .VerticalAlignment = wdAlignVerticalTop
        .SuppressEndnotes = False
        .MirrorMargins = False
        .TwoPagesOnOne = False
        .GutterPos = wdGutterPosLeft '綴じ代
        .CharsLine = NumChar
        .LinesPage = NumRaw
        .LayoutMode = wdLayoutModeGrid 'wdLayoutModeDefault
        ret = MsgBox("正常終了")
    End With
    
    DocApp.Quit
    'ワード解放
    Set DocWs = Nothing
    Set DocApp = Nothing
    End
'
ErrRtn:
     ' ActiveXコンポーネントはオブジェクトを作成できません
     If Err.Number = 429 Then
         myAppOpen = False
         Resume MacroContinue
     End If

End Sub

投稿時間:2004/12/24(Fri) 15:20
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^4: 10.5ポイント以下の設定でエラー
マクロを取って見れば解るのですがフォントの設定の仕方が違うのでは
下記のように変更すればエラーは発生しないようですが。

'プロジェクト→参照設定でMicrosoft Word *.* Object Library にチェックを入れておいて下さい
Private Sub Command1_Click()
    Dim wdApp   As Word.Application
    Dim wdDoc   As Word.Document
    Set wdApp = New Word.Application
    Set wdDoc = wdApp.Documents.Add
    wdApp.Visible = True
    
    With wdDoc.Styles(wdStyleNormal).Font
        .NameFarEast = "MS 明朝"
        .NameAscii = "Century"
        .NameOther = "Century"
        .Name = "Century"
        .Size = 8
    End With

    With wdDoc.PageSetup
            .LineNumbering.Active = False
            .Orientation = wdOrientPortrait
            .TopMargin = MillimetersToPoints(25) '25
            .BottomMargin = MillimetersToPoints(20) '20
            .LeftMargin = MillimetersToPoints(20) '20
            .RightMargin = MillimetersToPoints(20) '20
            .Gutter = MillimetersToPoints(0)
            .HeaderDistance = MillimetersToPoints(15)
            .FooterDistance = MillimetersToPoints(17.5)
            .PageWidth = MillimetersToPoints(210) 'A4縦
            .PageHeight = MillimetersToPoints(297)
            .FirstPageTray = wdPrinterDefaultBin
            .OtherPagesTray = wdPrinterDefaultBin
            .SectionStart = wdSectionNewPage
            .OddAndEvenPagesHeaderFooter = False
            .DifferentFirstPageHeaderFooter = False
            .VerticalAlignment = wdAlignVerticalTop
            .SuppressEndnotes = False
            .MirrorMargins = False
            .TwoPagesOnOne = False
            .GutterPos = wdGutterPosLeft
            .CharsLine = 59 'NumChar
            .LinesPage = 58 'NumRaw
            .LayoutMode = wdLayoutModeGrid 'wdLayoutModeDefault
    End With
    wdApp.Quit SaveChanges:=wdDoNotSaveChanges
    Set wdDoc = Nothing
    Set wdApp = Nothing
End Sub

> エラーが発生するのが確認できる最低限のコードを投稿して下さい。
> (ペーストするだけで動く)

せっかく投稿してもらっても、そのコードをペーストしても、そのまま動かないでしょう
それに関係ない部分は削除するなりしてエラーの発生が確認できる最低限のコードに
して、ペーストしてCommand ボタンを押したらエラーが確認できるようにして投稿
しないと、誰も試してくれないかと思いますよ。
又、エラーが発生する最低限のコードに要らない部分を削除(コメントアウト)する
過程で原因がつかめる場合もありますよ。

上記なら誰でも試す事ができるでしょう。

投稿時間:2004/12/24(Fri) 15:38
投稿者名:ごん
Eメール:
URL :
タイトル:
解決しました
> マクロを取って見れば解るのですがフォントの設定の仕方が違うのでは
> 下記のように変更すればエラーは発生しないようですが。
>

>   WithDocWs.Styles(1).Font X

>   With DocWs.Styles(wdStyleNormal).Font ○

 ご指摘の通りでした、以前試した(1)は(wdStyleNormal)の
誤りなのですね。

 ご多忙のところ有難う御座いました。