我从Access设置数据传输 - > Excel使用VBA。
Access查询输出为9列,并返回动态行数。
正在将除第8列以外的所有列复制到Excel工作表中。第8列没有填充任何内容。
在数据传输过程中,不会抛出任何错误或警告。
我的VBA代码如下:
''Reference: Microsoft ActiveX Data Object x.x Library
Dim rs4 As New ADODB.Recordset
Dim xl4 As Object ''Excel.Application
Dim wb4 As Object ''Workbook
Set xl4 = CreateObject("Excel.Application")
Set wb4 = xl4.Workbooks.Open(Path & fileName & Format(getAsOfDate(), "MMDDYYYY") & fileType)
''Connection relevant for 2007 or 2010
rs4.Open "myQuery", CurrentProject.AccessConnection
wb4.Sheets("myWorksheet").Cells(9, 3).CopyFromRecordset rs4 ''Cells(down, across)
xl4.Visible = False
wb4.Close SaveChanges:=1
rs4.Close
Set wb4 = Nothing
Set xl4 = Nothing
Set rs4 = Nothing
下面是Excel(启用宏)工作簿的屏幕截图。请注意 - 红色框标出了不接受数据的列。另请注意 - 此列的单元格有一个下拉框,用户可以在其中手动选择值。但是,右侧的列也包含具有下拉功能的单元格,并且数据可以成功传输到其中。
我也尝试从Access发送格式为(1)文本字符串,(2)int的数据。没有区别。
修改:我交换了Access查询中的最后2列(Col8< - > Col9),并将查询结果传输到Excel。现在我注意到Col8(以前的Col9)出现正确,并且col9(以前的Col8)没有出现。
这指向Access查询出错。
以下是生成错误Access列的代码:
Iif(table.ID like "9*","0",Iif(table.ID like "3*","1",NULL))
这会导致列输出在Excel中不兼容?在Access中,结果显示没有错误。
解决方案:
由于某些原因,在sql中使用like
运算符导致列传输失败。我将sql更新为以下内容,并成功传输数据:
IIf(left(table.ID,1) = "9","0", IIf(left(table.ID,1) = "3","1",NULL))