Sheet2を表示するには。

解決


kikyo  2007-08-01 15:14:25  No: 27279  IP: 192.*.*.*

ExcelのSheet2を表示したいのですが

  ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(Null,0));
  Excelworkbook1.Sheets.Add(Null,Null,Null,Null,0);
  ExcelWorksheet1.ConnectTo(ExcelWorkBook1.Worksheets['Sheet2'] as _Worksheet);
  ExcelWorksheet1.Range['A1','A1'].Value := '123';
  ExcelWorksheet1.Range['A1','A1'].Select;

で、「RangeクラスのSelectメソッドが失敗しました」のエラーが出ます。

編集 削除
Ru  2007-08-01 15:55:47  No: 27280  IP: 192.*.*.*

ExcelWorkSheet1にはSheet2が関連付けされていますが
実際にはSheet4が選択されているようです。
予めSheet2を選択するようにすればエラーは出ないとおもいます。
あとExcel自体を表示した方が分かりやすいかと。



  ExcelApplication1.Visible[0] := True;    ※←必要に応じて追加
  ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(Null,0));
  Excelworkbook1.Sheets.Add(Null,Null,Null,Null,0);
  ExcelWorksheet1.ConnectTo(ExcelWorkBook1.Worksheets['Sheet2'] as _Worksheet);
  ExcelWorksheet1.Select;    ※←追加
  ExcelWorksheet1.Range['A1','A1'].Value := '123';
  ExcelWorksheet1.Range['A1','A1'].Select;

編集 削除
kikyo  2007-08-01 16:39:40  No: 27281  IP: 192.*.*.*

Ru様
早速のご教示ありがとうございました。うまくいきました。
省略しましたがVisibuleはTrueにしてありました。
もうひとつお教え願います。

このとき、「Sheet2のA2セルをアクティブ(書き込める状態)にする」

にはどうすれば良いのでしょうか?
よろしくお願いいたします。

編集 削除
Ru  2007-08-01 17:02:44  No: 27282  IP: 192.*.*.*

パスワード等でロックがかかっていない限りは書き込めるはずですが・・・

それともF2キー押した後のセル内でカーソルが点滅している状態のことを言ってますか?その方法は申し訳ないですが私は知らないです。

編集 削除
kikyo  2007-08-01 17:26:28  No: 27283  IP: 192.*.*.*

Ru様
舌足らずで申し訳ありません。
新しくExcelを開いていますのでロックは掛かっておりません。
A2セルに黒枠がかかっている状態にしたいのです。

編集 削除
Ru  2007-08-01 17:52:27  No: 27284  IP: 192.*.*.*

それだったらここ変更するだけでいいと思いますよ。

ExcelWorksheet1.Range['A1','A1'].Select;
  ↓
ExcelWorksheet1.Range['A2','A2'].Select;

編集 削除
kikyo  2007-08-02 09:16:24  No: 27285  IP: 192.*.*.*

Ru様  ありがとうございます。

ご指摘のとおりしていたのですが、フォーカスがExcelではなくFormのほうに
あったので、出来ていないと勘違いしていました。
Excelをクリックすると、A2に黒枠がありました。

因みに、フォーカスをExcelではなくFormのほうに移すにはどうすれば良い
のでしょうか?

編集 削除
Ru  2007-08-02 10:18:53  No: 27286  IP: 192.*.*.*

このあたりが参考になるのかな?
https://www.petitmonte.com/bbs/answers?question_id=4252

編集 削除
kikyo  2007-08-02 11:43:55  No: 27287  IP: 192.*.*.*

Ru様
ありがとうございます。
せっかく教えていただいたのですが、少し難しすぎて。
もっと勉強します。

編集 削除
Ru  2007-08-02 13:19:46  No: 27288  IP: 192.*.*.*

こっちのほうがいいのかな。

参考:ttp://park18.wakwak.com/~greenspace/dev-api/theapi/reference/setwinps.html

    SetWindowPos(Handle,
                 HWND_TOP,
                 Left, Top, Width, Height,
                 SWP_SHOWWINDOW);

編集 削除
kikyo  2007-08-02 17:33:56  No: 27289  IP: 192.*.*.*

Ru様  すみません。質問に大きなミスをしていました。

「フォーカスをExcelではなくFormのほうに移すにはどうすれば良い
のでしょうか?」    ではなく

「フォーカスをFormではなくExcelのほうに移すにはどうすれば良い
のでしょうか?」    です。

SetWindowPosで出来るのならExcelのHandleはどうして取得するのですか?

よろしくお願いいたします。

編集 削除
Ru  2007-08-03 08:20:27  No: 27290  IP: 192.*.*.*

API関数のFindWindow関数ではどうでしょう?
クラス名は『XLMAIN』です。

http://yokohama.cool.ne.jp/chokuto/advanced/function/FindWindow.html

編集 削除
kikyo  2007-08-03 10:10:24  No: 27291  IP: 192.*.*.*

Ru様

ありがとうございます。

FindWindowとSetForegroundWindow関数で上手くいきました。

いつもありがとうございます。

今後ともよろしくお願いいたします。

編集 削除