У меня проблема с работой над файлом Excel из Access. Я создал запрос в базе данных Access, который успешно экспортирован в указанный файл c Excel (называемый «Template.xlsx»). Этот файл содержит 2 листа: - лист 1 с именем «v_def», содержащий шаблон; - лист 2, в который был экспортирован запрос (имя совпадает с запросом).
Что я пытаюсь сделать из макроса в Access, это поместить данные из моего запроса в шаблон. Пожалуйста, смотрите код ниже.
Public Sub COTATION_FORMAT()
'Declare variables
Dim WKB As Excel.Workbook
Dim WKS As Excel.Worksheet
Dim WksQuery As Excel.Worksheet
Dim TimeStamp As String
'Initialize variables
Set WKB = Workbooks.Open(CurrentProject.Path & "\#Export\Template.xlsx")
Set WKS = WKB.Sheets("V_DEF")
Set WksQuery = WKB.Sheets("Q_EXPORT_COTATION")
TimeStamp = FORMAT(CStr(Now), "dd.mm.yyyy_hh.mm.ss")
On Error GoTo ErrHandle
'Data for template left block
With WKS
.Range("C5").Value = WksQuery.Range("B2").Value
.Range("C6").Value = WksQuery.Range("C2").Value
.Range("B7").Value = WksQuery.Range("D2").Value
.Range("B8").Value = WksQuery.Range("E2").Value
.Range("A11").Value = WksQuery.Range("F2").Value
End With
'Data for template columns
With WKS
.Range("A17") = WKB.Sheets(2).Range("D2").Value
.Range("B17") = WKB.Sheets(2).Range("G2").Value & " " & WKB.Sheets(1).Range("H2").Value & " " & WKB.Sheets(1).Range("I2").Value & " " & WKB.Sheets(1).Range("J2").Value & " " & WKB.Sheets(1).Range("K2").Value
.Range("C17") = WKB.Sheets(2).Range("L2").Value & " " & WKB.Sheets(1).Range("M2").Value & " " & WKB.Sheets(1).Range("N2").Value & " " & WKB.Sheets(1).Range("O2").Value & " " & WKB.Sheets(1).Range("P2").Value
'.Range("D17") = Wks.Sheets(2).Range("").Value
.Range("E17") = WKB.Sheets(2).Range("Q2").Value
.Range("F17") = WKB.Sheets(2).Range("R2").Value
.Range("G17") = WKB.Sheets(2).Range("S2").Value
.Range("H17") = WKB.Sheets(2).Range("T2").Value
.Range("I17") = WKB.Sheets(2).Range("U2").Value
.Range("J17") = WKB.Sheets(2).Range("V2").Value
.Range("K17") = WKB.Sheets(2).Range("AC2").Value & " x " & WKB.Sheets(1).Range("AD2").Value & " x " & WKB.Sheets(1).Range("AE2").Value
.Range("L17") = WKB.Sheets(2).Range("X2").Value
.Range("M17") = WKB.Sheets(2).Range("W2").Value
.Range("N17") = WKB.Sheets(2).Range("X2").Value
.Range("O17") = Range("N17").Value * Range("J17").Value
.Range("P17") = WKB.Sheets(2).Range("E2").Value
End With
'delete export data without impacting template
'save as another file to preserve template
WKB.Sheets(2).Delete
WKB.SaveAs "Cotation_" & TimeStamp, xlWorkbookDefault
'ending message
MsgBox "Template done ! ", vbOKOnly + vbInformation, "ACCESS"
ExitHandle:
WKB.Close
Set WKS = Nothing
Set WKB = Nothing
Exit Sub
ErrHandle:
MsgBox Err.Number & " - " & Err.Description, vbCritical, "RUNTIME ERROR"
Resume ExitHandle
End Sub
Дело в том, что у меня нет ошибок при запуске этого кода, но в файле Excel ничего не происходит. Данные не копируются с одного листа на другой. Я, должно быть, что-то делаю не так, объявляя переменную Workbook, но не вижу, что именно.
Если кто-то знает, что я делаю не так, пожалуйста, не стесняйтесь делиться:)
Я использую Office 365 на компьютере windows 10, если это помогает. В справочных инструментах я проверил следующее:
- Библиотека Microsoft Access 16.0
- Библиотека объектов Microsoft Office 16.0
- Библиотека объектов Microsoft Excel 16.0
- OLE Automation
- VB для приложений
- Движок базы данных Microsoft Office 16.0 Access Библиотека объектов
Спасибо за ваше время и хорошего дня!