2017-08-18 18 views
0

Outlook VBAを使用してExcelを開く方法を見つけようとしていますが、まだ開いていない場合にのみ表示します。私は、Excelを開き、変更して閉じたコードをインターネット上で見つけることができましたが、Excelワークブックがすでに開いている場合はうまく動作しません(変更は適用されますが、それは単にグレーのインテリアを残すだけでなく、時にはエクスプローラにも表示されず、タスクマネージャーから閉じなければなりません)。 誰かがコードの大部分を説明できるかどうかを大いに感謝します。まだ開いていないExcelを開く方法

Public xlApp As Object 
Public xlWB As Object 
Public xlSheet As Object 
Sub ExportToExcel() 
    Dim enviro As String 
    Dim strPath As String 
    'Get Excel set up 
enviro = CStr(Environ("USERPROFILE")) 
'the path of the workbook 
strPath = enviro & "\Documents\test2.xlsx" 
    On Error Resume Next 
    Set xlApp = GetObject(, "Excel.Application") 
    If Err <> 0 Then 
     Application.StatusBar = "Please wait while Excel source is opened ... " 
     Set xlApp = CreateObject("Excel.Application") 
     bXStarted = True 
    End If 
    On Error GoTo 0 
    'Open the workbook to input the data 
    Set xlWB = xlApp.Workbooks.Open(strPath) 
    Set xlSheet = xlWB.Sheets("Sheet1") 
    ' Process the message record 
    On Error Resume Next 
    xlWB.Close 1 
    If bXStarted Then 
     xlApp.Quit 
    End If 
End Sub 

私はxlWbxlSheetオブジェクトが何をすべきか知っている、そして、それらがどのように宣言されている、と私はまたenviron機能とstrPath文字列は何をすべきかを理解し、私たちはbXStartedブール値を必要とする理由私はundestandしません何がSet xlApp = GetObjectであるのか、なぜApplication.StatusBarメッセージが表示されないのですか。GetObjectCreateObjectの違いと、なぜ多くのエラーテストが必要なのでしょうか。 ありがとうございます。

答えて

1

getオブジェクトとcreateオブジェクトの違いはタイトルにあり、開いた場合はexcel.application、エラーの場合はerr<>0となり、excel.applicationが作成されます。ファイルが保存されていない可能性がありますが、保存するように指示しているので、error resume nextはスキップしていますので、saveasメッセージが表示されると思います。 .closeの前に保存してみてくださいon error resume nextを削除すると、エラーはスキップされずに表示されます。

Sub explaination() 

Dim blnDidICreateExcel As Boolean   ' Please read MSDN on boolean 
Dim objToHoldExcelCreatedOrNot As Object ' Please read MSDN on objects create/get 

' Does the user have Excel open, if i try to get it, then there will be an error logically if not 
Set objToHoldExcelCreatedOrNot = GetObject(, "Excel.Application") 

' Was there an error 
If Err <> 0 Then 
    ' There was, so i need to create one 
    Set objToHoldExcelCreatedOrNot = CreateObject("Excel.Application") 
    blnDidICreateExcel = True  ' Yes, i created it 
End If 

' Do the neccessary 

' CLose the workbook 

' Did i create this Excel, if so tidy up 

If blnDidICreateExcel Then objToHoldExcelCreatedOrNot.Quit 

End Sub 
+0

重要なことは、スクリプトが変更を保存していることです。とにかく、 'xlWB.Save 1'を' xlWB.Close 1'の前に書くことをお勧めしますか? – NAlexP

+0

はオンエラーを取り出し、エラーが最初に何であるかを確認します。 –

+0

コードからの考え方は、既に開いているワークブックを閉じるのではなく、閉じてからXStartedチェックを削除して終了するようにしたい場合に便利です。 –

関連する問題