2013-05-29 18 views
5

Benim aşağıda kodu ile sorunlar yaşıyorum: Gördüğünüz gibiYeniden açmak yerine bir çalışma kitabını "güncelleştirmek" (VBA makrolarını kullanarak)?

Private Sub Worksheet_BeforeDoubleClick(ByVal... 
Application.ScreenUpdating = False 
Set wbks = Workbooks.Open("\\whatever\whatever.xlsx")   
wbks.Sheets("Control").Activate 
ActiveSheet.Range("A3").Select 
Application.ScreenUpdating = True 
... 

, ben belirli bir hücreyi çift tıklayarak bir çalışma kitabı her şey açılır. sorun: Ben çift ikinci kez sonra rahatsız edici mesaj alıyorum tıklatın: " 'Filename.xlsx' zaten açık Yeniden Açılması Eğer atılmalıdır yapılan değişiklikleri neden olacaktır ..."

message Bu mesajı nasıl kapatabilirim (herhangi bir değişiklik yapılmadığından) ve mümkünse, hedef çalışma kitabının "yeniden aç" yerine her çift tıklamadan sonra "güncelleştirildi" olmasını sağlayın? o zaten açıksa

+0

Geliş Bu [link] (http:

Function FileExists(strFileName As String) As Boolean If Dir(pathname:=strFileName, Attributes:=vbNormal) <> "" Then FileExists = True End If End Function 

Sen gibi prosedüründe kullanabiliriz: Yukarıdaki WorkbookIsOpen fonksiyonuna ek olarak , bu bir kullanır // stackoverflow.com/questions/16777311/vba-stock-in-workbook-open-continues-if-i-press-f5/16782098#16782098) – Santosh

cevap

6

Sen kontrol etmek için bir işlevi kullanabilirsiniz:

Function WorkbookIsOpen(wb_name As String) As Boolean 

On Error Resume Next 
WorkbookIsOpen = CBool(Len(Workbooks(wb_name).Name) > 0) 
End Function 

Sonra prosedüründe, böyle diyoruz:

Private Sub Worksheet_BeforeDoubleClick(ByVal... 
Application.ScreenUpdating = False 
If WorkbookIsOpen("whatever.xlsx") then 
    Set wbks = Workbooks("whatever.xlsx") 
Else 
    Set wbks = Workbooks.Open("\\whatever\whatever.xlsx") 
End If  
wbks.Sheets("Control").Activate 
ActiveSheet.Range("A3").Select 
Application.ScreenUpdating = True 

DÜZENLEME: Gerçekten deli gitmek isterseniz, Dosya mevcut olup olmadığını denetleyen bu işlevi kullanabilir ve eğer yoksa Nothing değerini döndürür, aksi halde Workbook değerini döndürür, yukarıdaki mantıkta biraz genişler:

Private Sub Worksheet_BeforeDoubleClick(ByVal... 
Application.ScreenUpdating = False 
Set wbks = GetWorkbook("\\whatever\whatever.xlsx") 
If wbks is Nothing Then 
    MsgBox "That's funny, it was just here" 
    'exit sub gracefully 
End If 
wbks.Sheets("Control").Activate 
ActiveSheet.Range("A3").Select 
Application.ScreenUpdating = True 
İlgili konular