在Excel中为日期范围创建“框”

在Excel中为日期范围创建“框”,excel,vba,Excel,Vba,下面通过单击单个按钮提取信息: 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

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

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的范围在VBA窗口中,您可以插入用户表单。通过单击“插入”菜单项

然后,您可以在表单中添加几个文本框和一个按钮。 或者,您可以添加一个datepicker控件,该控件将成为用户输入正确日期的向导

在按钮的单击事件中,您将从文本框中检索信息。 我将向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
编辑 我已通过删除命名参数并替换为问号来更新代码。这使它成为eaiser,因为命令对象为您创建参数,您只需要设置值。需要注意的一点是参数的顺序。我在Excel2007中执行了这段代码。我唯一更改的是连接字符串和SqlString。来验证它是否有效

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

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

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

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

您使用的是哪个版本的Excel?Dee,我使用的是Excel 2007&数据库保存在DB2/400中,无法工作。运行时错误'424:需要对象&它突出显示了cmd.CommandText=StrSQL.BTW,是否有任何简单的方法来执行上述操作?抱歉,输入错误。应该是“有没有其他更简单的方法来实现上述设置?”谢谢。当我添加Dim cmd作为ADODB.Command Dim db作为ADODB.Connection Dim rs作为ADODB.Recordset时,它提示编译错误:未在cmd下定义用户定义的类型为ADODB.CommandSorry,忘记通过工具->引用添加对Microsoft Activex数据对象的引用。你会发现有多个版本,我用的是ADO 2.8。添加引用的优点是,它将为您提供编译时检查以及对象的智能感知。