简单的Excel链接

时间:2017-05-17 22:08:05

标签: excel vba excel-vba

我有一个相当简单的问题,我一直无法找到合适的答案;我有一个excel表,其中包含许多嵌套在工作表中的SQL表。我现在需要再添加一个表,但这个新表将超过30 mb,当添加到当前文件时,它会使整个工作簿非常缓慢地进行简单计算。

我的问题是:我可以将此表插入到新的Excel文件中,然后使用我已经拥有的刷新所有其他SQL表的VBA代码从原始文件中刷新它吗?如果是这样,我必须添加到我的VBA代码中以刷新新文件中的新表?我们假设新表的名称是“NewTable”,文件路径是C:\ Users \ davidmo \ Desktop \ David

这是我目前的VBA宏:

Sub Button1_Click()

ThisWorkbook.RefreshAll
DoEvents

ActiveSheet.Range("Q45") = Now

End Sub

如果有帮助,我设想能够打开我的原始文件,单击我用来刷新所有SQL表的VBA宏按钮,它也会刷新不同文件中的表。然后我将在原始文件中运行我的公式,并从其他文件中引用新更新的表。

1 个答案:

答案 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