gpt4 book ai didi

sql - 如何将整个 Excel 列分配给 Access 上 VBA 内的变量?

转载 作者:行者123 更新时间:2023-12-03 02:59:50 27 4
gpt4 key购买 nike

目前,我在 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)
.
.
.

最佳答案

but I would then get the following error: Compile Error: User-defined type not defined which is weird since after some research I've noticed Range seems to be a valid datatype

您收到该错误是因为 Excel Range 不是 Access 对象,而是 Excel 对象。您必须将其定义为

Dim NameColumn As oXl.Range

其中 oXL 是您在应用程序中定义的 Excel 应用程序。

并且要设置范围,不能使用

NameColumn = Worksheet.Range("A:A")

您必须使用“设置”一词。所以上面的代码改为

Set NameColumn = Worksheet.Range("A:A")

Set NameColumn = Worksheet.Columns(1)

跟进

我试过了,它有效

Dim ApXL As Object, xlWBk As Object, xlWSh As Object, NameColumn As Object

Set ApXL = CreateObject("Excel.Application")
ApXL.Visible = True

Set xlWBk = ApXL.Workbooks.Add
Set xlWSh = xlWBk.Worksheets("Sheet1")
Set NameColumn = xlWSh.Columns(1)

关于sql - 如何将整个 Excel 列分配给 Access 上 VBA 内的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11415035/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com