喫茶XRAYトップページ

[スレッド全体
]

[1085] Re5:plExcelで印刷範囲の設定返信 削除
2007/2/6 (火) 00:37:59 Mr.XRAY
まずあるブックを開きます(印刷範囲の設定はないものとします)。
Button01クリックで印刷範囲を設定します。
このブックを閉じます。

再度開いて、Button02をクリックすると、設定した印刷範囲を選択状態に
します。
動作確認 WindowsXP(SP2) + Delphi7

//=============================================================================
//  印刷範囲の設定
//=============================================================================
procedure TplExcelForm2.Button01Click(Sender: TObject);
begin
     ExcelSheet.PageSetup.PrintArea:='A1:E20';
     Self.OverWriteBtnClick(nil);
end;
//=============================================================================
//  印刷範囲の取得とその範囲を選択状態にする
//=============================================================================
procedure TplExcelForm2.Button02Click(Sender: TObject);
var
     APrintAreaStr : String;
     ARangeStr     : String;
     APos          : Integer;
     AStart,AEnd   : String;
begin
     //このシートに設定されている印刷範囲を取得
     APrintAreaStr:= ExcelSheet.PageSetup.PrintArea;

     if APrintAreaStr<>'' then begin
       //セルの文字列を取得
       ARangeStr:=StringReplace(APrintAreaStr,'$','',[rfReplaceAll]);
       APos:=Pos(':',ARangeStr);
       AStart:=Copy(ARangeStr,1,APos-1);
       AEnd  :=Copy(ARangeStr,APos+1,Length(ARangeStr));

       //その範囲を選択状態にする
       ExcelSheet.Range[AStart,AEnd].Select;
     end else begin
       ShowMessage('印刷範囲は設定されていません。');
     end;
end;




[1086] Re6:plExcelで印刷範囲の設定返信 削除
2007/2/6 (火) 07:32:01 Mr.XRAY
また勘違いかな。

>plExcelから印刷範囲設定を行い、かつ設定された範囲をグレイ表示させる
>ことは可能でしょうか?


エクセルを単独で開いた時に印刷範囲を選択状態にしたいということですよね。
となると、印刷範囲を選択状態にするコードを、エクセルのマクロとして
保存し、このマクロを、エクセルの起動時に自動実行する、
という方法はどうでしょうか。
[1085]のButton02Clickのコードをマクロ(VBA)で書くわけですが、マクロの
コードは... セルの文字列を取得の部分をどう書いたら...




[1087] Re7:plExcelで印刷範囲の設定返信 削除
2007/2/6 (火) 08:51:55 TS
Mr.XRAYさん お世話になります。
Selection.CurentRegion.Selectはどうでしょうか
空白で囲まれた領域を選択します。
 

[1088] Re8:plExcelで印刷範囲の設定返信 削除
2007/2/6 (火) 08:55:22 TS
訂正します。
Selection.CurrentRegion.Select
 

[1089] Re9:plExcelで印刷範囲の設定返信 削除
2007/2/6 (火) 09:42:17 yumapa
Mr.XRAYさん、TSさん
アドバイスありがとうございます。

[1085]で、Mr.XRAYさんからご回答頂いた
 
> //=============================================================================
> //  印刷範囲の設定
> //=============================================================================
> procedure TplExcelForm2.Button01Click(Sender: TObject);
> begin
>      ExcelSheet.PageSetup.PrintArea:='A1:E20';
>      Self.OverWriteBtnClick(nil);
> end;


の部分ですが、
印刷範囲をエクセル操作フォーム上から設定する方法として
マウスで印刷範囲としたい部分を範囲選択し、フォーム上の
Button1.Clickで印刷範囲設定を行いたいのです。
上記コードの 'A1:E20' の部分をマウスによる範囲選択に
よってセル番地を取得する必要があります。

