Excelの各シート名を得るには


komin  2007-05-21 15:15:42  No: 26197  IP: 192.*.*.*

連続質問のような形になってしまい申し訳ありません。
  開いたExcelの各ワークシートの名前というか下にあるタブについている文字列を得るにはどうしたらよいのでしょうか?

編集 削除
HOta  2007-05-21 15:19:27  No: 26198  IP: 192.*.*.*

ExcelApplication1.Sheets[1].SheetName
でいけませんか?

編集 削除
komin  2007-05-21 15:28:14  No: 26199  IP: 192.*.*.*

重ね重ねありがとうございます。

ExcelApplication1.Sheets[1].SheetName

「Sheetname」が未定義の識別子になってしまいます。

編集 削除
komin  2007-05-21 15:37:37  No: 26200  IP: 192.*.*.*

併せて質問なのですが,開いたブックの特定のシートを指定するにはどうしたらよいでしょうか?

編集 削除
とかとか  2007-05-21 15:51:33  No: 26201  IP: 192.*.*.*

SheetName ⇒ Name とか?

ExcelWorkSheet1.ConnectTo(ExcelApplication1.Sheets[n] as _WorkSheet);とか?

編集 削除
komin  2007-05-21 15:58:53  No: 26202  IP: 192.*.*.*

> SheetName ⇒ Name とか?
  NameとかCaptionとかTitleとか心当たりは一通り試してみましたがだめでした。

> ExcelWorkSheet1.ConnectTo(ExcelApplication1.Sheets[n] as _WorkSheet);とか?

  n=1とすると,確かに1枚目のワークシートを指すようになりますが,この時にExcel側で該当ワークシートを前面にしたいのです。

編集 削除
Ru  2007-05-21 16:05:27  No: 26203  IP: 192.*.*.*

その後  ExcelWorkSheet1.Select  で無理ですか?

あとExcelのVBAも参考になりますよ。

編集 削除
komin  2007-05-21 16:11:25  No: 26204  IP: 192.*.*.*

Ruさん,ありがとうございました。それで大丈夫でした。

編集 削除
komin  2007-05-21 16:43:33  No: 26205  IP: 192.*.*.*

Set newSheet = Sheets.Add(Type:=xlWorksheet)
For i = 1 To Sheets.Count
    newSheet.Cells(i, 1).Value = Sheets(i).Name
Next i

  という例がVBAのヘルプで見つかったので、
    for i := 1 to  ExcelApplication1.Sheets.Count do begin
      Combobox1.Items.Add(Excelapplication1.Sheets[i].Name;
    end;

  というコードを書いてみたのですが,やはりnameプロパティが未定義の識別子になってしまいます。うーん、困った…

編集 削除
Ru  2007-05-21 17:27:27  No: 26206  IP: 192.*.*.*

ExcelApplication1 ではなく ExcelWorkSheet1 からだと取得できません?

ExcelWorkSheet1.Name

編集 削除
HOta  2007-05-21 17:43:59  No: 26207  IP: 192.*.*.*

失礼。Nameですね。
Ruさんもかいていますが、ExcelApplication1 ではなく
ExcelWorkbook1.Sheets[1].name
ですね。
シートを指定するのは、VBAのマクロを参考にして、
名前か番号で指定しますできます。
ExcelWorkbook1.Sheets[1]
ExcelWorkbook1.Sheets[wName]

編集 削除
komin  2007-05-22 08:39:51  No: 26208  IP: 192.*.*.*

こんなコードの書き換えましたが
    Combobox1.Items.Clear;
    for i := 1 to  ExcelApplication1.Sheets.Count do begin
      Combobox1.Items.Add(ExcelWorkbook1.Sheets[1].Name);
    end;
やはりnameプロパティが未定義になってしまいました。

編集 削除
Ru  2007-05-22 11:08:43  No: 26209  IP: 192.*.*.*

Combobox1.Items.Clear;
for i := 1 to  ExcelApplication1.Sheets.Count do begin
  ExcelWorkSheet1.ConnectTo(ExcelApplication1.Sheets[i] as _WorkSheet);
  Combobox1.Items.Add(ExcelWorkSheet1.Name);
end;


未検証です。
Excelへのアプローチの方法が私とは違うので自信なし・・・
as演算子でクラスを変更すれば認識するかな??
(_WorkSheet  ではなく  TExcelWorksheet  かも)

編集 削除
Mr.XRAY  URL  2007-05-22 19:13:19  No: 26210  IP: 192.*.*.*

開発環境(Windows + Delphi + Excelのバージョン)も何も書いてないのですが,

以下は, WindowsXP(SP2) + Delphi7 + Excel200で動作確認しています.
リストボックスに現在のExceleのシード名を表示する例です.
[Servers]タブのTExcelApplication 関係を使用しているものと仮定(間違いないでしょう)
します.

//リストボックスにシート名一覧を作成
ListBox1.Clear;
for i:=1 to ExcelWorkBook1.Sheets.Count do begin
  ListBox1.Items.Add((ExcelWorkbook1.Sheets[i] as ExcelWorksheet).Name);
end;

あるいは,Sh : OleVariant; と定義しておいて

ListBox1.Clear;
for i:=1 to ExcelWorkBook1.Sheets.Count do begin
  Sh:=ExcelWorkbook1.Sheets[i];
  ListBox1.Items.Add(Sh.Name);
end;

編集 削除
Mr.XRAY  URL  2007-05-22 19:19:46  No: 26211  IP: 192.*.*.*

ちなみに,OleObjectの場合には以下のコードで取得できます.
動作確認は前と同じです.

ListBox1.Items.Clear;
for i:=1 to WorkBook.Sheets.Count do begin
  ListBox1.Items.Add(WorkBook.Sheets[i].Name);
end;

編集 削除
komin  2007-05-23 18:06:30  No: 26212  IP: 192.*.*.*

Ruさん,Mr.XRAYさん、ありがとうございました。
これで取得できました。何分この手のプログラムは初めてなもので、わからない事が多いです。また何かありましたらよろしくお願いいたします。

編集 削除