ウィンドウ枠固定位置


algo  2004-07-01 20:42:13  No: 9720

はじめまして。
TExcelApplicationを使用しウィンドウ枠固定位置を調べようとしたのですが
SplitColumn,SplitRowwBufの値がどうしても0になります。

SplitColumn,SplitRowwBufを取得する方法を教えて頂けないでしょうか。
宜しくお願いします。

      try
        ExcelApplication1.Connect;

        ExcelApplication1.Workbooks.Open(FileName, EmptyParam,
               EmptyParam,EmptyParam,EmptyParam,EmptyParam,
               EmptyParam,EmptyParam,EmptyParam,EmptyParam,
               EmptyParam,EmptyParam,EmptyParam,lcID);

        {開いているブックをExcleWorkbook1に接続}
        ExcelWorkbook1.ConnectTo(ExcelApplication1.
                                 ActiveWorkbook as _workbook);

        (ExcelWorkbook1.Sheets.Item['Sheet1'] As ExcelWorksheet).Select(EmptyParam, 0);

        if ExcelApplication1.ActiveWindow.FreezePanes then begin
          // 現在コメント
{
          ExcelApplication1.ActiveWindow.FreezePanes := False;
          ExcelApplication1.ActiveWindow.FreezePanes := True;
}

          // Debug
          ShowMessage('ExcelApplication1.ActiveWindow.FreezePanes = True'+Chr($A)+
                     'Cloum:'+IntToStr(ExcelApplication1.ActiveWindow.SplitColumn) + Chr($A) +
                     'Row:'+IntToStr(ExcelApplication1.ActiveWindow.SplitRowwBuf) );
        end else begin
          // Debug
          ShowMessage('ExcelApplication1.ActiveWindow.FreezePanes = False'+Chr($A)+
                     'Cloum:'+IntToStr(ExcelApplication1.ActiveWindow.SplitColumn) + Chr($A) +
                     'Row:'+IntToStr(ExcelApplication1.ActiveWindow.SplitRowwBuf) );
        end;
      finally
        //Excel終了
        ExcelWorksheet1.Disconnect;
        ExcelWorkbook1.Close;
        ExcelWorkbook1.Disconnect;
        ExcelApplication1.Quit;
        ExcelApplication1.Disconnect;
      end;


KAMIYA  2004-07-08 18:27:11  No: 9721

私自身Delphi環境がないので、
他人に検証していただいた結果です。
以下抜粋。

////////////////////////////////
テスト環境
Delphi7pro  &  Excel2002  です。

Workbooks.Openの引数の数が提示されたコードと違かったので環境が違うかもしれません。  

正しいやり方ではないかもしれませんが、SplitRowとSplitColumnの値は取れたよ。
SplitRowwBufはポインタかなんか?宣言がついてなかったので、SplitRowプロパティにしてテストしました。
ExcelApplication1をそのままで実行すると、
下位オブジェクトにアクセスできないみたいなんで、Variantt型の変数に入れて実行したら一応は値は返ってきました。
--------------------------------------
var
myXLapp: Variant;

〜〜〜以下略〜〜〜

myXLapp := ExcelApplication1.Application;
if myXLapp.ActiveWindow.FreezePanes then
begin
ShowMessage('ExcelApplication1.ActiveWindow.FreezePanes = True'+Chr($A)+
'Cloum:'+IntToStr(myXLapp.ActiveWindow.SplitColumn) + Chr($A) +
'Row:'+IntToStr(myXLapp.ActiveWindow.SplitRow) );
end
else
begin
ShowMessage('ExcelApplication1.ActiveWindow.FreezePanes = False'+Chr($A)+
'Cloum:'+IntToStr(myXLapp.ActiveWindow.SplitColumn) + Chr($A) +
'Row:'+IntToStr(myXLapp.ActiveWindow.SplitRow) );
end;
---------------------------------------
こんな感じで。

Delphi使いのようですから、
ExcelApplication1をVariant型の変数にいれればいいみたいと説明すればわかると思います。
でも俺のスキルですぐ解決するわけないので、なんか落とし穴があるかもしれません。その点だけ付け加えておいてください。

////////////////////////////////
ご参考まで。


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

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






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