@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

EXCEL(VBA)のPageSetupの処理を高速化したい

1
投稿者投稿内容
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2004-11-26 12:16
お世話さまです。

VS.NET2003(VB.NET)でCSVファイルを書き出し、そのCSVファイルを読み込んで
帳票を作成するEXCEL(Ver.2002)のテンプレート(List.xlt)を
VBのコードから起動しています。

このEXCELのコードの中で下記のようにマージンを設定しているのですが
この処理に見るからに時間(5、6秒)がかかっています。

With ActiveSheet.PageSetup
  .LeftMargin = Application.InchesToPoints(0.78740157480315)
  .RightMargin = Application.InchesToPoints(0)
  .TopMargin = Application.InchesToPoints(0)
  .BottomMargin = Application.InchesToPoints(0)
  .HeaderMargin = Application.InchesToPoints(0)
  .FooterMargin = Application.InchesToPoints(0)
End With

帳票の作成方法としては、罫線などを引いたテンプレート(Temp)シートのセルに
データをセットし、下記のようにシートごとコピーする方法をとっています。

gBook_Name = ActiveWorkbook.Name

'新規ワークブック作成
Application.SheetsInNewWorkbook = 1
Workbooks.Add 'ワークシート数を1つで新規ブックを作成
gNewBook_Name = ActiveWorkbook.Name

Workbooks(gBook_Name).Activate
Workbooks(gBook_Name).Sheets("Temp").Select
Cells.Select
Application.CutCopyMode = False
Selection.Copy

Workbooks(gNewBook_Name).Activate
Workbooks(gNewBook_Name).Sheets("Sheet1").Select
Cells.Select
ActiveSheet.Paste

Workbooks(gNewBook_Name).Sheets("Sheet1").Select
Sheets("Sheet1").Name = "帳票のシート名"
Workbooks(gNewBook_Name).Sheets("帳票のシート名").Cells(1, 1).Select

このようにしてシートをコピーした後でPageSetupでマージンの調節を
しているのですが、あらかじめマージンを調節したテンプレート(Temp)の書式
も"Sheet1"にコピーできればいいのですが、その実装方法が分かりません。

なんとかこのPageSetupの部分を高速化する手立てはないものでしょうか?
ご教示頂けるとありがたいのですが。
以上、宜しくお願い致します。
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-11-26 18:51
こんにちは。お役に立てるか分かりませんが、

>帳票の作成方法としては、罫線などを引いたテンプレート(Temp)シートのセルに
>データをセットし、下記のようにシートごとコピーする方法をとっています。

テンプレートのExcelファイルをコピーしてそのファイル(既にマージンがセットされている)
にデータをセットすれば事は足りませんでしょうか?

あと、今回の件とは直接関係ないかも知れませんが、こちらのVBA高速化テクニックも読んでみると面白いです。

http://www.officetanaka.net/

[ メッセージ編集済み 編集者: とっと 編集日時 2004-11-26 18:53 ]
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2004-11-26 23:40
===>とっと様

早速のレス、ありがとうございます。

>テンプレートのExcelファイルをコピーしてそのファイル(既にマージンがセットされている)
にデータをセットすれば事は足りませんでしょうか?
その方法は思いもよりませんでした。

しかし、VB.NET側で既にCSVを作成しているルートは保持したいので
EXCELのVBA側でなんとかしたいのです。^^;

>あと、今回の件とは直接関係ないかも知れませんが、こちらのVBA高速化テクニックも読んでみると面白いです。
ご紹介ありがとうございます。
VBAは素人に毛が生えたようなレベルですので、参考にさせて頂きます。
Lin
ベテラン
会議室デビュー日: 2004/11/08
投稿数: 50
投稿日時: 2004-11-27 00:49
確かプリンターがネットワーク越しに繋がってたらおそいんだったような気がします。
ローカルポートにつなげば、PageSetup関係早くなるのではないかと。
すみません、これじゃ回答にならないですよね。
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-11-27 08:27
おはようございます。

>このようにしてシートをコピーした後でPageSetupでマージンの調節を
>しているのですが、あらかじめマージンを調節したテンプレート(Temp)の書式
>も"Sheet1"にコピーできればいいのですが、その実装方法が分かりません。

普通にExcelを操作してみると、手動でシートを『移動またはコピー』でコピーすると
当然設定したマージンもその状態でコピーされますね?手動で出来るんですから
オートメーションでも出来るんじゃないでしょうか。
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2004-11-27 16:43
===>Lin様

レス、ありがとうございます。

>確かプリンターがネットワーク越しに繋がってたらおそいんだったような気がします。
私の実行環境もネットワークプリンタです。

だとしたら手の打ちようがなさそうですね。
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2004-11-27 16:49
===>とっと様

こんにちは。
度重なるレス、感謝です。

>普通にExcelを操作してみると、手動でシートを『移動またはコピー』でコピーすると
当然設定したマージンもその状態でコピーされますね?
本当ですね。

なんかこの角度で攻めればなんとかなりそうな気がしてきました。
月曜にその方法で試してみます。

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

スキルアップ/キャリアアップ(JOB@IT)