用户表单到VBA代码

时间:2015-06-11 07:54:59

标签: excel-vba vbscript vba excel

有没有办法使用UserForms将数据插入到单元格或电子表格中,而不是直接插入VBA代码。

代码非常简单,它在SQLserver上运行并执行查询。我想让用户可以修改查询(内置在VBA代码中)并每天更改日期。

Set conn = New ADODB.Connection
conn.Open "Driver=Teradata;DBCName=dsnname;Databasename=dbname;Uid=Userid;Pwd=****;"

thisSql = "sel * from customer_db.customer where **Date = '2014-12-31'** "

Set rec1 = New ADODB.Recordset
rec1.Open thisSql, conn
Destination:=Sheet2.Range("A1")

我想用UserForm或类似的东西更改日期,是否可能? 提前谢谢

1 个答案:

答案 0 :(得分:0)

为了让用户窗体向宏返回一个值,最简单的选项是在用户选择日期后隐藏它,而不是将其卸载。然后,您可以从代码中检索可在userform上找到的所有值。

例如,如果你有一个简单的表单,只有一个名为dtpDate的日期选择器和两个命令按钮; " OK"和"取消",您在userform代码中输入的内容将是这样的:

Private Sub cmdCancel_Click() 
    Unload Me 
End Sub 

Private Sub cmdOK_Click() 
    Me.Hide 
End Sub 

Private Sub UserForm_Initialize() 
    dtpDato = Date
End Sub 

在您的宏中,您可以使用此类内容让用户"修改"查询字符串:

Set conn = New ADODB.Connection
conn.Open "Driver=Teradata;DBCName=dsnname;Databasename=dbname;Uid=Userid;Pwd=****;"

ufUserFormName.Show
thisSql = "sel * from customer_db.customer where **Date = '" _ 
          & Format(ufUserFormName.dtpDato, "yyyy-mm-dd") & "'** "
Unload ufUserFormName

Set rec1 = New ADODB.Recordset
rec1.Open thisSql, conn
Destination:=Sheet2.Range("A1")

如果宏在尝试从中读取值时未加载用户窗体,则代码将失败,但如果您决定使用此选项,则不应该检查此内容。例如,您可以找到检查here的函数。