Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12762 / 13644 ツリー ←次へ | 前へ→

【8772】Excel2000でHpageBreakオブジェクトが取得できません。 ちゃっぴ 03/10/31(金) 18:05 質問
【8773】Re:Excel2000でHpageBreakオブジェクトが取... ちゃっぴ 03/10/31(金) 18:34 質問
【8774】Re:Excel2000でHpageBreakオブジェクトが取... INA 03/10/31(金) 20:29 回答
【8775】正常に取得できました。 ちゃっぴ 03/10/31(金) 21:36 お礼
【8777】Re:正常に取得できました。 りん 03/11/1(土) 13:33 発言
【8780】Re:正常に取得できました。 ちゃっぴ 03/11/2(日) 14:31 発言
【8815】Re:正常に取得できました。 りん 03/11/4(火) 1:56 発言

【8772】Excel2000でHpageBreakオブジェクトが取得...
質問  ちゃっぴ E-MAIL  - 03/10/31(金) 18:05 -

引用なし
パスワード
   印刷ページ数を取得するため、以下のマクロを作成しました。


Excel2000で特定のファイルに対し実行したところ、For Each 文のHpageBreak Objectを取得する過程でエラーが発生しました。
debugしたところ、HpageBreaks.count = 3 でしたが、HpageBreaks(3)が存在しませんでした。どうしてでしょうか?

ちなみにExcel2002では正常に取得でき、HpageBreaks.count = 2が表示されました。

どなたかわかる方、教えてください。

Public Function F_CountPages(ByVal wshWork_Sheet1 As Worksheet) As Long
  Dim lngV_PageNo As Long     '印刷範囲内の垂直改ページ数
  Dim lngH_PageNo As Long     '印刷範囲内の水平改ページ数
  Dim hpb As HPageBreak      '垂直改ページ(object)
  Dim vpb As VPageBreak      '水平改ページ(object)
  Dim strPrint_Area As String   '印刷範囲のアドレス
  
  With wshWork_Sheet1
    '「改ページ」プレビュー
    ActiveWindow.View = xlPageBreakPreview
    '印刷範囲アドレス取得
    strPrint_Area = .PageSetup.PrintArea
    If strPrint_Area = "" Then
      strPrint_Area = "A1:IV65536"
    End If
    '印刷領域の垂直改ページをカウント
    For Each vpb In .VPageBreaks
      If Not Application.Intersect(vpb.Location, .Range(strPrint_Area)) _
        Is Nothing Then
        lngV_PageNo = lngV_PageNo + 1
      End If
    Next vpb
    '印刷領域の水平改ページをカウント
    For Each hpb In .HPageBreaks
      If Not Application.Intersect(hpb.Location, .Range(strPrint_Area)) _
        Is Nothing Then
        lngH_PageNo = lngH_PageNo + 1
      End If
    Next hpb
    With .PageSetup
      '拡大縮小印刷の場合
      If CBool(.Zoom) = True Then
        lngV_PageNo = lngV_PageNo + 1
        lngH_PageNo = lngH_PageNo + 1
      '枚数指定印刷の場合
      Else
        lngV_PageNo = IIf(Not .FitToPagesWide = False, _
          .FitToPagesWide, lngV_PageNo + 1)
        lngH_PageNo = IIf(Not .FitToPagesTall = False, _
          .FitToPagesTall, lngH_PageNo + 1)
      End If
    End With
    '印刷枚数取得
    F_CountPages = lngV_PageNo * lngH_PageNo
    '「標準」ビュー
    ActiveWindow.View = xlNormalView
  End With
End Function

【8773】Re:Excel2000でHpageBreakオブジェクトが...
質問  ちゃっぴ  - 03/10/31(金) 18:34 -

引用なし
パスワード
   先ほどの補足です。

特定のシートを最後に保存したのは、Excel2000です。
作成したときのExcelのVer.はちょっとわかりません(゜人゜)(-人-)ゴメンネ


