【问题标题】:VBA Excel - Select a value from one cell in Excel to update a SQL tableVBA Excel - 从 Excel 中的一个单元格中选择一个值以更新 SQL 表
【发布时间】: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 有引号包围似乎是一个数值,你是否从它的末尾删除了一些东西?

标签: sql excel vba


【解决方案1】:

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

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

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

【讨论】:

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