以下通过单击按钮提取信息:
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)?
答案 0 :(得分:0)
然后,您可以向表单添加几个文本框和一个按钮。 另外,您可以添加一个日期选择器控件,以便用户输入正确的日期。
在按钮的单击事件上,您将从文本框中检索信息。 我会在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 检查文本框名称是否与代码中的名称匹配。他们应该是一样的。