我有一个相当简单的问题,我一直无法找到合适的答案;我有一个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宏按钮,它也会刷新不同文件中的表。然后我将在原始文件中运行我的公式,并从其他文件中引用新更新的表。
答案 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