【问题标题】:Changing Stored Procedure Parameters in Excel/VBA在 Excel/VBA 中更改存储过程参数
【发布时间】:2016-06-16 23:29:59
【问题描述】:

我通过在 VBA 中格式化的 SQL 查询成功地将数据提取到 excel 中:

.Open "exec sp_MyProcedure @Node_Id = 05,@Subsidiary_Cd = '1',@WeekEndDate = '2016-05-28', @JobType = '12',@ReportLevel = 4"

我想让用户输入最近的一周结束日期,这会将@WeekEndDate 参数更改为他们的条目,或者让一个单元格显示最近的一周结束日期而不需要用户输入(如果可能的话?所有其他参数保持不变。我是 vba 新手,在 excel 方面没有太多经验,不胜感激。

**如果需要更多数据,可以编辑问题

【问题讨论】:

    标签: sql vba excel query-parameters


    【解决方案1】:

    考虑一下:

    Dim NodeId, SubsidiaryCd, WeekEndDate, JobType, ReportLevel
    
    NodeId = 05
    SubsidiaryCd = "1"
    WeekEndDate = "2016-05-28"
    JobType = "12"
    ReportLevel = 4
    
    .Open "exec sp_MyProcedure " & _
        "@Node_Id = " & NodeId & "," & _
        "@Subsidiary_Cd = '" & SubsidiaryCd & "'," & _
        "@WeekEndDate = '" & WeekEndDate & "', " & _
        "@JobType = '" & JobType & "'," & _
        "@ReportLevel = " & ReportLevel
    

    这与上一条指令完全相同;您现在只需将WeekEndDate 变量的常量值更改为所需的日期,例如:

    WeekEndDate = Format(Date(), "yyyy-mm-dd")
    

    【讨论】:

      【解决方案2】:

      首先,这取决于您对给定一周的最后一天的看法。对于我的测试,我假设是星期六。

      其次,我假设“最近一周”,你的意思是最后一周(不是我们目前所在的那一周)。

      第三,我假设您包含的代码 sn-p 是您在 VBA 代码中集成的 SQL。

      因此,如果您在单元格 A1 中有=TODAY(),您可以将以下公式放入单元格 A2 中,然后将您的 VBA sn-p 更改为以下内容:

      公式:=A1-WEEKDAY(A1)

      .Open "exec sp_MyProcedure @Node_Id = 05,@Subsidiary_Cd = '1',@WeekEndDate = '" & ActiveSheet.Cells(2, 1).Value & "', @JobType = '12',@ReportLevel = 4"
      

      从这里,您可以按照相同的想法自定义过程中的所有参数。

      【讨论】:

      • 您的假设是正确的,但是在更改我的代码后,我得到“将数据类型 varchar 转换为 smalldatetime 时出错。” Smalldatetime 是我在 sql 中的数据类型,任何想法如何解决这个问题?
      • 您需要在 Excel 中或在 VBA 中手动向日期字段添加时间。可能只是默认为午夜
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-13
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 2019-06-25
      相关资源
      最近更新 更多