エクセル操作フォームにおけるActiveCellプロパティで
セル番地を取得できるように、範囲選択したセル範囲の
最終セル番地を取得するにはエクセルのマクロとして
記載するしかないでしょうか?



[1090] Re10:plExcelで印刷範囲の設定返信 削除
2007/2/6 (火) 12:30:41 TS
A1のセルを選択
Selection.CurrentRegion.Select
はデータの最終番地を示します。
E20の後が空白行なら
'A1:E20'が結果として出ます。

[1091] Re11:plExcelで選択範囲あるいはデータ範囲の取得返信 削除
2007/2/6 (火) 19:06:09 Mr.XRAY
▼ TSさん、こんちには。どうもです。

>Selection.CurrentRegion.Select

こんなのがあったのですね。知りませんでした。

 yumapaさん、エクセル操作フォームの上でということで、いろいろコード
を書いてみましたので参考にして下さい。

//=============================================================================
//  選択範囲の範囲を取得  その1 個別に列番号と行番号を求める
//=============================================================================
procedure TplExcelForm2.Button2Click(Sender: TObject);
var
     ARange   : OleVariant;
     Col1     : Integer;
     Col2     : Integer;
     Row1     : Integer;
     Row2     : Integer;
     i1       : Integer;
     i2       : Integer;
     AreaStr  : String;
begin
     //表示中のシートの選択範囲
     ARange   :=ExcelApp.Selection[0];
     //左上と右下のセルの列と行を取得
     Col1 := ARange.Column;
     Col2 := ARange.Columns.Count-1+Col1;
     Row1 := ARange.Row;
     Row2 := ARange.Rows.Count-1+Row1;
     //セル番地
     i1 := Ord('A')+Col1-1;
     i2 := Ord('A')+Col2-1;
     AreaStr := Chr(i1)+IntToStr(Row1)+':'+Chr(i2)+IntToStr(Row2);
     //確認表示
     ShowMessage(AreaStr);
end;
//=============================================================================
//  選択範囲の範囲を取得 その2 Addressプロパティ使用
//=============================================================================
procedure TplExcelForm2.Button3Click(Sender: TObject);
var
     ARange   : OleVariant;
     AreaStr  : String;
begin
     //表示中のシートの選択範囲
     ARange:=ExcelApp.Selection[0];
     //確認表示
     AreaStr:=ARange.Address;
     AreaStr:=StringReplace(AreaStr,'$','',[rfReplaceAll]);
     ShowMessage(AreaStr);
end;
//=============================================================================
//  データのある範囲を取得  その1 個別に列番号と行番号を求める
//  データがあるどれかのセルがアクティブであれば、その範囲全体を知ることが可能
//=============================================================================
procedure TplExcelForm2.Button4Click(Sender: TObject);
var
     ARange   : OleVariant;
     Col1     : Integer;
     Col2     : Integer;
     Row1     : Integer;
     Row2     : Integer;
     i1       : Integer;
     i2       : Integer;
     AreaStr  : String;
begin
     //選択中の範囲
     ARange:=ExcelApp.Selection[0];
     //データのある領域全体を選択状態にする
     ARange.CurrentRegion.Select;
     //左上と右下のセルの列と行を取得
     Col1 := ARange.CurrentRegion.Column;
     Col2 := ARange.CurrentRegion.Columns.Count-1+Col1;
     Row1 := ARange.CurrentRegion.Row;
     Row2 := ARange.CurrentRegion.Rows.Count-1+Row1;
     //セル番地
     i1 := Ord('A')+Col1-1;
     i2 := Ord('A')+Col2-1;
     AreaStr := Chr(i1)+IntToStr(Row1)+':'+Chr(i2)+IntToStr(Row2);
     //確認表示
     ShowMessage(AreaStr);
end;
//=============================================================================
//  データのある範囲を取得  その2 Addressプロパティ使用
//  データがあるどれかのセルがアクティブであれば、その範囲全体を知ることが可能
//=============================================================================
procedure TplExcelForm2.Button5Click(Sender: TObject);
var
     ARange   : OleVariant;
     AreaStr  : String;
