目前我在Access上有一个窗体过滤来自子窗体的记录,并在单击按钮时在第一个窗体上创建一个带有数据的Excel文档。我在后续工作表中发生了一系列其他计算,但是我只需要它们针对第一个工作表上“名称”列中已存在“名称”字段的条目。其他计算是通过SQL语句完成的。如何将整个Excel列分配给Access中VBA中的变量?
我的思维过程是做这样的事情:
SELECT (various fields) FROM (query name) WHERE (first couple of where statements) AND NameField IN NameColumn
如果名称字段将是name元素和名称列将整列。我试图用多种方式创建这个变量而没有成功。例如,我尝试过的一件事是在正确的实例中循环添加“(”,“,”和“)”的记录,但字符串太长,Access无法运行。我也尝试了界定,如变量:
NameColumn = ExcelApplication.Range("A:A")
而且
NameColumn = Worksheet.Range("A:A")
而且
NameColumn = ExcelApplication.Columns("A:A").EntireColumn
等,但所有这些似乎只引用列的第一个条目。我试过研究解决方案,但是我也没有找到任何有用的东西。有人知道我会如何处理这样的事情吗?
编辑:我应该也许应该提到,我以为我只是得到使用这些方法的第一个条目,因为NameColumn没有被定义为任何事情之前。但我想这样做:
Dim NameColumn As Range
但我会得到以下错误:
Compile Error:
User-defined type not defined
这是奇怪的,因为经过一番研究,我已经注意到范围似乎是一个有效的数据类型
编辑2:这是我如何定义我的Excel应用程序和工作表:
编辑3:编辑它使它更加完整,以防万一它有帮助
编辑4:更新更多的代码
Dim rst As DAO.Recordset
Dim ApXL As Object
Dim xlWBk As Object
Dim xlWSh As Object
Dim fld As DAO.Field
Const xlCenter As Long = -4108
Const xlBottom As Long = -4107
On Error GoTo err_handler
Set rst = frm.RecordsetClone
Set ApXL = CreateObject("Excel.Application")
Set xlWBk = ApXL.Workbooks.Add
ApXL.Visible = True
Set xlWSh = xlWBk.Worksheets("Sheet1")
#THESE TWO BLOCKS COPY THE DATA FROM THE SUBFORM#
For Each fld In rst.Fields
ApXL.ActiveCell = fld.Name
ApXL.ActiveCell.Offset(0, 1).Select
Next
rst.MoveFirst
xlWSh.Range("A2").CopyFromRecordset rst
.
.
.
Dim FirstColumn As Object
Set FirstColumn = xlWSh.Columns(1)
.
.
.
现在这个问题包含两个完全不同的两个问题完全不同的答案,所以它真的应该分裂。请确定您想要的问题的哪一部分,Excel自动化或Access SQL,然后答案可以与问题相关。 – Fionnuala 2012-07-11 13:11:31