Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2013年11月14日] [更新 2013年11月14日] エクセル操作フォームEx
エクセル操作フォームEx   参考コード類
ウィンドウ枠の固定と分割
動作確認等 Windows 7 U64(SP1) + Delphi XE Pro + Excel 2010







ウィンドウ枠の固定と分割


ウィンドウ枠の固定と分割と,その解除の参考コードです.
ウィンドウ枠の固定は,TStringGrid では,固定列と固定行の設定に相当します.TStrinGrid では固定列と固定行のデータ表示をコードで制御する必要がありますが,エクセルは自動で制御します.

ウィンドウの分割は,各々のウィンドウが独立してスクロールすることができるようになります.
枠の固定または分割状態の時に,新たに枠の固定や分割をする場合は,一度設定を解除しないと,予期しない結果となることがあります.


図1
最初のボタンをクリック
  • 現在アクティブなセルの左側の列と上の行が固定列,固定行になる
図2
再度最初のボタンをクリック
  • 枠の固定が解除される
図3
[ウィンドウ枠の固定] クリック
  • コードで固定位置を設定する例
図4
[ウィンドウの分割] クリック
  • コードで指定した位置で分割する
図5
分割位置を変更
  • マウスドラッグで分割位置を変更できる

リスト1
ウィンドウ枠の固定と分割操作用の参考コード
//=============================================================================
//  フォームを表示する時の処理
//=============================================================================
procedure TplExcelFormEx2.FormShow(Sender: TObject);
begin
  //フォーム表示開始時に開くブック名
  xlfBookFullPath := 'テストブック.xls';
  //グリッドライン等を表示
  xlfDisplayGridLines    := True;
  xlfDisplayWorkBookTabs := True;
  xlfDisplayHeadings     := True;

  //元のフォームのOnShowを実行
  inherited;
end;

//=============================================================================
//  フォームを閉じる時の処理
//=============================================================================
procedure TplExcelFormEx2.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  xlfBookSaved := True;
  inherited;
end;

//=============================================================================
//  ウィンドウ枠の固定(トグル)
//  現在選択中のセルの左例と上の列を固定列と固定行にする
//=============================================================================
procedure TplExcelFormEx2.Button1Click(Sender: TObject);
var
  pType    : OleVariant;
  pID      : OleVariant;
  pTag     : OleVariant;
  pVisible : OleVariant;
begin
  pType    := EmptyParam;
  pID      := 443;
  pTag     := EmptyParam;
  pVisible := EmptyParam;

  try
    xlfExcelApp.CommandBars.FindControl(pType, pID, pTag, pVisible).Execute;
  except
  end;
end;

//=============================================================================
//  ウィンドウ枠の固定
//  コードでセルを指定
//=============================================================================
procedure TplExcelFormEx2.Button2Click(Sender: TObject);
begin
  //セルを選択.このセルの左側の列と上の行が固定列と行になる
  xlfActiveCell := 'B3';
  xlfExcelApp.ActiveWindow.FreezePanes := True;
end;

//=============================================================================
//  ウィンドウ枠固定の解除
//=============================================================================
procedure TplExcelFormEx2.Button3Click(Sender: TObject);
begin
  xlfExcelApp.ActiveWindow.FreezePanes := False;
end;

//=============================================================================
//  指定行と列でウィンドウ分割
//=============================================================================
procedure TplExcelFormEx2.Button4Click(Sender: TObject);
begin
  xlfExcelApp.ActiveWindow.SplitRow    := 8;
  xlfExcelApp.ActiveWindow.SplitColumn := 4;
end;

//=============================================================================
//  ウィンドウ分割の解除
//=============================================================================
procedure TplExcelFormEx2.Button5Click(Sender: TObject);
begin
  xlfExcelApp.ActiveWindow.SplitRow    := 0;
  xlfExcelApp.ActiveWindow.SplitColumn := 0;
end;

//=============================================================================
//  ウィンドウ枠の固定と分割を解除
//=============================================================================
procedure TplExcelFormEx2.Button6Click(Sender: TObject);
begin
  xlfExcelApp.ActiveWindow.FreezePanes := False;
  xlfExcelApp.ActiveWindow.SplitRow    := 0;
  xlfExcelApp.ActiveWindow.SplitColumn := 0;
end;