Вывод данных из запроса в Excel: невозможно работать с данными в Excel - PullRequest
1 голос
/ 28 февраля 2020

У меня проблема с работой над файлом 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 Библиотека объектов

Спасибо за ваше время и хорошего дня!

1 Ответ

1 голос
/ 28 февраля 2020

, как сказал @Kostas K, вам нужен объект Excel application для работы с Excel из Access.

Это будет выглядеть так.

Dim XLA AS New Excel.Application
Dim WKB As Excel.Workbook

'Open workbook using the excel application object
Set WKB = XLA.Workbooks.Open(CurrentProject.Path & "\#Export\Template.xlsx")

Некоторые также предпочитают позднюю привязку и Позднее связывание означает, что вы можете удалить жесткие ссылки из приложения Access и работать с любой доступной версией Excel. В этом случае приведенный выше код выглядит следующим образом

Dim XLA AS object
Dim WKB As object
SET XLA = CreateObject("Excel.Application")

'Open workbook using the excel application object
Set WKB = XLA.Workbooks.Open(CurrentProject.Path & "\#Export\Template.xlsx")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...