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