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

时间:2010-09-04 04:36:35

标签: excel excel-vba 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
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&gt; = 20100101和mydt&lt; = 20100831)?

1 个答案:

答案 0 :(得分:0)

在VBA窗口中,您可以插入UserForm。单击“插入菜单项”。

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

在按钮的单击事件上,您将从文本框中检索信息。 我会在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)的引用 - &gt;引用。

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

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

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