
VB初心者です。非常に困っていますのでどうぞ宜しく御願いいたします。
起動中のエクセルをVB6.0からコントロールしたいと思い、以下のコードを書いたのですが、エクセルが複数インスタンスで起動している場合、意図するワークブックが取得できないことに気が付きました。(一番初めに起動したインスタンスのエクセルしか取得できませんでした)
■失敗■
Private Sub Command1_Click()
Set xlApp = GetObject(, "Excel.Application")
xlApp.ActiveWorkbook.Sheets("シート名").Select 'アクティブなWorkBookを取得
Err.Clear
On error resume next
If Err.Number <> 0 Then
MsgBox"エラー"
Else
msgBox"取得成功"
End If
Err.Clear
On error goto 0
End Sub
そこで、全てのエクセルのウィンドーテキストを取得し、そこから意図するエクセルオブジェクトを取得しようと、ネットで調べながら以下のプログラムを試してみました。結果、List1に全てのインスタンスのワークブック名を取得することはできましたが、肝心のGetObjectで「オートメンーションの操作中にファイル名またはクラス名を見つけられませんでした。」というエラーが発生し失敗してしまいました。
■失敗■
'Windowの生成API
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Sub Command1_Click()
'コントロールするエクセルの列挙
Dim lBookNameLenghth As Long
Dim strBuffer As String
Dim lChild As Long
Const lBufferSize As Byte = 255
strBuffer = String(lBufferSize, Chr(0))
List1.Clear
Do
Counter = Counter + 1
lChild = FindWindowEx(0, lChild, "MS-SDIa", vbNullString)
If lChild = False Then Exit Do
lBookNameLenghth = GetWindowText(lChild, strBuffer, lBufferSize)
List1.AddItem Left(strBuffer, lBookNameLenghth)
Loop While lChild
End Sub
Private Sub List1_Click()
If List1.Text <> "" Then
Set xlApp = GetObject(List1.Text, "Excel.Application") '←ここでエラー発生
End If
End Sub
どんな方法でも構いませんので、全てのインスタンスのエクセルを対象としたエクセルオブジェクト取得方法を教えてください。
環境:Windows2000 Professional+VB6.0+Office2000
以上、宜しく御願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんにちは。
こんなややこしいやり方でないといけないんですか?WindowsAPIなんて使わなくても、Excelのを使えば良いんじゃないんですか?
Private Sub Command1_Click()
'コントロールするエクセルの列挙
Dim xlApp As Object
Dim xlBook As Object
Set xlApp = GetObject(, "Excel.Application")
For Each xlBook In xlApp.Workbooks
List1.AddItem xlBook.Name
Next
End Sub
Private Sub List1_Click()
Dim xlApp As Object 'Excel.Application
Dim xlBook As Object 'Excel.Workbook
If List1.Text <> "" Then
Set xlApp = GetObject(, "Excel.Application")
Set xlBook = xlApp.Workbooks.Item(List1.Text)
End If
xlBook.Sheets("Sheet1").Cells(10, 1) = "test"
End Sub
こんだけの単純なもんではダメなんですか?
この回答への補足
ご回答ありがとうございます。
お知らせいただいたソースでテストしてみたのですが駄目でした。
テスト方法は、エクセルアプリケーションを2つ起動し(エクセルのアプリケーションウィンドゥが2つある状態。説明し辛いです・・・)、両方のワークブックが取得できるかを検証したのですが、片方のワークブックしか取得できませんでした。
Microsoft Excel の複数のインスタンスが実行されている場合、GetObject は最初に起動されたインスタンスに接続するようです。
言葉足らずかも知れませんが、よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
このQ&Aを見た人はこんなQ&Aも見ています
-
別インスタンスのエクセルを制御したい
Excel(エクセル)
-
EXCEL VBAで2つEXCELを起動したときのブック名取得の方法
その他(Microsoft Office)
-
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
-
4
VBAで別プロセスのExcelのフルパスの取得
Visual Basic(VBA)
-
5
Application.Runエラー(1004)
Excel(エクセル)
-
6
excelが別プロセスで起動してしまう
その他(Microsoft Office)
-
7
ExcelVBA:すでに開かれているブックの判定方法
Visual Basic(VBA)
-
8
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数の変数を宣言する時、同時...
-
変数名の付け方
-
private static という変数の修飾
-
オブジェクト参照がオブジェク...
-
インスタンス参照でアクセスで...
-
生成したインスタンスを削除す...
-
Form1上にあるTextBox1を Modul...
-
「インスタンス」の意味をわか...
-
javaのクラスの作り方、エラー...
-
変数の参照でエラーが出てしま...
-
VB.NET getとsetの概念がわかり...
-
C#でオブジェクトの有無を取得する
-
VB.netで標準モジュールからフ...
-
newしないインスタンス?実体化...
-
JAVA ArrayListからArrayList...
-
クラス型がインスタンス化され...
-
ポリモフィズムにおける参照型...
-
インスタンスとスレッドの違い
-
定数宣言
-
VB6.0のクラスで、自分自身のイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
private static という変数の修飾
-
変数名の付け方
-
複数の変数を宣言する時、同時...
-
インスタンス参照でアクセスで...
-
C# インスタンスの破棄
-
C#において、同じインスタンス...
-
オブジェクト参照がオブジェク...
-
生成したインスタンスを削除す...
-
VB.NET getとsetの概念がわかり...
-
javaのクラスの作り方、エラー...
-
変数の参照でエラーが出てしま...
-
「インスタンス」の意味をわか...
-
インスタンスを同じ名前で作成...
-
newしないインスタンス?実体化...
-
フォームの存在をチェックする方法
-
String a = "a"; と String b =...
-
C#のメモリ解放についてご教授...
-
vb.netでFAXを送信する方法
-
他のファイルの変数参照
-
Delphiでインスタンスが作成さ...
おすすめ情報