我正在尝试在 Excel 中显示来自 SQL Server 的一些数据。因为我有一个查询涉及 3 个表并使用一个参数,所以我将不得不使用 VBA。
我不知道如何让 VBA“自动运行”。在 Excel 中执行常规查询会为您提供选项,例如在工作表打开时运行或自动刷新。由于我正在添加一个参数,因此我希望Sub
在更改参数所在单元格的值时运行它。
有任何想法吗?
答案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
为了清楚起见,我将说参数在单元格 A1 中,而 VBA 代码的结果列在单元格 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