2016-10-26 8 views
0

ブックが開いているかどうかを確認し、別のブックのデータをコピーして貼り付けるVBAサブがあります。これは、application.ontimeループ内で自動的に行われます。私は通常、それを最小限にしておき、他のものを操作してExcelデータのコピー/貼り付けを時折チェックします。時々Excelは、宛先ブックが開いていることを示すボックスをポップアップし、それを再度開くかどうかを尋ねます。ポップアップしてからブックをチェックするまでの間に、多くのサブランが見逃されました。問題が発生した場所にVBAを使用してExcelプロンプトを自動的に受け付ける方法は?

コード:

If dataset Is Nothing Then 
    Set dataset = Workbooks.Open("C:\Users\Ken\Desktop\Df.xlsx") 
Else 
    Set dataset = Workbooks("Df.xlsx") 
End If 

私はExcelが自動的にこのような状況に対処するために持って何ができますか?

セカンダリ質問:Excelで保存しないで実行したときにワークブックに触れてしまい、最後に保存してから変更があると思う可能性があると思われます。これが理由だと誰かがコメントできますか?

+0

実際にどのような行が表示されるのかを確認できますか?私のExcel 2013では、すでに開いているワークブックを開くようにブックブック変数を設定しようとすると、既に開いているワークブックに設定され、ポップアップがスローされません – user3598756

+0

@ user3598756 Excel 2016でテストしました。 2回はエラーは発生しませんが、コードを呼び出すブックを開こうとすると、ポップアップが表示されます(例えば、 'Workbooks.Open ThisWorkbook.FullName')。 –

+0

@ user3598756それを指摘してくれてありがとう。 –

答えて

2

最初にブックが開いているかどうかを確認します。開いていない場合は開こうとします。これは以下のコードで行うことができます。 link

Sub TestFileOpened() 
    Dim fullPath As String 

    fullPath = "C:\Df.xlsx" 
    ' Test to see if the file is open. 
    If IsFileOpen(fullPath) Then 
     Set dataset = Workbooks("Df.xlsx") 
    Else 
     Set dataset = Workbooks.Open(fullPath) 
    End If 

End Sub 

Function IsFileOpen(filename As String) 
    Dim filenum As Integer, errnum As Integer 

    On Error Resume Next ' Turn error checking off. 
    filenum = FreeFile() ' Get a free file number. 
    ' Attempt to open the file and lock it. 
    Open filename For Input Lock Read As #filenum 
    Close filenum   ' Close the file. 
    errnum = Err   ' Save the error number that occurred. 
    On Error GoTo 0  ' Turn error checking back on. 

    ' Check to see which error occurred. 
    Select Case errnum 

     ' No error occurred. 
     ' File is NOT already open by another user. 
     Case 0 
     IsFileOpen = False 

     ' Error number for "Permission Denied." 
     ' File is already opened by another user. 
     Case 70 
      IsFileOpen = True 

     ' Another error occurred. 
     Case Else 
      Error errnum 
    End Select 

End Function 
+0

素敵な、ありがとう! – A1122

関連する問題