如何通过 Access VBA 正确访问 Excel 文件
How do I properly access Excel Files through Access VBA
我是一个非常新手的编码员,正在编写一个程序来从 Access table 中提取一些数据并将其放入 Excel Sheet。 Excel 工作簿创建正确,但是当我去保存它时,我得到一个
VBA Run-time error '1004' - Cannot access 'Checks and Transfers Import
File 02122021.xlsx'.
当我尝试打开文件时,我收到一条消息,指出有人正在使用该文件,但我可以将其打开为“只读”。问题是没有其他人在使用该文件。我做错了什么?
'Transfers the checks/transfers from the two tables to an Excel sheet
Dim objXLApp As excel.Application
Dim objXLBook As excel.Workbook
Dim wS As excel.Worksheet
Dim rowCount As Integer
Dim rstChecks As New ADODB.Recordset
Dim rstTransfer As New ADODB.Recordset
Dim qdF As DAO.QueryDef
Dim rsT As DAO.Recordset
Dim qdF1 As DAO.QueryDef
Dim rsT1 As DAO.Recordset
Set qdF = CurrentDb.QueryDefs("tbl_BankImportChecks Query") ' Gets all fields from Table1
Set qdF1 = CurrentDb.QueryDefs("tbl_BankImportTransfers Query") ' Gets 401(k) contribution and match information
Set rsT = qdF.OpenRecordset
Set rsT1 = qdF1.OpenRecordset
rsT.MoveLast
rsT.MoveFirst
rsT1.MoveLast
rsT1.MoveFirst
Set objXLApp = CreateObject("Excel.Application")
objXLApp.Workbooks.Add
objXLApp.Visible = True
Set wS = objXLApp.Worksheets("Sheet1")
wS.NaMe = "Checks" & Format(Me.DTPicker8.Value, "mmdd")
objXLApp.Sheets("Checks" & Format(Me.DTPicker8.Value, "mmdd")).Activate
wS.Range("A1").Value = "Bank Account"
wS.Range("B1").Value = "Payee"
wS.Range("C1").Value = "Check Date"
wS.Range("D1").Value = "Check Number"
wS.Range("E1").Value = "Check Memo"
wS.Range("F1").Value = "Address Line 1"
wS.Range("G1").Value = "Address Line 2"
wS.Range("H1").Value = "Address City"
wS.Range("I1").Value = "Address State"
wS.Range("J1").Value = "Address Zip"
wS.Range("K1").Value = "Expenses Account"
wS.Range("L1").Value = "Expenses Amount"
wS.Range("M1").Value = "Expenses Memo"
wS.Range("N1").Value = "Expenses Customer Job"
wS.Range("O1").Value = "Not Used"
wS.Range("P1").Value = "Temp Type"
wS.Range("Q1").Value = "Paycheck Amount"
wS.Range("R1").Value = "State"
rowCount = 2
Do While Not rsT.EOF
wS.Range("A" & rowCount).Value = rsT.Fields(4).Value 'Bank Account (11100)
wS.Range("B" & rowCount).Value = rsT.Fields(0).Value 'Vendor
wS.Range("C" & rowCount).Value = rsT.Fields(2).Value 'Check Date
wS.Range("D" & rowCount).Value = "EFT"
wS.Range("E" & rowCount).Value = rsT.Fields(3).Value ' Check Memo
wS.Range("K" & rowCount).Value = rsT.Fields(5).Value 'Expense Account
wS.Range("L" & rowCount).Value = Abs(Val(rsT.Fields(1).Value)) 'Check Amount
rowCount = rowCount + 1
rsT.MoveNext
Loop
Set wS = objXLApp.Worksheets.Add
Set wS = objXLApp.Worksheets("Sheet2")
wS.NaMe = "Transfers" & Format(Me.DTPicker8.Value, "mmdd")
objXLApp.Sheets("Transfers" & Format(Me.DTPicker8.Value, "mmdd")).Activate
wS.Range("A1").Value = "To Account"
wS.Range("B1").Value = "From Account"
wS.Range("C1").Value = "Transfer Date"
wS.Range("D1").Value = "Transfer Memo"
wS.Range("E1").Value = "Transfer Amount"
rowCount = 2
Do While Not rsT1.EOF
wS.Range("A" & rowCount).Value = rsT1.Fields(0).Value 'To Account
wS.Range("B" & rowCount).Value = rsT1.Fields(1).Value 'From Account
wS.Range("C" & rowCount).Value = rsT1.Fields(2).Value 'Transfer Date
wS.Range("D" & rowCount).Value = Abs(Val(rsT1.Fields(3).Value)) 'Amount
wS.Range("E" & rowCount).Value = rsT1.Fields(4).Value 'Transfer Memo
rowCount = rowCount + 1
rsT1.MoveNext
Loop
objXLApp.ActiveWorkbook.SaveAs "C:\Users\Jim's Surface Pro 5\Dropbox\Working Folder\Jim dePrado\Quickbooks Access Files\" & "Checks and Transfers Import File " & Format(Now(), "mmddyyyy")
objXLApp.ActiveWorkbook.Close
Set qdF = Nothing
Set qdF1 = Nothing
Set rsT = Nothing
Set rsT1 = Nothing
Set objXLApp = Nothing
Set objXLBook = Nothing
Set wS = Nothing
MsgBox "done"
因此,您可能需要:
Set objXLApp = CreateObject("Excel.Application")
Set objXLBook = objXLApp.Workbooks.Add
Set wS = objXLBook.Worksheets(1) ' Sheet name is localised.
wS.Name = "Checks" & Format(Me.DTPicker8.Value, "mmdd")
' Should not be needed.
' objXLApp.Sheets("Checks" & Format(Me.DTPicker8.Value, "mmdd")).Activate
' ---
objXLBook.SaveAs "C:\Users\Jim's Surface Pro 5\Dropbox\Working Folder\Jim dePrado\Quickbooks Access Files\" & "Checks and Transfers Import File " & Format(Now(), "mmddyyyy")
Set wS = Nothing
Set objXLBook = Nothing
objXLApp.Quit
Set objXLApp = Nothing
我是一个非常新手的编码员,正在编写一个程序来从 Access table 中提取一些数据并将其放入 Excel Sheet。 Excel 工作簿创建正确,但是当我去保存它时,我得到一个
VBA Run-time error '1004' - Cannot access 'Checks and Transfers Import File 02122021.xlsx'.
当我尝试打开文件时,我收到一条消息,指出有人正在使用该文件,但我可以将其打开为“只读”。问题是没有其他人在使用该文件。我做错了什么?
'Transfers the checks/transfers from the two tables to an Excel sheet
Dim objXLApp As excel.Application
Dim objXLBook As excel.Workbook
Dim wS As excel.Worksheet
Dim rowCount As Integer
Dim rstChecks As New ADODB.Recordset
Dim rstTransfer As New ADODB.Recordset
Dim qdF As DAO.QueryDef
Dim rsT As DAO.Recordset
Dim qdF1 As DAO.QueryDef
Dim rsT1 As DAO.Recordset
Set qdF = CurrentDb.QueryDefs("tbl_BankImportChecks Query") ' Gets all fields from Table1
Set qdF1 = CurrentDb.QueryDefs("tbl_BankImportTransfers Query") ' Gets 401(k) contribution and match information
Set rsT = qdF.OpenRecordset
Set rsT1 = qdF1.OpenRecordset
rsT.MoveLast
rsT.MoveFirst
rsT1.MoveLast
rsT1.MoveFirst
Set objXLApp = CreateObject("Excel.Application")
objXLApp.Workbooks.Add
objXLApp.Visible = True
Set wS = objXLApp.Worksheets("Sheet1")
wS.NaMe = "Checks" & Format(Me.DTPicker8.Value, "mmdd")
objXLApp.Sheets("Checks" & Format(Me.DTPicker8.Value, "mmdd")).Activate
wS.Range("A1").Value = "Bank Account"
wS.Range("B1").Value = "Payee"
wS.Range("C1").Value = "Check Date"
wS.Range("D1").Value = "Check Number"
wS.Range("E1").Value = "Check Memo"
wS.Range("F1").Value = "Address Line 1"
wS.Range("G1").Value = "Address Line 2"
wS.Range("H1").Value = "Address City"
wS.Range("I1").Value = "Address State"
wS.Range("J1").Value = "Address Zip"
wS.Range("K1").Value = "Expenses Account"
wS.Range("L1").Value = "Expenses Amount"
wS.Range("M1").Value = "Expenses Memo"
wS.Range("N1").Value = "Expenses Customer Job"
wS.Range("O1").Value = "Not Used"
wS.Range("P1").Value = "Temp Type"
wS.Range("Q1").Value = "Paycheck Amount"
wS.Range("R1").Value = "State"
rowCount = 2
Do While Not rsT.EOF
wS.Range("A" & rowCount).Value = rsT.Fields(4).Value 'Bank Account (11100)
wS.Range("B" & rowCount).Value = rsT.Fields(0).Value 'Vendor
wS.Range("C" & rowCount).Value = rsT.Fields(2).Value 'Check Date
wS.Range("D" & rowCount).Value = "EFT"
wS.Range("E" & rowCount).Value = rsT.Fields(3).Value ' Check Memo
wS.Range("K" & rowCount).Value = rsT.Fields(5).Value 'Expense Account
wS.Range("L" & rowCount).Value = Abs(Val(rsT.Fields(1).Value)) 'Check Amount
rowCount = rowCount + 1
rsT.MoveNext
Loop
Set wS = objXLApp.Worksheets.Add
Set wS = objXLApp.Worksheets("Sheet2")
wS.NaMe = "Transfers" & Format(Me.DTPicker8.Value, "mmdd")
objXLApp.Sheets("Transfers" & Format(Me.DTPicker8.Value, "mmdd")).Activate
wS.Range("A1").Value = "To Account"
wS.Range("B1").Value = "From Account"
wS.Range("C1").Value = "Transfer Date"
wS.Range("D1").Value = "Transfer Memo"
wS.Range("E1").Value = "Transfer Amount"
rowCount = 2
Do While Not rsT1.EOF
wS.Range("A" & rowCount).Value = rsT1.Fields(0).Value 'To Account
wS.Range("B" & rowCount).Value = rsT1.Fields(1).Value 'From Account
wS.Range("C" & rowCount).Value = rsT1.Fields(2).Value 'Transfer Date
wS.Range("D" & rowCount).Value = Abs(Val(rsT1.Fields(3).Value)) 'Amount
wS.Range("E" & rowCount).Value = rsT1.Fields(4).Value 'Transfer Memo
rowCount = rowCount + 1
rsT1.MoveNext
Loop
objXLApp.ActiveWorkbook.SaveAs "C:\Users\Jim's Surface Pro 5\Dropbox\Working Folder\Jim dePrado\Quickbooks Access Files\" & "Checks and Transfers Import File " & Format(Now(), "mmddyyyy")
objXLApp.ActiveWorkbook.Close
Set qdF = Nothing
Set qdF1 = Nothing
Set rsT = Nothing
Set rsT1 = Nothing
Set objXLApp = Nothing
Set objXLBook = Nothing
Set wS = Nothing
MsgBox "done"
因此,您可能需要:
Set objXLApp = CreateObject("Excel.Application")
Set objXLBook = objXLApp.Workbooks.Add
Set wS = objXLBook.Worksheets(1) ' Sheet name is localised.
wS.Name = "Checks" & Format(Me.DTPicker8.Value, "mmdd")
' Should not be needed.
' objXLApp.Sheets("Checks" & Format(Me.DTPicker8.Value, "mmdd")).Activate
' ---
objXLBook.SaveAs "C:\Users\Jim's Surface Pro 5\Dropbox\Working Folder\Jim dePrado\Quickbooks Access Files\" & "Checks and Transfers Import File " & Format(Now(), "mmddyyyy")
Set wS = Nothing
Set objXLBook = Nothing
objXLApp.Quit
Set objXLApp = Nothing