我正在运行带有SQL的som VBA代码,以便从一个工作表插入另一个工作表。我的问题是,当我使用INSERT INTO
语句时,我丢失了空表中的数据类型属性。
这是我正在运行的代码:
Sub InsertTest()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim fromFile As String
fromFile = "C:\some\file.xlsx"
Dim cnStr As String
cnStr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & fromFile & ";" & _
"Extended Properties=Excel 12.0"
Dim query As String
query = "INSERT INTO [TableTwo$](lastname, age) SELECT lastname, age FROM [TableOne$]"
rs.Open query, cnStr, adOpenUnspecified, adLockUnspecified
End Sub
表1是我从中获取数据的地方:
表2是我插入数据的地方,以下是代码执行后的样子:
我注意到如果TableTwo填充了正确数据类型的数据,INSERT INTO
语句也会插入正确数据类型的数据。我不知道是谁擅长这样做或者它的ADODB。你知道吗?
我试图改变TableTwo的架构。我也尝试了CAST()
和CONVERT()
函数,但我无法使其工作:(
我知道我可以通过一些简单的VBA代码轻松修复数据类型,但在我看来,这会破坏使用SQL的一些目的。我真的很讨厌用VBA迭代我的表和表,因为根据我的经验,它比SQL慢得多。
我注意到的另一件事是,当我使用SQL时,公式行中的数据在单词的开头有一个引号(如此')。但它不在细胞中。为什么这样做?
提前致谢!