我有以下vba代码。我正在使用MS Excel 2013.(我在此代码中也有一个插入语句,但我没有复制这个只是为了更好地突出我的问题)
Dim cn As Object
Dim cUserEmail As String
Dim strSqlmail As String
Dim rss As Object
Dim strConnection As String
Set cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\ActionList.accdb"
strSqlmail = "SELECT [Email-Adress] FROM MyTable WHERE Name='Test'"
Set rss = cn.Execute(strSqlmail)
cUserEmail = rss.Fields(0).Name
此时它将列名称(Email-Adress)存储在我的变量中。在Access中运行查询将返回仅包含所需值的列。
我认为我和完成一样好,但我似乎无法找到如何获得价值。当我更改为rss.Field(1)时,它会给出一个错误,指出无法找到该项。
答案 0 :(得分:2)
如果您使用的是ADO
库,则Execute
方法会返回RecordSet
- 请参阅documentation。
所以你需要:
Dim rsResult as Recordset
...
Set rsResult = cn.Execute(strSqlmail)
Do While Not rs.EOF
Debug.Print rs!Email-Adress
rs.MoveNext
Loop
rs.Close
因此,当您添加WHERE
子句仅返回一行时,循环应该只迭代一次。无论输出到即时窗口的是什么,都应该分配给cUserEmail
。
答案 1 :(得分:0)
以下代码为我提供了所需的值:
Dim cn As Object
Dim cUserEmail As String
Dim strSqlmail As String
Dim rss As Object
Dim strConnection As String
Set cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\ActionList.accdb"
strSqlmail = "SELECT [Email-Adress] FROM MyTable WHERE MyTable.[Name]='Test'"
Set rss = cn.Execute(strSqlmail)
cUserEmail = rss.Fields(0)