印刷範囲は選択されておりません。
取得できるHPageBreaks(2個)は手動で挿入されたものです。
印刷枚数は、印刷プレビューで見ると3ページです。
印刷プレビュー及び印刷は正常に動作します。
他マシンのExcel2000でも同様の現象が発生しました。
Excel2002では正常に動作しますので、ファイルが壊れているわけでもなさそうですし・・・

ExcelのVer.が原因ですかね〜?
Microsoftの技術情報もあさったんですけど、それらしいものはないですし…

どなたか、詳しい方教えてください。

このプロシジャー、その特定のファイル(特定シート)以外は正常に取得できるので
正確な印刷枚数を取得されたい方はどうぞご自由にお使いください。

【8774】Re:Excel2000でHpageBreakオブジェクトが...
回答  INA  - 03/10/31(金) 20:29 -

引用なし
パスワード
   >印刷ページ数を取得するため、以下のマクロを作成しました。

Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")

これではダメでしょうか?

【8775】正常に取得できました。
お礼  ちゃっぴ E-MAIL  - 03/10/31(金) 21:36 -

引用なし
パスワード
   いろいろ調べたのですが、このような技があるとは(ノ゜凵K)ノびっくり!!

こんな短いコードでできるとは!!!

こちらでも確認したところさまざまな印刷設定において、問題ないようですし…

ありがたく使わせていただきます。

【8777】Re:正常に取得できました。
発言  りん E-MAIL  - 03/11/1(土) 13:33 -

引用なし
パスワード
   ちゃっぴ さん、こんにちわ。

解決したあとですが。

>取得できるHPageBreaks(2個)は手動で挿入されたものです。
>印刷枚数は、印刷プレビューで見ると3ページです。

 印刷枚数が3なら改ページは2ですよね。

【8780】Re:正常に取得できました。
発言  ちゃっぴ E-MAIL  - 03/11/2(日) 14:31 -

引用なし
パスワード
   ▼りん さん:
>ちゃっぴ さん、こんにちわ。
>
>解決したあとですが。
>
>>取得できるHPageBreaks(2個)は手動で挿入されたものです。
>>印刷枚数は、印刷プレビューで見ると3ページです。
>
> 印刷枚数が3なら改ページは2ですよね。

そうなんですが、なぜかHPageBreaks.Count=3になるんです。(原因不明?)
HPageBreaks(n)の値をN = 0 To 4000まで調べましたが、
HPageBreaks(1),HPageBreaks(2)しか値が取得できませんでした。

Excel2002では、HPageBreaks.Count=2となり、正常に取得できます。
これは、Excelのヴァージョンによる非互換性ですかね〜?

【8815】Re:正常に取得できました。
発言  りん E-MAIL  - 03/11/4(火) 1:56 -

引用なし
パスワード
   ちゃっぴ さん、こんにちわ。

>>>取得できるHPageBreaks(2個)は手動で挿入されたものです。
>>>印刷枚数は、印刷プレビューで見ると3ページです。
>> 印刷枚数が3なら改ページは2ですよね。
>そうなんですが、なぜかHPageBreaks.Count=3になるんです。(原因不明?)

http://www21.tok2.com/home/vbalab/bbs/c-board.cgi?cmd=ntr;tree=3106;id=Excel
過去にもその問題で議論になったことがありました。
結局、原因不明でした。しかも肝心のログは消えてますし...

>Excel2002では、HPageBreaks.Count=2となり、正常に取得できます。
>これは、Excelのヴァージョンによる非互換性ですかね〜?

バグがこそーっと修正されたんではないでしょうかね〜

 今日作業していて何となく思ったのですが。
 改ページの位置はプリンタの性能に一部依存するので、改ページ情報を持つオブジェクトの再取得というか再計算というかが適当になされていないんではないかと思います。プレビューを見ながら印刷の設定をすると、あるはずのページにいけなかったりしていますし。微妙な大きさ(はみだすかどうかぎりぎり)とかだと計算があやふやになってる気がします。ちなみにWin98&XL2000でした。
 改ページオブジェクトを使う前に、改ページプレビューを表示するなどして、リフレッシュしてやるとエラーにならないかもしれませんね。

12762 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free