No.3ベストアンサー
- 回答日時:
#2>ファイル名の一覧の取り方
コレクションですのでforeach が使えます。
(コレクションというよりIEnumerableを実装していれば使える)
foreach(Excel.Workbook wb in excel.Workbooks){
MessageBox.Show(wb.Name);//実際は、リストボックスなんかに放り込む
}
(既におわかりのように、)また、配列としてもアクセスできるので
次のようにもできます。
(この方がわかりやすいですかね。後でそのままi も使えそう?)
int len=excel.Workbooks.Count;
for(int i=1;i<=len;i++){
//MessageBox.Show(excel.Workbooks.get_Item(i).Name);
MessageBox.Show(excel.Workbooks[i].Name);
}
この回答への補足
ご指南ありがとうございます。
ファイル名の一覧取れました!
ただ、一部ファイル名が表示されないEXCELファイルが
ありました。昨日の「~.get_Item("~.xls").~CLOSE」で、インデックスが無効になるのと同じ
原因だと思います。
以下の二つのケースを行うと、片方のケースのファイル名が取れないです。先におこなったケースの方のファイル名が取得できます。
EXCELのプロセスが二つあるようです。
・WindowsでEXCEL.exeを起動し、そのアクティブ状態 でファイル作成、又はファイルオープンをする。
・EXCEL.exeを起動せず、又は非アクティブ状態で既存 のファイルをオープンする。
EXCELのウィンドウメニューの最下部のファイル名一覧が、二つのケースで分かれている。
度々、すみません。よろしくお願い致します。
No.4
- 回答日時:
#3>EXCELのプロセスが二つあるようです。
GetActiveObject は、1つのプロセスを捕まえるものです。(たぶん)
いわゆるApplication オブジェクトですね。
当然別プロセスは別Application オブジェクトに含まれているわけで、
今捕まえているApplication オブジェクトから別のApplication オブジェクトの内容にはアクセスできないように思います。
どっちかというと、エクセルを複数(別プロセスで)起動して使うのは競合が起こっておかしな動作が起こることもありますから、あんまり良いことではないですね。
起動しているプロセスの名前を調べて、excel が複数起動していることを調べることもできるかもしれませんが、だからといってプログラムから勝手に片方を終了させるワケにもいかないので、そういう使い方をしないでね♪とかお知らせするとか・
あと、もしかしたら別要因かも知れませんが、
状況がわからない(こちらでは調べられない)ので、なんとも言えません。
MADNのサイトに以下の様なコメントがありました。
運用とかでEXCELが複数起動しないようにするしかないようですね。
「複数のインスタンス Excel(Excel.exe)が同時に実行できます。特定のサーバーでの GetActiveObject は、期待しなかったインスタンスを返すことがあります。
通常横に最初に登録されるインスタンスが GetActiveObject に返されるインスタンスです。」
迅速な回答ありがとうございました。
いろいろ、手助けして頂き助かりました。
また、何かありましらその節はどうぞよろしくお願いいたします。
No.2
- 回答日時:
#1>インデックスが無効となるエラーになりました。
Visual Studio.NET 2003(C#.NET2003)
Office2002(XP)
xpsp2
で試験しましたが、一応問題なく動作しています。(文字列を与えても大丈夫)
たぶん、ファイル名が(細部で)違うのではないかと思います。
ファイル名の一覧を取りだして、選ばせるのもいいかと思いますが・
この回答への補足
回答ありがとうございます。
文字列で正常に動作しました。
大変、失礼しました。(わざわざご確認までして頂いて)非常に助かりました。感謝です。
存在してない、オブジェクトitemを取得しようすると
エラーになりますね。
ご指摘のあったファイル名の一覧でチェックをして
から、存在していたらCloseなどをした方がいいですね。
ファイル名の一覧の取り方は、どのような方法
がありますでしょうか?
いろいろと手解きして頂き、ご面倒をおかけします。
No.1
- 回答日時:
参照設定で、
envdte とエクセル(たぶんエクセルは、設定済みですね)を参照設定して
以下のようにすると、現在開いているエクセルを捕まえられます。
以下の例は、開いているブックの内"A.xls" を閉じるサンプル
VBAと違ってClose の引数を省略できないことに注意
----------------------------------------------------------------
Excel.Application excel;
excel = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.application");
excel.Workbooks.get_Item("A.xls").Close(true,null,false);//保存して閉じる
この回答への補足
早速の回答ありがとうございます。
ご指摘のあったソースで実行したところ、
インデックスが無効となるエラーになりました。
get_ItemにはObject indexを指定しなくては
いけないと思い、excel.Workbooks.get_Item(1)~として、実行したら、あるひとつのEXCELファイルが閉じました。
ただ、インデックスなのでどの~.xlsファイルを閉じるというのが出来ない状況です。
良い方法がありますでしょうか?
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelのウィンドウが少し小さく、ズレて立ち上がります 1 2022/06/27 16:25
- Visual Basic(VBA) vba メモリ節約 3 2022/09/16 21:45
- その他(クラウドサービス・オンラインストレージ) Onedriveで実現したい事。2台のPC間で。 2 2023/04/10 20:42
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Windows 7 Media Playerが開かない。ファイルアイコンを右クリックしても「プロパティ」が表示されない。 2 2023/02/05 14:45
- その他(Microsoft Office) office2010とoffice365の共存でoffice365を優先で起草させたい 3 2023/01/24 10:47
- Windows 10 バッチファイルでのエクスプローラー終了 1 2022/05/30 14:32
- Visual Basic(VBA) VBS Bookを閉じるコード 1 2023/02/16 17:31
- Excel(エクセル) Excel起動時にエラーダイアログが表示される 3 2022/07/28 19:52
- その他(パソコン・スマホ・電化製品) CMD等でPC操作(excel開く等)を自動化させたい 1 2023/03/15 09:53
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
「エクセルファイルが開いていたら開かない」としたい
Visual Basic(VBA)
-
EXCELをバッチコマンドで起動したとき、引数を渡せますか
その他(プログラミング・Web制作)
-
Excelのプロセスが消えません
Excel(エクセル)
-
-
4
vb.netでEXCEL起動がうまくできないのですが原因は何が考えられ
Visual Basic(VBA)
-
5
ExcelVBAにてアプリをタスクマネージャーから強制終了させたいのですが
Visual Basic(VBA)
-
6
フォームの再読み込み
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
タスクマネージャーのプロセス...
-
C#でのbatファイル実行結果取得
-
explorer.exeが異様にメモリを食う
-
ウィンドウのタイトルからプロ...
-
VBAで別プロセスのExcelのフル...
-
ノートンのパフォーマンス警告...
-
共有メモリの使い方について
-
別のプロセスの関数を呼び出す...
-
win10でpythonのプロセス名を変...
-
スペシャルねこまんま57号について
-
execvpでのcdコマンドについて。
-
プロセスのアタッチ・デタッチ...
-
ADOでアクセスのレコードに...
-
非表示になったエクセルは?
-
別プロセスをの実行パスを取得...
-
特定ユーザーのプロセス情報を...
-
応答なしアプリの強制終了方法
-
WebBrowserでPDF表示でのトラブル
-
プロセスIDからウィンドウハ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
explorer.exeが異様にメモリを食う
-
なぜ女性は男性が忘れたことを...
-
タスクマネージャーのプロセス...
-
プロセスのアタッチ・デタッチ...
-
非表示になったエクセルは?
-
Process.Startの戻り値を後で取得
-
C#でのbatファイル実行結果取得
-
プロセスIDからウィンドウハ...
-
c言語でプロセスIDを調べたい
-
Linuxでのスレッド間メッセージ...
-
プロセスIDの取得方法について
-
ADOでアクセスのレコードに...
-
怪しいプロセス教えてください。
-
vb.netでEXCEL起動がうまくでき...
-
別のプロセスの関数を呼び出す...
-
C++のプログラムをバックグラウ...
-
Visual C++からpingを実行して...
-
VBS(WSH)で開いたIEのウィンド...
-
IISがフリーズ
おすすめ情報