エクセル出力の改ページの方法

解決


金魚  2008-11-19 19:32:49  No: 32626

いつもお世話になります。  エクセル出力で改ページの指定方法を教えて下さい。
  winXP、Del4でエクセル出力しています。印刷するために改ページの指定をしたいと思いますが、挿入方法がわかりません。過去ログにも無いようです。
  文字の書き込みは以下の様にしています。  どなたか教えて下さい。
  E_WorkSheet.Cells( 5, 2) := 'データ1';
  E_WorkSheet.Cells(15, 2) := 'データ2';
  E_WorkSheet.Cells(25, 2) := 'データ3';
  E_WorkSheet.Cells(35, 2) := 'データ4';
  E_WorkSheet.Cells(45, 2) := 'データ5';
46行目で改ページしたい
  E_WorkSheet.Cells(55, 2) := 'データ6';


たこ  2008-11-20 00:32:24  No: 32627

エクセルのマクロの自動記録で改ページ挿入の操作をすれば参考になるのでは。


金魚  2008-11-20 18:15:55  No: 32628

たこ  さん早速のコメントありがとうございます。

>エクセルのマクロの自動記録で改ページ挿入の操作をすれば

  エクセルのマクロはわかりません。
  エクセルを操作していて改ページしたい箇所で改ページを挿入するように、データを設定している途中で改ページコードのようなものを設定できないのでしょうか。  VBでは設定できるようですが、よくわかりません。どなたか教えてください。


HOta  2008-11-20 20:51:53  No: 32629

エクセルのマクロの自動記録で改ページ挿入の操作をマクロに記録すれば、参考になりませんか?


Ru  2008-11-20 21:04:28  No: 32630

参考にどうぞ
http://delphi-faq.zoxt.net/1278.htm

VB用からDelhpi用に多少コード変更する必要はありますが
エクセルマクロが一番参考になりますよ。


金魚  2008-11-20 21:40:57  No: 32631

HOtaさん、Ruさん、ありがとうございます。
  たこさんもご指導いただいたマクロの記録を始めて行ってみました。
  以下のような結果が出ました。

  ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell

  delphiで以下のようにしましたがコードの変換が必要なようでコンパイルすら出来ません。

  E_Application.Range['A46'].HPageBreaks.Add Before;

  どなたか教えてください。


そうねぇ  2008-11-20 21:52:56  No: 32632

>コードの変換が必要なようで.....
VBSとDelphiの記述方法は当然違うからね。
E_WorkSheet.HPageBreaks.Add(Before:=E_WorkSheet.Range['A46']);
または、
E_WorkSheet.HPageBreaks.Add(E_WorkSheet.Cells[46, 1]);


金魚  2008-11-20 22:21:17  No: 32633

そうねぇさん、、ありがとうございます。

E_Application.HPageBreaks.Add(Before:=E_Application.Range['A46']);
で以下の実行時エラーが発生します。

EOleErroeクラス例外を生成しました。'メソッド'HPageBreaks'はオートメーションオブジェクトでサポートしていません。

どなたか教えてください。


そう言われても  2008-11-20 22:37:16  No: 32634

>どなたか教えてください。
そう言われても、「サポートしていません」じゃぁ諦めるしかないね。
ところで、E_Applicationってなに?


金魚  2008-11-20 23:09:05  No: 32635

そう言われてもさん、ありがとうございます。

> ところで、E_Applicationってなに?

var
  E_Excel       : oleVariant;
  E_Application : Variant;
  E_WorkBook    : Variant;
  E_WorkSheet   : Variant;

  E_Application.WorkBooks.Open('C:\BUNN.xls'); //xlsファイルを指定
  E_WorkBook            := E_Application.ActiveWorkbook;
  E_WorkSheet           := E_Application.ActiveSheet;

細やかな設定は最初の文で設定しておきデータを貼り付ける方法です。
行数が何行になるかわからないので途中で改ページを挿入したいのです。

> そう言われても、「サポートしていません」じゃぁ諦めるしかないね。
たしかにそうですが、指定方法が間違っているのではないかと思っています。


気付いたかな?  2008-11-20 23:19:08  No: 32636

>指定方法が間違っているのではないかと思っています
その通りだね。
×E_Application
○E_WorkSheet
突然、E_Applicationが出てきて、
なにかと思ったよ。(察しはついたけどね(^。<)


たこ  2008-11-20 23:28:04  No: 32637

>指定方法が間違っているのではないかと思っています。

もう一度そうねぇさんの提示されたコードと自身のコードを見比べてください。
そう言われてもさんの「ところで、E_Applicationってなに?」の意味がわかるかと思います。


たこ  2008-11-20 23:29:44  No: 32638

既に気付いたかな?さんが指摘された後でしたね。


金魚  2008-11-21 01:56:52  No: 32639

そう言われてもさん、気付いたかな?さん、たこさん、ありがとうございました。
できるように成りましたが、データを貼り付ける途中でこの処理を行うとエラーが発生します。

  PG_GY := 26;
  for PriPg := 1 to 3 do begin
    E_Application.Range['AA1', 'AN26'].Copy;   // 基本のセルをコピー
    E_Application.Range['A'+IntToStr((PriPg-1)*PG_GY+ 1)].PasteSpecial;

    // ここに改ページの処理を入れると以下のRowHeightでエラーが発生します。
    if PriPg > 1 then begin
       E_WorkSheet.HPageBreaks.Add(Before:= E_WorkSheet.Range['A'+IntToStr((PG_GY-1) + 1)]);
    end;
    //

    E_Application.Rows[IntToStr((PriPg-1)*PG_GY+3)].RowHeight:= 13.50;  // セルの高さを調整
    E_Application.Rows[IntToStr((PriPg-1)*PG_GY+4)].RowHeight:= 19.50;
    E_Application.Rows[IntToStr((PriPg-1)*PG_GY+5)].RowHeight:= 24.00;
    .
    .
    E_WorkSheet.Cells((PriPg-1)* PG_GY+1,2) := 'データ';
    .
      // その他データをセット
  end;

  改ページの指定をしてセルの高さを変更するとだめなんですか?
  2行目のセルの高さの変更時にエラーが出ました。
  EOleErroeクラス例外を生成しました。RangeクラスのRowHeightプロバティを設定できません。


Ru  2008-11-21 19:06:55  No: 32640

仕様なのかわかりませんがExcelが非表示だと動かない?

  E_Application.Visible := True;
でExcelを表示してあげれば動くことを確認しました。


Ru  2008-11-21 23:06:28  No: 32641

Excel非表示でも以下で動きました。
指定方法によって動きが違う??

  E_Application.Range[E_Application.Cells.Item[10, 1], E_Application.Cells.Item[10, 1]].RowHeight:= 30.50;

※行位置は10行目にしていますので適当に変更してください。


金魚  2008-11-27 03:12:48  No: 32642

返事遅れてすみませんでした。
Ruさん、みなさん、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加