2017-05-17 155 views
0

我有一個相當簡單的問題,我一直無法找到合適的答案;我有一個Excel工作表中嵌入了許多SQL表的Excel表。我現在需要添加一個表格,但是這個新表格將超過30 MB,並且添加到當前文件時,它會使整個工作簿跋涉非常緩慢,甚至可以進行簡單的計算。簡單的Excel鏈接

我的問題是:我可以將此表插入一個新的excel文件,然後使用VBA代碼從我的原始文件中刷新它,我已經有刷新所有其他SQL表嗎?如果是這樣,我需要添加到我的VBA代碼來刷新新文件中的新表格?讓我們假設新表的名稱爲「newtable的」和文件路徑爲C:\用戶\ davidmo \桌面\大衛

這是我目前的VBA宏:

Sub Button1_Click() 

ThisWorkbook.RefreshAll 
DoEvents 

ActiveSheet.Range("Q45") = Now 

End Sub 

如果有幫助,我設想能夠打開我的原始文件,單擊我用來刷新所有SQL表的VBA宏按鈕,它也會刷新不同文件中的表。然後,我會在原始文件中運行我的公式,並引用其他文件中新更新的表。

+0

直接的解決方案是打開工作簿並調用'.RefreshAll'然後關閉它。你正在尋找一種方式來刷新它,而不打開它?我看不出這將是怎樣的可能。 –

+0

是的想法是不必打開任何其他工作簿。我正在處理的文件是用於工作的儀表板,因此刷新儀表板所需的工作量越少越好。 因此,根據您的想法,無法在文件路徑C中以某種方式說「Refresh.NewTable」:\\等 –

+0

我(個人)不知道如何在不打開文件的情況下執行此操作。 –

回答

0

因此,這將打開woorkbook並刷新表格,然後關閉它,如果工作簿已打開,它將保持打開狀態。無法使用封閉式工作簿來完成此操作,但無論如何對用戶來說都不可見。

Sub Button1_Click() 
Dim wbk As Workbook 
Dim FileName As String 
Dim Path As String 
Dim Opened As Boolean 

ThisWorkbook.RefreshAll 

Path = "C:\Users\User\Desktop\Files\1.xlsx" 'Edit Path 
If IsWorkBookOpen(Path) = False Then 
Set wbk = Workbooks.Open(Path) 
Else 
Path = Right(Path, Len(Path) - InStrRev(Path, "\")) 
Set wbk = Workbooks(Path) 
Opened = True 
End If 
wbk.RefreshAll 
If Opened = False Then 
wbk.Close (saveChanges = True) 
End If 

DoEvents 
ActiveSheet.Range("Q45") = Now 

End Sub 

Function IsWorkBookOpen(FileName As String) 
    Dim ff As Long, ErrNo As Long 

    On Error Resume Next 
    ff = FreeFile() 
    Open FileName For Input Lock Read As #ff 
    Close ff 
    ErrNo = Err 
    On Error GoTo 0 

    Select Case ErrNo 
    Case 0: IsWorkBookOpen = False 
    Case 70: IsWorkBookOpen = True 
    Case Else: Error ErrNo 
    End Select 
End Function 
+0

哇,看起來真不錯。我會試一試,讓你知道。 –

+0

嘗試此宏並在第三行到最後一行「Case Else:Error ErrNo」中發現調試器錯誤,並顯示錯誤消息「文件未找到」。 –

+0

ofc,你必須鏈接你的分離表所在的文件。如果你已經完成了它應該工作。 – UGP