访问运行时错误';91';使用Excel时

访问运行时错误';91';使用Excel时,excel,ms-access,vba,runtime-error,Excel,Ms Access,Vba,Runtime Error,我知道这已经被提出过很多次了(通常在运行时错误“1004”下),但是我在代码中隔离错误时遇到了困难——尽管在这里和其他站点都进行了广泛的研究。我的代码从Access窗体上的命令按钮运行,并在打开窗体后第一次成功运行,但在随后的尝试中失败。我认为我使用了不充分的引用和/或打开了第二个Excel对象,但我不知道如何使用。 执行其他格式,但我已删除尽可能多的内容以保持简短 私有子cmdExport_Click() Dim dbs作为数据库 将rst设置为DAO.Recordset Dim appExc

我知道这已经被提出过很多次了(通常在运行时错误“1004”下),但是我在代码中隔离错误时遇到了困难——尽管在这里和其他站点都进行了广泛的研究。我的代码从Access窗体上的命令按钮运行,并在打开窗体后第一次成功运行,但在随后的尝试中失败。我认为我使用了不充分的引用和/或打开了第二个Excel对象,但我不知道如何使用。 执行其他格式,但我已删除尽可能多的内容以保持简短

私有子cmdExport_Click()

Dim dbs作为数据库
将rst设置为DAO.Recordset
Dim appExcel作为Excel.Application
将wbk设置为Excel.工作簿
Dim以Excel格式工作。工作表
暗计数等于长
昏暗的夜空和长的一样
作为整数的Dim intLoop
Dim strSheetName作为字符串
Dim dteStart As Date
暗淡的日期
货币
Dim INT作为整数移动
变暗lngCol为长
长得一样长
将intField设置为整数
Dim intFieldCount为整数
将strPath设置为字符串
作为字符串的Dim strFile
将strPathFile设置为字符串
Dim blnFileCheck作为布尔值
strFile=“BudgetForecast.xlsx”
strPath=genFindFolder(“tblSettings”)'提供数据存储的路径
strPathFile=strPath&strFile
blnFileCheck=gendeletfile(strPath,strFile)'删除现有文件(如果存在)
dteStart=DateAdd(“m”,1,日期)
dteEnd=日期添加(“m”,12,日期)
strSheetName=“Forecast”和MonthName(Month(dteStart),True)和“&CStr(Year(dteStart))”开始月份和年份
strSheetName=strSheetName&“To”和MonthName(Month(dteEnd),True)和“&CStr(Year(dteEnd))”添加月末和年末
curStartBal=[Forms]![frmBudForecast]![txtStart1]
'创建新的Excel工作簿并添加数据
设置dbs=CurrentDb
Set rst=dbs.OpenRecordset(“qryBudForecastFinal”)
设置appExcel=New Excel.Application
设置wbk=appExcel.Workbooks.Add
设置wks=wbk.ActiveSheet
appExcel.Visible=True
有工作
.Name=strSheetName
.Cells(1,1).Value=“排序”
.Cells(1,2).Value=“日期”
.Cells(1,3).Value=“类型”
.Cells(1,4).Value=“账户”
.Cells(1,5).Value=“收款人/详细信息”
.Cells(1,6)。Value=“Jan”
'删除2月至11月的行以缩短提取时间
.Cells(1,17)。Value=“Dec”
.Cells(1,18)。Value=“总计”
rst.MoveLast
rst.MoveFirst
lngCount=rst.RecordCount
intFieldCount=rst.Fields.Count
lngDataRows=lngCount+5
rst.MoveFirst
直到rst.EOF为止
lngCol=1
LNROW=[A65536]。结束(3)。行+1
对于intField=0到intFieldCount-1
.Cells(lngRow,lngCol)=rst.Fields(intField).Value
lngCol=lngCol+1
下一个intField
rst.MoveNext
环
'将列移动到正确的顺序
如果是月(日)12,则“如果是12月,则记录已按正确顺序排列”
intMoves=月(日)
对于intLoop=1到intMoves
.列(“R:R”)。选择
Selection.Insert Shift:=xlToRight,CopyOrigin:=XLFormatFromLeftor上面的“###错误
.列(“F:F”)。选择
选择。剪切目标:=列(“R:R”)
.列(“F:F”)。选择
选择。删除移位:=xlToLeft
下一个内循环
如果结束
以
'保存新文件(下一行为测试注释掉)
'appExcel.active工作簿.SaveAs文件名:=strPathFile,冲突解决:=xlOtherSessionChanges
“关闭Excel
appExcel.ActiveWindow.Close(False)
"清理",
rst.关闭
设置rst=无
设置dbs=Nothing
设为零
设置wbk=Nothing
appExcel.Quit'不确定是否需要此行
设置appExcel=Nothing
端接头
此行出现错误:

选择。插入Shift:=xlToRight,CopyOrigin:=xlFormatFromLeftOrAbove

“选择”似乎是“无”

我尝试了各种各样的语法变体和修改——我想我需要更具体地选择R列,但我不知道如何选择。顺便说一句,当代码失败时,电子表格上的R列被选中。 我很想在点击表单后隐藏表单上的命令按钮,但担心这会成为一种逃避,当然也无助于我的理解

appExcel.Selection
选择
不是访问对象模型的一部分。但在可能的情况下,应尽量避免使用选择/激活。例如:

.Columns("F:F").Select
Selection.Delete Shift:=xlToLeft
最好写为:

.Columns("F:F").Delete Shift:=xlToLeft

更改为:.Columns(“R:R”)。插入Shift:=xlToRight,CopyOrigin:=xlFormatFromLeftOrAbove.Columns(“F:F”)。剪切目标:=.Columns(“R:R”)这修复了“91”错误,但在下一行导致错误(“1004”-对象的“全局”方法“Columns”失败)。但是,将第二行修改为.Columns(“F:F”).Cut Destination:=wks.Columns(“R:R”)修复了此问题。非常感谢你的帮助。
.Columns("F:F").Delete Shift:=xlToLeft