2014-12-23 21 views
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更換所有的動態引用停止其他工作表!但這似乎沒有幫助。

我不需要重新創建表,但我需要能夠更改基礎連接中的查詢,而不會丟失我的動態引用。我引用的列名不會隨着查詢更新而改變,但這些列填充的方式可以。

+1

只需更改'CommandText'並刷新? –

回答

0

你可以有這樣的說法:

ActiveWorkbook.RefreshAll 

如果是太多了茶點,你可以只拉起表中的問題和刷新。

相關問題