【问题标题】:Creating a 'box' within Excel for date range在 Excel 中为日期范围创建一个“框”
【发布时间】:2010-09-04 04:36:35
【问题描述】:

以下通过单击单个按钮提取信息:

Sub Sales()

Dim StrSQl As String

Con = "Provider=IBMDA400;Data Source=XXX.XXX.XXX.XXX;User Id=yyyy;Password=zzzz"

Set Db = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.recordset")
Db.connectionSTring = Con
Db.Open
StrSQl = "select myuc, sum (myac) as Amount from myabc.myqwerty where mydt >= 20100101 and mydt <= 20100831 group by (mycl)"
rs.Open StrSQl, Db, 3, 3
Sheet2.Cells(1, 1).CopyFromRecordset rs
rs.Close
Set rs = Nothing
Set cn = Nothing
End Sub

如何在 Excel 中创建一个“框”以在单击按钮之前选择日期范围(mydt >= 20100101 和 mydt

【问题讨论】:

  • 您使用的是哪个版本的 Excel?
  • Dee,我使用 Excel 2007,数据库保存在 DB2/400 中

标签: excel vba


【解决方案1】:

在 VBA 窗口中,您可以插入一个用户窗体。通过单击插入菜单项。

然后您可以在表单中添加几个文本框和一个按钮。 或者,您可以添加一个日期选择器控件,以便用户输入正确的日期。

在按钮的单击事件中,您将从文本框中检索信息。 我将向 SQL 字符串添加几个参数并将它们添加到 ADO 命令对象。 你最终会得到类似下面的东西。

Sub Button1_Click()

    Dim strSql As String
    Dim cmd As ADODB.Command
    Dim db As ADODB.Connection
    Dim rs As ADODB.Recordset
    if IsDate(TextBox1.Text) and IsDate(TextBox2.Text) then
        Set db = New ADODB.Connection
        Set rs = New ADODB.Recordset
        Set cmd = New ADODB.Command

        db.ConnectionString = "Provider=IBMDA400;Data Source=XXX.XXX.XXX.XXX;User Id=yyyy;Password=zzzz"

        db.Open
        Set cmd.ActiveConnection = db
        strSql = "select myuc, sum (myac) as Amount from myabc.myqwerty where mydt >= ? and mydt <= ? group by (mycl)"
        cmd.CommandText = strSql
        cmd.CommandType = adCmdText
        cmd.Parameters(0).Value = CDate(TextBox1.Text)
        cmd.Parameters(1).Value = CDate(TextBox2.Text)
        Set rs = cmd.Execute

        Sheet2.Cells(1, 1).CopyFromRecordset rs

        rs.Close
        Set rs = Nothing
        Set db = Nothing
    Else
         MsgBox "Please ensure that you enter a Date in the to To and From boxes"
    End If
End Sub

Private Sub UserForm_Initialize()
    TextBox1.Text = DateTime.Date - 7
    TextBox2.Text = DateTime.Date + 1
End Sub

编辑
我已经通过删除命名参数并替换为问号来更新代码。这只是让它更容易,因为命令对象为您创建参数,您只需要设置值。需要注意的一件事是参数的顺序。我已经在 Excel 2007 中执行了这段代码,我唯一改变的是连接字符串和 SqlString。验证它是否有效。

编辑 2
通过工具 -> 引用添加对 Microsoft Activex 数据对象 (ADO) 的引用。

编辑 3
添加了一些验证以确保用户输入日期。

编辑 4
添加了文本框的初始化以设置从一周前到今天的一些默认日期。

编辑 5 检查文本框名称是否与代码中的名称匹配。他们应该是一样的。

【讨论】:

  • 它不起作用。运行时错误'424:需要对象并突出显示 cmd.CommandText = StrSQL.
  • 顺便说一句,有没有什么简单的方法可以做到以上几点?
  • 抱歉,拼写错误。应该是“上述设置还有其他更简单的方法吗?”谢谢。
  • 当我添加 Dim cmd As ADODB.Command Dim db As ADODB.Connection Dim rs As ADODB.Recordset 时,提示 Compile Error : User-defined type not defined" under cmd As ADODB.Command
  • 抱歉,忘记通过工具 -> 引用添加对 Microsoft Activex 数据对象 (ADO) 的引用。你会发现有多个版本,我用的是ADO 2.8。添加引用的好处是它会给你编译时间检查和对象的智能感知。
猜你喜欢
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
相关资源
最近更新 更多