2013-05-29 7 views
5

Ich habe Probleme mit meinem Code unten mit:Wie "aktualisieren" Sie eine Arbeitsmappe, anstatt sie erneut zu öffnen (mithilfe von VBA-Makros)?

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 
... 

Wie Sie sehen können, es öffnet eine Arbeitsmappe jedes Mal wenn ich eine bestimmte Zelle doppelklicken. Das Problem ist: Nach dem zweiten Mal, wenn ich einen Doppelklick auf ich die lästige Meldung bekommen: „‚Filename.xlsx‘ist bereits geöffnet Wieder Änderungen verursachen Sie verworfen werden gemacht ...“

¿Wie kann ich diese Nachricht abschalten (da keine Änderungen vorgenommen wurden), und wenn möglich, die Ziel-Arbeitsmappe nach jedem Doppelklick "aktualisieren" statt "re-open"?

+0

Schauen Sie sich diese [link] (http: // stackoverflow.com/questions/16777311/vba-stock-in-workbook-open-continues-ifi-i-press-f5/16782098#16782098) – Santosh

Antwort

6

können Sie eine Funktion verwenden, um zu überprüfen, ob es bereits geöffnet ist:

Function WorkbookIsOpen(wb_name As String) As Boolean 

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

Dann in Ihrer Prozedur, es so nennen:

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 

EDIT: Wenn Sie wirklich verrückt gehen wollen, Sie können diese Funktion verwenden, die überprüft, ob die Datei vorhanden ist, und gibt Nothing zurück, wenn dies nicht der Fall ist. Andernfalls wird Workbook zurückgegeben, wobei die obige Logik geringfügig erweitert wird:

Neben der WorkbookIsOpen Funktion oben, verwendet es diese:

Function FileExists(strFileName As String) As Boolean 

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

Sie diese wie in der Prozedur verwenden:

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 
Verwandte Themen