VBA Excel - 从 Excel 中的一个单元格中选择一个值以更新 SQL 表

Posted

技术标签:

【中文标题】VBA Excel - 从 Excel 中的一个单元格中选择一个值以更新 SQL 表【英文标题】:VBA Excel - Select a value from one cell in Excel to update a SQL table 【发布时间】:2021-08-06 14:06:28 【问题描述】:

我正在开展一个从计费角度跟踪损益的项目。我们有一个我用来跟踪费用的单件成本。最终用户希望能够在更新表格之前不时更改单件成本。我正在尝试使用宏从 Excel 工作表中的 sheet3 单元格 B2 中获取一个值,以便更新 SQL Server 中的表。我缺少一些东西,因为当我运行宏时它不会更新表。谁能告诉我我错过了什么。这是我第一次尝试使用 VBA,所以我暂时卡住了。

Sub UpdateSQLData()

Dim cnn As ADODB.Connection

Dim mysql As String

Worksheets("Sheet3").Visible = True
Worksheets("Sheet3").Select

Set cnn = New ADODB.Connection



cnn.Open "Provider=SQLOLEDB.1;Initial Catalog=database;Data Source=server;UID=uid;PWD=pwd;"


Worksheets("Sheet3").Activate
For i = 2 To Range("B2").Select
MySQL = "UPDATE opi_bill_cost " & _
"SET Cost ='" & Range("B2").Value & "', Outcome = '"


cnn.Execute MySQL
Next i

cnn.Close

Set cnn = Nothing

End Sub

【问题讨论】:

您的 SQL 永远不会执行,因为 Range("B2").Select 返回 True,VBA 将解释为 -1。 你的 SQL 有引号包围似乎是一个数值,你是否从它的末尾删除了一些东西? 【参考方案1】:

如果您只运行一个更新语句,则不需要 For 循环,只有在您想运行具有不同值的多个更新语句时才会使用它。

You For Loop 也是没有运行的原因。 for 循环需要在 2 个值之间运行,而 Range("B2").Select 是一个动作。它实际上是试图从“2”运行到“TRUE”(在成功选择一个范围之后),这绝不是真的。所以它跳过了更新的代码行。

尝试取出 For... 行和 Next 行。这可能足以让它发挥作用。至少,如果有任何其他问题,代码会运行并抛出错误。

【讨论】:

谢谢。这似乎现在起作用了。现在要弄清楚当单元格中的值发生变化时如何自动运行宏。看起来它是直截了当的,但实际上并没有起作用。 这完全是另一个问题。要了解如何自动运行代码,请在 Google 上搜索:excel 工作表更改事件。然而,这是有风险的,因为用户可能不小心输入了他们不想更新的错误值。将命令按钮或形状直接添加到工作表并将宏分配给它会更安全。由于此答案在这里解决了您的问题,请将其标记为您接受的答案。谢谢。

以上是关于VBA Excel - 从 Excel 中的一个单元格中选择一个值以更新 SQL 表的主要内容,如果未能解决你的问题,请参考以下文章

从 VBA (Excel) 中的另一个函数调用一个函数

如何从 Excel VBA 释放进程内 COM 服务器对象

从VBA中的excel中选择多列

如何在excel中使用VBA调用其它外部程序

尝试使用 Excel VBA 在 IE11 中选择单选按钮

VBA Excel - 从 Excel 中的一个单元格中选择一个值以更新 SQL 表