Использование цикла For для выбора определенных полей в Access и вставки их в Excel - PullRequest
0 голосов
/ 25 января 2019

Я сделал специальную форму доступа, в которой много полей с одинаковыми именами, только число в конце изменений.У меня есть поля с именами «Код1», «Код2», «Код3» и т. Д. Я хочу вставить поля из представления «Форма» в ячейки Excel.В нем около 150 полей, и я не хочу добавлять их одно за другим.

Я сделал кнопку, которая открывает шаблон Excel, и сделал цикл For, но я застрял.Это идея:

Set MyXL = CreateObject("Excel.Application")

        With MyXL

        .Application.Visible = True
        .Workbooks.Open "F:\0. Main\01.Templates\Order.xltx"


        Dim broj As Variant
        broj = UCase(ID)

        Dim Kod As Variant
        Dim Tip As Variant
        Dim Kolic As Variant

        For i = 1 To 30

   -------> Kod = Code(i).Value
            .Worksheets("Sheet1").Cells(11 + i, 2).Value = Kod

   -------> Tip = Type(i).Value
            .Worksheets("Sheet1").Cells(11 + i, 3).Value = Tip

   -------> Tip = Qty(i).Value
            .Worksheets("Sheet1").Cells(11 + i, 3).Value = Kolic

        Next i

Я не знаю, как включить FieldName + (число) в цикл For

Ответы [ 2 ]

0 голосов
/ 25 января 2019
Option Compare Database
Sub Export()
Dim tableName As String

    tableName = InputBox("What is the name of the table you want to export?")
    Dim outputFileName As String
    outputFileName = CurrentProject.Path & "\Export_" & Format(Date, "yyyyMMdd") & ".xls"
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, tableName, outputFileName, True

    Set myXl = CreateObject("Excel.Application")
    myXl.Visible = True
    myXl.workbooks.Open outputFileName

End Sub
0 голосов
/ 25 января 2019

Пожалуйста, проверьте, будет ли работать простая вставка всего набора записей непосредственно в диапазон Excel (перезапишет, начиная с L2, столько, сколько нужно):

.Worksheets("Sheet1").Cells(12, 2).CopyFromRecordset

Если это работает, вы можете очиститьдиапазон перед вставкой на него:

.Worksheets("Sheet1").Range("L2:N100000").ClearContent

Если это не поможет, вы можете перебрать набор записей в Access, например, так:

Set rs = CurrentDb.OpenRecordset("WhatEver", dbOpenDynaset)
If Not (rs.BOF And rs.EOF) Then
    rs.MoveFirst
    i = 1
    Do
        ... = rs.Fields("Code" & i).Value
        ...
        rs.MoveNext
        i = i + 1
    Loop Until i > 30 ' or Until rs.EOF
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...