Экспорт результатов запроса Access по записи на новый лист в файле - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь разобраться, как разделить уникальные записи запроса на новые листы в той же книге Excel (файл шаблона).Мой запрос на доступ имеет следующие поля:

Номер проекта, Название проекта, Номер задачи, Спонсор проекта, Бюджет на весь год, Апрель, май, июнь, июль, август, сентябрь, октябрь, ноябрь, декабрь, январь,Февраль, март, полный год, прогноз на год.

Я хочу иметь возможность иметь новый рабочий лист для каждого номера проекта и перечислять соответствующие данные, а также переименовывать рабочий лист как номер проекта ... У меня естьполный блок разума, потратив часы на то, чтобы поиграть с другим кодом для похожих запросов, но не могу заставить себя вести себя так, как мне нужно?

Есть ли у кого-нибудь идеи или могли бы указать мне правильное направление, я не полный новичок в VBA, но этот меня хорошо и действительно застрял.

Большое спасибо :)

Привет всем, спасибо за предложения, мне удалось собрать воедино код, чтобы пролить данные и экспортировать в отдельные таблицы, и все работает нормально. Теперь мне нужно скопировать любые связанные данные из другого запроса всоответствующий лист в «таблице» под другими данными, но мне не очень повезло.Либо он скопирует одну запись на одну из рабочих таблиц, либо все записи на одну рабочую таблицу независимо от того.Кто-нибудь может указать мне правильное направление?

Option Compare Database

Global iter As Integer
Sub Loop_Practice2()



 Dim rs As DAO.Recordset
    Dim ProjectNumber As DAO.Recordset
    Dim i As Integer
    Dim j As Integer
    Dim Worksheet_Count As Integer
    Dim sSql As String
    Dim Project_Count As Integer
    Dim iCol As Integer
    Dim mypath As String
    Dim mvalue As String
    Dim myfile As String
    Dim mynewfile As String
    Dim mynewpath As String
    Dim wb As Excel.Workbook
    Dim WS As Excel.Worksheet
    Dim sFile As String
    mypath = Application.CurrentProject.Path & "\"
    myfile = ("PIN Export Template.xlsx")
    mynewpath = (Application.CurrentProject.Path & "\")
    mynewfile = ("PIN Export Template.xlsx - " & Format(Now(), "yyyy-mm-dd") & ".xlsx")
    sFile = mypath & myfile
'    ' Use Dir to check if file exists
    If Dir(sFile) = "" Then
' if file does not exist display message
        MsgBox "Could not find the file " & sFile & " - Please ensure it is in the same location as the database."
        Exit Sub
    End If
'Open Excel
    Excel.Application.Visible = True
    Excel.Application.Workbooks.Open (sFile)
'Define Access Query to be exported
    Set ProjectNumber = CurrentDb.OpenRecordset("SELECT DISTINCT qry_MP_PDP_PIN_Analysis_Step_01_FY_Position_Monthly.[Project Number] from qry_MP_PDP_PIN_Analysis_Step_01_FY_Position_Monthly")
    If ProjectNumber.EOF Then Exit Sub
    ProjectNumber.MoveLast
    Project_Count = ProjectNumber.RecordCount - 1
    ProjectNumber.MoveFirst
'Create individual PIN sheets from Query Dataset
    Excel.Application.Worksheets("PIN").Select
    Worksheet_Count = Excel.Application.Worksheets("PIN").Select
    Do Until Worksheet_Count = Project_Count
        Worksheets("PIN").Copy After:=Worksheets("PIN")
        If iter = 0 Then
            iter = 1
        End If
        ActiveSheet.Name = ("PIN") & iter
        iter = iter + 1
        Worksheet_Count = Worksheet_Count + 1
    Loop
    j = 1
'Add qry_MP_PDP_PIN_Analysis_Step_01_FY_Position_Monthly data
    Do Until ProjectNumber.EOF
        sSql = "SELECT *"
        sSql = sSql & " FROM qry_MP_PDP_PIN_Analysis_Step_01_FY_Position_Monthly"
        sSql = sSql & " Where qry_MP_PDP_PIN_Analysis_Step_01_FY_Position_Monthly.[Project Number]=" & ProjectNumber("[Project Number]")
        Set rs = CurrentDb.OpenRecordset(sSql, dbOpenDynaset)
        Set Pin_Sheet = ActiveWorkbook.Sheets("PIN" & j)
'Rename the PIN sheet to individual Project Number
        Pin_Sheet.Name = ProjectNumber("[Project Number]")
'Create PIN Analysis Column Headings
        For iCol = 0 To rs.Fields.Count - 1
            Pin_Sheet.Cells(13, iCol + 4).Value = rs.Fields(iCol).Name
        Next
'Populate PIN_Analysis_Step_01_FY_Position_Monthly Data
        Pin_Sheet.Cells(14, 4).CopyFromRecordset rs
        j = j + 1
        ProjectNumber.MoveNext
        Loop
    Excel.Application.ActiveWorkbook.SaveAs (mynewpath & mynewfile)
    Set Pin_Sheet = Nothing
    Set ProjectNumber = Nothing
    Set ProjectNumber2 = Nothing
    Set rs = Nothing
    Set ProjectNumber = Nothing
    Set wb = Nothing
    Set WS = Nothing
    CurrentDb.Close

ActiveWorkbook.Close
Excel.Application.Quit
End Sub

1 Ответ

0 голосов
/ 25 июня 2018

AS 'Erik von Asmuth' Предложил, что это широкий вопрос, разделенный на другую задачу и поделитесь своим кодом. что вы пытались до сих пор.

Я могу указать только одну статью, написанную Даниелем Пино . Он создал функцию под названием ExportRecordset2XLS , через которую вы можете передать свой набор записей, имя листа и т. Д.

Вы должны создать цикл для другого номера проекта и передать его в качестве аргумента этой функции. вам также нужно изменить этот код для обработки другой задачи в соответствии с вашими требованиями.

https://www.devhut.net/2017/03/15/ms-access-vba-export-recordset-to-excel/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...