0
在Excel中,我有一個從另一個選項卡中的SQL Server查詢填充的表。當我更改查詢時,我希望能夠在維護對該表的單元格引用的同時更新數據表。在從新數據連接重新創建表時,維護另一個表中的Excel動態表引用
我能夠根據另一個選項卡中的查詢獲取表內容的唯一方法是重新創建表。問題是當我重新創建表格時,我將其他工作表中的所有動態單元格引用都釋放到該表格中。
這個子程序填充的空白工作簿,我從一個標籤一個SQL查詢所需要的數據稱爲查詢:
Sub PopulateTable_GLP()
Set cSQL = ThisWorkbook.Sheets("Query").Range("B2") ' Sets cSQL to the SQL query
nWhen = 0
cWhen = ""
cConn = "ODBC;DSN=GLP"
With Sheets("GLP_Results").ListObjects.Add(SourceType:=0, Source:= _
"ODBC;DSN=GLP;Description=GLP;DATABASE=GLP" _
, Destination:=Range("$A$1")).QueryTable
.CommandText = cSQL
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Table_GLP"
.Refresh BackgroundQuery:=False
End With
End Sub
此功能填充表,如果它不存在之前創建的表和清除表填充之前,如果它:
Sub Create_GL_Results()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
On Error GoTo ErrorHandler
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "GLP_Results"
Range("A1").Select
Call PopulateTable_GLP
ErrorHandler:
Sheets("GLP_Results").Cells.Clear
Sheets("GLP_Results").Select
Call PopulateTable_GLP
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
我試圖關閉屏幕更新,並自動計算,而這是發生從與#REF更換所有的動態引用停止其他工作表!但這似乎沒有幫助。
我不需要重新創建表,但我需要能夠更改基礎連接中的查詢,而不會丟失我的動態引用。我引用的列名不會隨着查詢更新而改變,但這些列填充的方式可以。
只需更改'CommandText'並刷新? –