您好我无法找到有关如何在MS Excel中查询中设置变量的来源。 "声明@var,设置@var"不能正常工作..请让我知道如何为下面的查询创建一个变量..
SELECT inv.idclient,inv.invnumber,inv.invdate
FROM source.invoices inv
WHERE inv.idclient = 111222 AND inv.invdate> d {' 2014-01-01'} - >我希望将此值替换为变量
这个查询非常简单,但是我必须在同一个日期放置10次以上...我想创建变量的原因。
如果您有疑问,请不要犹豫。
感谢您的帮助。
答案 0 :(得分:0)
一些建议: 1.使用VBA假设您的查询输出在单元格C1中开始,日期变量存储在单元格A1中。如果你不太习惯编写宏,那么最简单的方法是首先记录一个宏以捕获连接字符串等。为此,请转到Developer - >录制宏并在录制时,单击表格中的任意位置(C1使用我的假设),转到设计 - >属性。在打开的窗口中,单击属性图标(Name:dbName框旁边)。在随后的窗口中,单击“定义”选项卡,然后对查询进行更改(任何简单的更改都会执行)。这将记录VBA代码所需的内容。现在再次单击“确定”和“确定”以退出窗口,停止宏录制并转到VBA(一种方法是右键单击工作表名称 - >查看代码)并找到新代码(如果是第一个宏,它将在Module1中,您可能必须在左侧的顶部窗格中展开VBAProject和/或Modules文件夹。 接下来,您可以添加一个新子,您可以复制下面的一个并更新注释行。我只在Access DB上测试过。如果使用宏记录的连接详细信息与我在下面提供的信息不同,请保留您的信息并仅更改所需内容。
Sub RefreshMacro()
Dim myDate As String
myDate = ThisWorkbook.Worksheets("Sheet1").Range("A1") 'THIS MUST BE YOUR SHEET AND CELL NAMES, ASSUMING DATE VARIABLE IS IN CELL A1
Range("C1").Select 'ASSUMING OUTPUT IS IN CELL C1
With ActiveWorkbook.Connections("testaDB").OLEDBConnection 'THIS MUST BE YOUR CONNECTION, COPY FROM WHAT WAS RECORDED IN THE PREVIOUS STEP, SUB MACRO1
.BackgroundQuery = True
.CommandText = Array("select * from tbl2_10_15 where ProductDate < #" & myDate & "#;")
.CommandType = xlCmdSql
.Connection = Array("OLE...") 'THIS OLE... MUST BE YOUR CONNECTION STRING, COPY FROM WHAT WAS RECORDED IN THE PREVIOUS STEP, SUB MACRO1
.SourceDataFile = "C:\Users\...testaDB.accdb" 'THIS OLE... MUST BE YOUR CONNECTION STRING, COPY FROM WHAT WAS RECORDED IN THE PREVIOUS STEP, SUB MACRO1
End With
With ActiveWorkbook.Connections("testaDB") 'THIS MUST BE YOUR CONNECTION NAME
.Name = "testaDB"
.Description = ""
End With
ActiveWorkbook.Connections("testaDB").Refresh 'THIS MUST BE YOUR CONNECTION NAME
End Sub