begin
     //選択中の範囲
     ARange:=ExcelApp.Selection[0];
     //データのある領域全体を選択状態にする
     ARange.CurrentRegion.Select;
     //確認表示
     AreaStr:=ARange.CurrentRegion.Address;
     AreaStr:=StringReplace(AreaStr,'$','',[rfReplaceAll]);
     ShowMessage(AreaStr);
end;
//=============================================================================
//  選択範囲を印刷範囲として設定
//  セル番地を個別に求める方法とCurrentRegionプロパティを使用する方法は省略
//=============================================================================
procedure TplExcelForm2.Button6Click(Sender: TObject);
var
     ARange  : OleVariant;
     AreaStr : String;
begin
     //表示中のシートの選択範囲
     ARange :=ExcelApp.Selection[0];
     AreaStr:=ARange.Address;
     if Pos(':',AreaStr)<>0 then begin
       //その範囲を印刷範囲とする
       ExcelSheet.PageSetup.PrintArea:=AreaStr;
     end;
end;

また、ブックに以下のマクロを登録しておけば、このブックを開いた時に
設定されている印刷範囲を選択状態にします。

Sub Auto_Open()
   Dim AArea As String
   AArea = ""
   AArea = ActiveSheet.PageSetup.PrintArea
   If AArea <> "" Then
     Range(AArea).Select
   Else
     MsgBox "印刷範囲は設定されていません。"
   End If
End Sub



[1092] Re12:plExcelで選択範囲あるいはデータ範囲の取得返信 削除
2007/2/6 (火) 21:50:06 yumapa
▼ Mr.XRAYさん

全く思い通りの動作を得ることができました。
また、これほど長いコーディングをわざわざ書いて
頂き大変恐縮しております。
ありがとうございました。

[1093] Re13:plExcelで選択範囲あるいはデータ範囲の取得返信 削除
2007/2/6 (火) 23:51:13 Mr.XRAY
▼ yumapaさん

> 全く思い通りの動作を得ることができました。
>また、これほど長いコーディングをわざわざ書いて


なんかの役に立つかなと思って、同じようなコードを書いてはみたのですが、
本当に役に立ったのか不安なんですけど... 。いいことにして下さい(笑)

それにしても CurrentRegion は使えますね。値つまりデータのある範囲を
知りたいというのは、他のBBSで質問を読んだことがあります。
もしかしたらTSさんがレスしていたのかも...


[1094] Re14:plExcelで選択範囲あるいはデータ範囲の取得返信 削除
2007/2/7 (水) 13:48:54 TS
最近Excelを見直しまして色々やってます。
Mr.XRAYさんのホームページに
大変助けてもらってます。

CurrentRegionは
VBA Excel97ハンドブックという
西田雅明さん著にのってました。
もうずいぶん昔に買った本ですが
最近役に立ってます。

[1095] Re15:plExcelで選択範囲あるいはデータ範囲の取得返信 削除
2007/2/7 (水) 19:01:07 Mr.XRAY
▼ TSさん

> Mr.XRAYさんのホームページに
> 大変助けてもらってます。


そんな、とんでもありません。

> VBA Excel97ハンドブックという

これは持っていませんが、VBA Word97/98ハンドブックというのを持っています。


[1096] Re16:plExcelで選択範囲あるいはデータ範囲の取得返信 削除
2007/2/7 (水) 21:34:08 TS
> これは持っていませんが、VBA Word97/98ハンドブックというのを持っています。
女性の方が書かれていたと思います。
これも買おうか迷って止めました。
個人的には一太郎オンリーなもので。
今回もバージョンアップして明日来る予定です、楽しみです。

ほんというと聞きたいことだらけなのですが。
解らないのを解くのも時間があるときはゲーム感覚でおもしろいです。

その内また教えて下さい。
ではまた宜しくお願いします。

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82