【问题标题】:Control SQL Query Values input to Excel cells控制 SQL 查询值输入到 Excel 单元格
【发布时间】:2020-07-08 17:16:25
【问题描述】:

我不太确定如何表达这个问题,所以我提供了步骤。

步骤:(VBA-Excel)

  1. 数据被插入到数据库中。运行查询以提取所有有违规行为的公司并将其插入到 Excel 中。
  2. 然后我有一个循环,它获取每个公司名称的值并将单元格值(公司名称)插入另一个检索电子邮件的查询中。

我遇到的问题是有些公司列出了两封电子邮件。所以 db 查询看起来像这样:

  • 公司/邮箱
  • 微软/email1@...
  • 微软/email2@...
  • 索尼/email@...

当使用电子邮件查询运行时(希望有帮助)

n = 1
 Do While IsEmpty(Range("A" & n).Value) <> True 'If Cells in Col A is not empty
     CSCust = Range("A" & n).Value
     qryEmail = "SELECT Email FROM dbo.tblPHEmails WHERE SamplePoint LIKE '" & CSCust & "'"
     Set connect = New ADODB.Connection
     connect.Open (strConnectStr)
     '
     'Clean Stream Query
     Set recordSetCSEmail = New ADODB.recordSet
     recordSetCSEmail.Open qryEmail, connect
     Range("C" & n).CopyFromRecordset recordSetCSEmail
     n = n + 1
 Loop

在 Excel 中,这会覆盖一封电子邮件,因为它会自动在下一行输入值,检查下一家公司(替换为该公司的电子邮件)。我希望得到这样的数据:

  • 公司/电子邮件/电子邮件2
  • 微软/email1@.../email2@...
  • 索尼/email@...

我知道它有点长(我道歉),这可能吗?或者,我应该去编辑数据库中的电子邮件列表以允许每家公司拥有多个电子邮件字段吗?

【问题讨论】:

  • 我会更改 sql 语句以在一行中为您提供两封电子邮件。使用嵌套的 select 语句,您可以返回第二封电子邮件,如果不存在则返回空值。在问之前;为此,需要了解您的数据库平台和其他信息。这将是一个新问题。
  • 这正是我所做的,而且效果很好!

标签: sql excel vba


【解决方案1】:

尝试添加要复制的最大行数,使用:

Range("C" & n).CopyFromRecordset recordSetCSEmail, 1

【讨论】:

  • 这是一个很好的尝试。现在我只需要弄清楚如何将第二封电子邮件放入下一列。
【解决方案2】:

在反复研究逻辑之后,我想出了一个解决方案。在循环过程中,我将检查下面的单元格中是否存储了额外的电子邮件(每个公司不超过两封电子邮件)并将其移动到正确的位置。

【讨论】:

    猜你喜欢
    • 2018-07-26
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多