
我正在嘗試在 Excel 中顯示來自 SQL Server 的一些資料。因為我有一個查詢會命中 3 個表並使用一個參數,所以我將不得不使用 VBA。
我不知道如何讓 VBA「自動運行」。在 Excel 中執行普通查詢會提供一些選項,例如在工作表開啟時執行或自動刷新。由於我要新增參數,因此我希望Sub
在更改參數所在單元格的值時運行 my 。
有任何想法嗎?
答案1
右鍵單擊工作表標籤並選擇查看代碼。將這樣的程式碼放入工作表的模組中
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then 'only run if the correct cell is changed
MySub 'this is the name of your vba procedure
End If
End Sub
每當該工作表上的儲存格發生變更時,該子程式就會執行。如果變更的儲存格是 A1(變更為適合您的資料),則將執行名為 MySub(變更為適合)的標準模組中的程序。
我不知道為什麼你必須使用VBA。似乎您可以編寫 SQL 來從任意多個表中提取資料並包含一個參數。
答案2
放:
application.volatile
在你的程式碼中。
答案3
為了清楚起見,我將說參數位於 CELL A1 中,VBA 程式碼的結果列於 CELL A2 中。
在VBA中模組
Function Test1(strText as string) as string
Test1 = strText & "15"
End Function
在儲存格 A2 中放置方程式「=Test1(A1)
在儲存格 A1 中放置要變更的參數
我會驗證它是否有效,然後將其他 VBA 程式碼放入其中,以便在 A1 更改時運行該程式碼。
答案4
dkusleika 的答案看起來最好;如果你想對一個範圍做同樣的事情,事情會變得有點棘手。每當指定區域內的儲存格被修改時,就會出現下列程式碼。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim woArea As Range, isect As Range
Set woArea = Sheet1.Range("A1:A500")
Set isect = Application.Intersect(Target, woArea)
If isect Is Nothing Then
' Nothing happens
Else
' Stuff you want to happen goes here
End If
End Sub