この質問は基本的にすべてのExcelブックのすべてのブックをループすることに関するものです。複数のExcelインスタンスが実行されているときにすべてのブック名を取得
答えて
あなたが直面している主な問題は、あなたが遭遇したプロセスのいずれも使用していないということです。したがって、あなたはそのようなものを手に入れません。プロセスのループ内で、ExcelApplication
という新しいインスタンスを作成し、Workbooks
をループしてみます。これを行うと、デフォルトであなただけの Workbook
を取得し、また、なぜあなたがしか Workbook
が表示されますので、なぜ、唯一、その時点で存在しています。
(テスト済み&をしようとしました)ソリューション
あなたが必要なものを取得するために呼び出すのWindows APIを検討する必要があります。それらのいくつかは以下のとおりです。
- GetDesktopWindow()
- EnumChildWindows()
- getClassNameメソッド()
- EnumWindowsProc()
-
Imports Microsoft.Office.Interop Imports System.Runtime.InteropServices Public Class Form1 Private Declare Function GetDesktopWindow Lib "user32"() As Integer Private Declare Function EnumChildWindows Lib "user32.dll" (ByVal WindowHandle As IntPtr, ByVal Callback As EnumWindowsProc, ByVal lParam As IntPtr) As Boolean Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" (ByVal hWnd As IntPtr, ByVal lpClassName As String, ByVal nMaxCount As Integer) As Integer Private Delegate Function EnumWindowsProc(ByVal hwnd As IntPtr, ByVal lParam As Int32) As Boolean Private Declare Function AccessibleObjectFromWindow Lib "oleacc" (ByVal Hwnd As Int32, ByVal dwId As Int32, ByRef riid As Guid, <MarshalAs(UnmanagedType.IUnknown)> ByRef ppvObject As Object) As Int32 Private Const OBJID_NATIVE = &HFFFFFFF0 'Required to show the workbooks. Used in function to add to. Private lstWorkBooks As New List(Of String) Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click lstWorkBooks.Clear() GetExcelOpenWorkBooks() End Sub Private Sub GetExcelOpenWorkBooks() Try 'Get handle to desktop Dim WindowHandle As IntPtr = GetDesktopWindow() 'Enumerate through the windows (objects) that are open EnumChildWindows(WindowHandle, AddressOf GetExcelWindows, 0) 'List the workbooks out if we have something If lstWorkBooks.Count > 0 Then MsgBox(String.Join(Environment.NewLine, lstWorkBooks)) Catch ex As Exception End Try End Sub Public Function GetExcelWindows(ByVal hwnd As IntPtr, ByVal lParam As Int32) As Boolean Dim Ret As Integer = 0 Dim className As String = Space(255) 'Return the string with some padding... Ret = GetClassName(hwnd, className, 255) className = className.Substring(0, Ret) If className = "EXCEL7" Then Dim ExcelApplication As Excel.Application Dim ExcelObject As Object = Nothing Dim IDispatch As Guid AccessibleObjectFromWindow(hwnd, OBJID_NATIVE, IDispatch, ExcelObject) 'Did we get anything? If ExcelObject IsNot Nothing Then ExcelApplication = ExcelObject.Application 'Make sure we have the instance... If ExcelApplication IsNot Nothing Then 'Go through the workbooks... For Each wrk As Excel.Workbook In ExcelApplication.Workbooks 'If workbook ins't in the list then add it... If Not lstWorkBooks.Contains(wrk.Name) Then lstWorkBooks.Add(wrk.Name) End If Next End If End If End If Return True End Function End Class
真剣に、私はAPIなしでvb.netコードを好む。しかし、これが不可能なら、私はAPIソリューションを受け入れます。何が問題ですか? *** ***の答えはあなたの問題です。 「私は簡単なコードが好きです」あなたが上手くいっていると思うなら、それは簡単だと思います。 – Codexer
@Codexer彼はあなたが彼の問題を解決できなかったことを感謝しているので、答えを削除してください。 – Sorceri
@Markowitzありがとう、答えを受け入れる方法はここで動作します。それが助けられたら、投票して答えを受け入れることが重要です。これは、同じ問題を抱えているかもしれない他の人達に役立ちます。また、APIを使用しないで、おそらくアクティブなウィンドウをループしてそのオブジェクトを取得することは不可能です。私が知っている唯一の方法は私が投稿したものです – Codexer
- 1. 複数の同時実行インスタンスを実行しているときにwgetがダウンロードデータを取得するのをどうやって修正しますか?
- 2. Djangoインスタンスが実行されているポートを調べます。
- 3. Android - このサービスの複数のインスタンスが実行されている理由
- 4. Excelが実行されているか調べる
- 5. 名前が重複しているときにExcelワークブックで名前付き範囲を文字列で取得
- 6. 複数のaws ec2インスタンスで実行されているサービスを見つける
- 7. 他のスレッドが実行されていないときに複数のスレッドを実行しますか?
- 8. プロジェクトを実行しているときに、すべてのform_loadコードが実行されない
- 9. すべてのViewModelインスタンスで実行されているデータテンプレートでコマンドがバインドされています
- 10. すべてのテーブル名と各テーブルのすべての列名と行名を取得する方法は?
- 11. 複数のメソッドを実行しているときにJerseyテストアドレスが既に使用されています
- 12. 特定のプロセスが実行されているプロセッサの数を取得
- 13. Python:実行時にインスタンス名を取得する方法は?
- 14. レールのイニシャライザがレールで複数回実行されている
- 15. プロセス内で実行されているすべてのスレッドに対してstacktraceを取得する方法は?
- 16. 1つのインスタンスが外部プログラムを実行しているとき、Rの複数のインスタンスはどれくらい安定していますか?
- 17. Log4net Adonet Appender:アプリケーションの複数のインスタンスが実行されたときにデータが混乱する
- 18. .ajaxStopコールバック関数が複数回実行されています
- 19. ExcelがアクティブなウィンドウのときにExcelがゆっくり実行されています
- 20. 複数のスクリプトタグが重複して実行されますか?
- 21. マシン上で実行されているすべてのwcfサービスのリストを取得するには?
- 22. 並列で実行されている複数のスレッドで同じインスタンスを使用できますか?
- 23. .net throughすべてのデータを1つのExcelブックから別のExcelブックにコピー
- 24. PHPでスクリプトが実行されているディレクトリの親フォルダの名前を取得するには?
- 25. Swingworkerのインスタンスが同時に実行されていません
- 26. インスタンス変数がPHPクラスで参照されているときにメソッドを実行しますか?
- 27. Excelワークシートがロードされたときに実行するVBAコード
- 28. SXSSFWorkbookを使用して複数のシートを含むExcelブックを作成する
- 29. シートがクリックされたときにExcelのVBA機能が実行される
- 30. DOMが表示されているときにjQuery関数を実行する
それぞれを開くときに配列を作成し、ワークブックを保存しますか?また、ループの代わりに後で検索を高速化するために辞書でキーを設定することもできます。 – findwindow
これは役に立ちますか? http://www.ozgrid.com/forum/showthread.php?t=182853 –
あなたはただ一つしか手に入れません...あなたは 'Excel'プロセスをループしていますが、***では何もしません。彼らはかつて見つかった。あなたは 'ExcelApplication'の新しいオブジェクトを作成し、デフォルトでは** 1 **ワークブックです。これはあなたがたった1本の本を見た理由です... – Codexer