MS Access-VBA-创建新的Excel工作簿
我使用以下VBA函数读取Excel文件,并“创建”一个新工作簿以将其另存为CSV文件。 当我第一次运行这个函数时,它工作得很好。 我会再次运行此操作吗?它不会打开新工作簿(没有返回错误),我必须关闭MS Access,然后再次调用此函数 有人知道我做错了什么吗MS Access-VBA-创建新的Excel工作簿,vba,ms-access,Vba,Ms Access,我使用以下VBA函数读取Excel文件,并“创建”一个新工作簿以将其另存为CSV文件。 当我第一次运行这个函数时,它工作得很好。 我会再次运行此操作吗?它不会打开新工作簿(没有返回错误),我必须关闭MS Access,然后再次调用此函数 有人知道我做错了什么吗 public function fctImportExcel () Dim objExcel As Excel.Application Dim wbExcel As Excel.Workbook
public function fctImportExcel ()
Dim objExcel As Excel.Application
Dim wbExcel As Excel.Workbook
Dim wbCSV As Excel.Workbook
Dim wsExcel As Excel.Worksheet
Dim wsCSV As Excel.Worksheet
Set objExcel = New Excel.Application
Set wbExcel = objExcel.Workbooks.Open("filepath")
Set wsExcel = wbExcel.Sheets("sheet1")
objExcel.Visible = True
objExcel.DisplayAlerts = False
wsExcel.Range(wsExcel.Cells(i, 7), wsExcel.Cells(i, 25).End(xlDown)).Copy
Set wbCSV = Workbooks.Add
Set wsCSV = wbCSV.Sheets("sheet")
wsCSV.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
objExcel.CutCopyMode = False
wbCSV.SaveAs FileName:="workbook.csv", FileFormat:=xlCSV, CreateBackup:=False
wbCSV.Close acSaveNo
Set wsCSV = Nothing
Set wbCSV = Nothing
objExcel.DisplayAlerts = True
wbExcel.Close acSaveNo
objExcel.CutCopyMode = False
objExcel.Quit
Set wsExcel = Nothing
Set wbExcel = Nothing
Set objExcel = Nothing
End Function
对于Excel对象,您必须始终非常具体。因此,请尝试:
Set wbCSV = objExcel.Workbooks.Add
并小心地按相反顺序关闭:
wbCSV.Close acSaveNo
Set wsCSV = Nothing
Set wbCSV = Nothing
wbExcel.Close acSaveNo
Set wsExcel = Nothing
Set wbExcel = Nothing
objExcel.DisplayAlerts = True
objExcel.CutCopyMode = False
objExcel.Quit
Set objExcel = Nothing
是否确实要打开名为
“文件路径”
的工作簿?请注意,大型关闭部分可以简化为wbcv.close acSaveNo
wbecel.close acSaveNo
objExcel.Quit
,一旦超出范围,对象将被删除。按相反顺序取消设置是一种很好的做法,但应该无关紧要,因为Excel应用程序对象和工作簿彼此都有引用,并且只要不使用它,就可以引用一个已关闭的工作簿/应用程序。只有答案的第一部分是真正需要的。鹰眼徽章。:)我已经通读了代码,但没有发现一个不合格的调用。@ErikA:嗯,正如你所写的,“应该”,可能就是这样。然而,经验告诉我,不要为了节省一些琐碎的代码行而在这方面走弯路。