【发布时间】:2023-03-29 09:05:01
【问题描述】:
目前,我在 Access 上有一个表单,它从子表单中过滤记录,并在单击按钮时创建一个 Excel 文档,其中包含第一张表上的数据。我有一堆其他计算发生在后续工作表上,但我需要它们只发生在第一张工作表的“名称”列中已经存在“名称”字段的条目中。其他计算通过 SQL 语句完成。
我的思考过程是:
SELECT (various fields) FROM (query name) WHERE (first couple of where statements) AND NameField IN NameColumn
其中 NameField 将是名称元素,而 NameColumn 将是整个列。我尝试以多种方式创建此变量,但均未成功。例如,我尝试的一件事是遍历记录,在正确的实例中添加“(”、“、”和“)”,但字符串太长,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
这很奇怪,因为经过一些研究我注意到 Range 似乎是一种有效的数据类型
编辑 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,然后答案可能与问题相关。
标签: sql forms excel ms-access vba