■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#28152-0
アクセスのVBAからエクセルの操作について教えてください
森田と申します。
初めて質問させて頂きます。よろしくお願い致します。

質問したい内容は:(やろうとしていることは)

データベースの「アクセス」(OFFICE-2000)の集計結果を「アクセス」のVBAを使って、
起動してないエクセルのファイルを開き、書き込んで閉じるという事をしたいのですが・・・。
以下の2点が解りません。

1.アクセスのVBAからエクセルを開くとフォーカスがエクセルに行ってしまい、
  手動でアクセスに戻らないと処理が進みません。どのように、エクセルを開いた後に
  アクセスにフォーカスを戻すのでしょうか?

2.エクセルを閉じるときに「ファイルは更新されてます。上書きしますか?」という
  メッセージを出さずにそのまま閉じる(更新して閉じる)にはどうしたら、いいのでしょうか?

どなたか教えて頂けませんでしょうか?

それからこの掲示版で、こんな質問形式でよろしいのでしょうか?
以下に省略したソースを書きます。

Sub excel_process()As Boolean

    Dim xlApp As Object
    Dim xlBook As Object
    Dim MyXL As Object
    Dim form_str As String
    
    '///// Excel起動(すでに起動されているときはそれを使う) /////
    On Error Resume Next
    Set xlApp = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then     'Excelが起動されていない
        Set xlApp = CreateObject("Excel.Application")
    End If
    On Error GoTo 0
    
    '///// 指定したBOOKを開く ///// PCの中の*.XL*を探します。
    MsgBox "統計のEXCELのファイルを検索します。", vbExclamation, "探してちょ。"
    Do
        DoCmd.OpenForm "ファイル探索", , , , , acDialog
        If IsOpenedForm("ファイル探索") = False Then
            If MsgBox("中止しますか?", vbExclamation + vbYesNo + vbDefaultButton1, _
                            "どうする?") = vbYes Then
                Exit Sub
            End If
        Else
            Set xlBook = GetObject(Forms![ファイル探索]![SELECTED_FILE_NAME])
            DoCmd.Close acForm, "ファイル探索"
            Exit Do
        End If
    Loop
 
    
    '///// 表示するSheet名をセット //////
    Set MyXL = xlBook.Worksheets(1)
    
    '/////// Excelを見えるように //////
    xlApp.Visible = True           *****************
    xlApp.Parent.Windows(1).Visible = True   ->ここでフォーカスが戻ってきません−(1)
                        *****************
    
    '/////// セルにデータ処理をかける //////
    '----------------  EXCEL に対して処理をおこなう -----------------------------

    中略

    '----------------  EXCEL に対しての処理ここまで -----------------------------
        
           
    
    '//// Book保存確認をしないようにする /////
    xlApp.DisplayAlerts = False        ***************** 
      ->「ファイルは更新されてます。上書きしますか?」って出ないようにして、−(2)
     そのまま、上書き更新する方法が解りません。
                        ******************
   
    
    
    '///// Excelの終了 /////
    xlApp.Quit
    
    Set MyXL = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing

End Sub

どうぞよろしくお願い致します。
#28156-0
RE#28152:アクセスのVBAからエクセルの操作について教えてください
# 森田さん、「こんなことできます」掲示板の投稿を削除してください。

> 1.アクセスのVBAからエクセルを開くとフォーカスがエクセルに行ってしまい、
>   手動でアクセスに戻らないと処理が進みません。どのように、エクセルを開いた後に
>   アクセスにフォーカスを戻すのでしょうか?

フォーカスが行かないようにすればよいです。
つまり、ExcelのVisibleをFalseにします。
ウィンドウのVisibleはTrueです。

また、「指定したブックを開く」方法は、GetObjectでなく
xlApp.Workbooks.Open ファイル名
を使いましょう。(上でせっかくxlAppを取得している意味がありません)
この場合、既に開いている場合はエラーになるので、Workbooksコレクションをループして
開いているブックの中に目的のファイル名と同じのがあったらOpenしないようにします。

もう一つ、MyXLがシートというのはわかりにくいですね。せっかくxlApp,xlBookというように
統一しているのですから、xlSheetの方が良いのでは?

> 2.エクセルを閉じるときに「ファイルは更新されてます。上書きしますか?」という
>   メッセージを出さずにそのまま閉じる(更新して閉じる)にはどうしたら、いいのでしょうか?

まず、Saveしましょう。
そのあと、Quitすればメッセージは出ないはずです。

ところで、Sub excel_process()As Boolean ってエラー出ません? ほんとはFunction?
#28166-0
RE#28156:アクセスのVBAからエクセルの操作について教えてください
<みゃお>さん、レスありがとうございます。

> # 森田さん、「こんなことできます」掲示板の投稿を削除してください。
>
失礼しました。
「こんなことできます」掲示板のほうでは、そうか、「場所が違っていたんだ」って
思っただけで、「削除して下さい」と書いてあるにもかかわらず気がつきませんでした。
すみませんでした。


> フォーカスが行かないようにすればよいです。
> つまり、ExcelのVisibleをFalseにします。
> ウィンドウのVisibleはTrueです。
> 
> また、「指定したブックを開く」方法は、GetObjectでなく
> xlApp.Workbooks.Open ファイル名
> を使いましょう。(上でせっかくxlAppを取得している意味がありません)
> この場合、既に開いている場合はエラーになるので、Workbooksコレクションをループして
> 開いているブックの中に目的のファイル名と同じのがあったらOpenしないようにします。
> 
なるほど・・・。

> もう一つ、MyXLがシートというのはわかりにくいですね。せっかくxlApp,xlBookというように
> 統一しているのですから、xlSheetの方が良いのでは?
> 
なるほど・・・って、実は良く理解できません。「シート」?と「xlSheet」?・・・?。
これから、勉強(調べて)行きたいとおもいます。
実は、エクセルが使ったことはあったのですが、表計算ぐらいしか使ったことが無く
深いこと、詳しいことはあまり良く解りません。良く解っていないで質問をして、
申し訳なく思っております。とにかく急いでこの処理を作れと職場から言われてまして・・・。
ここだけでなく、色々なところでご迷惑をおかけしました。
でも、教えていただいたことでなんとかできそうです。
本当に有り難うございました。

> ところで、Sub excel_process()As Boolean ってエラー出ません? ほんとはFunction?
>
あっ本当だ。元は、
Sub excel_process(胸部定健間接() As Integer,・・・ , kasumi_flag As Boolean)を
コピーして、張り付け、編集したときに間違いました。
本当はSubです。

いろいろ有り難うございました。
これからも何かありましたら、よろしくお願いします。
ところで、こういうお礼も時間がたったら、削除した方がいいのですか?
このページと関連する記事:
#4033-2VBからエクセルの操作する方法2002-01-18(金) 17:35
#25166-0RE#25163:VBからのExcel操作2000-07-07(金) 12:38
#45754-0VBによるエクセルのシートのコピー方法2001-08-08(水) 17:41
#2771-2EXCELLに出力2001-12-13(木) 04:53
#31138-0外部プログラム起動2000-10-04(水) 13:23
#27973-0Bookを終了するとExcelごと終了してしまう。2000-08-15(火) 16:40
#4234-2エクセルファイルからPDFファイルを作成する2002-01-23(水) 12:27
#10311-0VBからのEXCEL使用1999-11-25(木) 09:59
#1447-32つのブックを開いてシートをコピーして終了2002-07-06(土) 18:04
#44654-0VBから起動したExcelが残る。2001-07-03(火) 17:20
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)