Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
 Аватар для VinniPuh
9147 / 6176 / 594
Регистрация: 27.03.2013
Сообщений: 20,047

Экспорт из Access в Excel

09.12.2025, 09:28. Показов 4970. Ответов 64
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравия во все органы.
Ранее ни когда не делал экспорт данных из Access в Excel,
все делал для печати в отчетах самого Access.
А тут понадобилось переносить данные в Excel.
Помогите люди добрые на примере.
В форме - Средства измерения
- Выбираем - Год
- Выбираем - Лабораторию
- Нажимаем кнопку - Экспорт в Excel

на основе запроса - zСредстваИзмеренияЭкспорт, отфильтрованные данные должны вставиться
в Книгу Excel - Поверка КИПиА
в лист - Например как на картинках

Название лаборатории в шапке к примеру - ЦЭРЛ
как и соответственный год
Миниатюры
Экспорт из Access в Excel   Экспорт из Access в Excel  
Вложения
Тип файла: zip Приборы-01 (Экспорт) 2025.12.09.zip (93.5 Кб, 18 просмотров)
Тип файла: zip Поверка КИПиА.zip (5.3 Кб, 19 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.12.2025, 09:28
Ответы с готовыми решениями:

Экспорт-импорт данных Excel-Access-Excel
Доброе время суток уважаемые форумчане. Приходит информация в экселевской таблице. Скидываю её в...

Excel -> Access -> Excel, импорт - экспорт
Добрый день! Есть табель учета рабочего времени в таблице Excel, задача - переместить данные со...

Экспорт-импорт из access в access 2003
сть две одинаковые по структуре таблицы access находящиеся на разных компах. Как сделать так чтобы...

64
Мы один, давай на "ты"
3858 / 1400 / 348
Регистрация: 16.06.2016
Сообщений: 3,300
10.12.2025, 11:40
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Всего 130 строк
убери ещё
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[quote="Eugene-LS;17683128"]' Вставка данных
    vVal = "SELECT Вид, Модель, Зав№СИ AS Зав, ДиапазонСИ AS Значение, ЕдИзмерения, " & vbCrLf & _
                "КлассТочности, МесяцПов, МестоСредаИзмНазначения AS Место" & vbCrLf & _
            "FROM zСредстваИзмеренияОбщий" & vbCrLf & _
            "WHERE ((ФлВыводГ=-1) AND (ФлСкрытьСтСИ=0) AND (ГодПов='" & Me!ВыборГода & "') " & _
                "AND (Лаборатория= '" & Me!ВыборЛаборатории & "'))" & vbCrLf & _
            "ORDER BY Зав№СИ, ДиапазонСИ, МесяцПов;"
    'Debug.Print vVal
    Set rs = CurrentDb.OpenRecordset(vVal, 4) ' dbOpenSnapshot = 4
'Проверка есть ли данные для вывода:
    With rs
        If .BOF = True And .EOF = True Then 'записей нет
            MsgBox "Запрос не вернул записей, экспорт прекращён!", vbExclamation, "Ошибка экспорта данных"
            GoTo MakeReport_Bye
        End If
        .MoveLast
            lRecCount = rs.RecordCount 'кол-во записей в наборе (принимаемых строк)
        .MoveFirst
    End With[/quote]
используй набор из формы
1
 Аватар для VinniPuh
9147 / 6176 / 594
Регистрация: 27.03.2013
Сообщений: 20,047
10.12.2025, 14:52  [ТС]
Eugene-LS, Ну ты меня прям забаловал совсем.
0
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 818
10.12.2025, 19:12
Еще вариант в качестве концепта, именно как концепта, так как работает ну очень медленно и могут быть приколы по ошибкам.
Идея в том что бы все правила создания задать в самом шаблоне.
Вложения
Тип файла: zip Приборы-01 (Экспорт) 2025.12.09.zip (213.7 Кб, 21 просмотров)
2
Модератор
Эксперт MS Access
 Аватар для shanemac51
12237 / 5084 / 814
Регистрация: 07.08.2010
Сообщений: 14,957
Записей в блоге: 4
10.12.2025, 20:45
Цитата Сообщение от Swa111 Посмотреть сообщение
работает ну очень медленно и могут быть приколы по ошибкам
- супер медленно (180 строк более минуты)
- приколы даже смотреть не стала
0
 Аватар для VinniPuh
9147 / 6176 / 594
Регистрация: 27.03.2013
Сообщений: 20,047
10.12.2025, 22:33  [ТС]
Цитата Сообщение от Swa111 Посмотреть сообщение
в качестве концепта
Мне для общего развития пригодится.
0
Эксперт MS Access
 Аватар для Eugene-LS
13252 / 5930 / 1526
Регистрация: 05.10.2016
Сообщений: 16,592
12.12.2025, 00:16
Цитата Сообщение от Swa111 Посмотреть сообщение
Идея в том что бы все правила создания задать в самом шаблоне.
VinniPuh, слушай:
А давай назначим Excel "кроликом" - и пойдём к нему мёд лопать!
Для этого переложим солидную часть работы на шаблон MS Excel, а сами будем токма руководить ("рукой водить") процессом!

Модуль (внешний) файла шаблона:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
' ----------------------------------------------------------------------------------------/
' Name:      modRunMe - Именно внешний модуль!!! - никаких модулей книги ("ThisWorkbook")!
' Kind:      Module
' Purpose:   Запуск после открытия шаблона
' Author:    es
' Date:      11.12.2025
' ----------------------------------------------------------------------------------------/
Option Explicit
 
Public Function FillTemplate(ibjForm As Object, ibjRecordset As Object) As Long
' Заполнение шаблона по данным формы MS Access <ibjForm>
' Возвращает кол-во табличных записей (не код ошибки пока)
' ----------------------------------------------------------------------------------------/
' Аргументы:
'   ibjForm       = Форма MS Access
'   ibjRecordset  = Recordset (Любой с .MoveLast и .MoveFirst)
' ----------------------------------------------------------------------------------------/
Dim objSheet As Worksheet, objRange As Range, objRangeDst As Range
Dim sVal As String, lVal As Long, lRecNo As Long, lRow As Long, lRecCount As Long
Dim lLastTableRow As Long
Const clFirstTableRow As Long = 9                    ' Номер первой строки таблицы в шаблоне
 
On Error GoTo FillTemplate_Err
' ----------------------------------------------------------------------------------------/
    Set objSheet = ThisWorkbook.Worksheets(1)       ' Устанавливается ссылка на активный рабочий лист
' ----------------------------------------------------------------------------------------/
' Подсчёт записей в переданном наборе - для добавления новых строк под него (в шаблоне всего одна)
    ibjRecordset.MoveLast                           ' Переход на последнюю запись для точного подсчёта записей
    lRecCount = ibjRecordset.RecordCount            ' Кол-во записей в наборе (принимаемых строк)
    ibjRecordset.MoveFirst                          ' Возврат на первую запись - иначе не взлетит!
' Установки для формата табличных данных:
    lVal = lRecCount + (clFirstTableRow - 1)        ' Номер последней строки таблицы в шаблоне
    lLastTableRow = lVal                            ' Номер последней строки таблицы в шаблоне
' ----------------------------------------------------------------------------------------/
' Заполнение Шаблона:
' ----------------------------------------------------------------------------------------/
' Заголовок:
' - Заголовок слева = ЛАБА! - Вторая строка - Второй столбец
    objSheet.Cells(2, 2) = ibjForm.ВыборЛаборатории
' - Заголовок справа Текст! - В рукопашную!... Вторая строка - 7-й столбец
    objSheet.Cells(2, 7) = "цех № 57, Кот. № 4, КИПиА"
' - Заголовок середина - 6-я строка - Данные из формы:
    objSheet.Cells(6, 2) = "в: " & ibjForm.ВыборГода & " г."
' ----------------------------------------------------------------------------------------/
' Заполнение Таблицы:
 
' - Добавлям строки под данные таблицы ..... (xlDown=-4121 + xlFormatFromRightOrBelow = 1)
    For lVal = 1 To lRecCount - 1
        objSheet.Range("B9:J9").Insert -4121, 1
    Next lVal
' - Вставка данных из Recordset (9-я строка и 3-й столбец ):
    objSheet.Cells(clFirstTableRow, 3).CopyFromRecordset ibjRecordset
 
' - Нумерация записей в таблице (Столбец "№")
    lRecNo = 0
    For lRow = clFirstTableRow To lLastTableRow
        lRecNo = lRecNo + 1
        objSheet.Cells(lRow, 2) = lRecNo  ' Номер по порядку
    Next lRow
 
' - Отмена индикации первых 7-ми ошибок в диапазоне ячеек (всего 12)
    sVal = "B" & clFirstTableRow & ":J" & lLastTableRow
    Set objRange = objSheet.Range(sVal)
    For Each objRangeDst In objRange.Cells
        For lVal = 1 To 7
           objRangeDst.Errors(lVal).Ignore = True
        Next
    Next
' ----------------------------------------------------------------------------------------/
' Заполнение подвала  ...
' ----------------------------------------------------------------------------------------/
' Подпись 01 lVal-я строка - 3-й и 10-й столбец
    lVal = lRecCount + 12 ' Строка
    objSheet.Cells(lVal, 3) = "Начальник  цеха № 57"       ' Текст! - В рукопашную!
    objSheet.Cells(lVal, 10) = "В.В. Соколов"              ' Текст! - В рукопашную!
' Подпись 02
    lVal = lVal + 5 ' Строка
    objSheet.Cells(lVal, 3) = "Начальник  участка  КИПиА"  ' Текст! - В рукопашную!
    objSheet.Cells(lVal, 10) = "О.В. Соколов"              ' Текст! - В рукопашную!
    
    FillTemplate = lRecNo
 
FillTemplate_End:
    Set objRange = Nothing: Set objSheet = Nothing
    Exit Function
 
FillTemplate_Err:
    MsgBox "Error " & Err.Number & " - " & Err.Description & vbCrLf & _
           "In Function: FillTemplate - ThisWorkbook.", vbCritical, "Error!"
    Debug.Print "FillTemplate_Line: " & Erl & "."
    Err.Clear
    Resume FillTemplate_End
End Function


А в форме после этого останется практически только контроль за процессом (всего 86 строк!):
Private Sub КнЭкспортВExcel_Click()

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Private Sub КнЭкспортВExcel_Click() ' Событие кнопки: "Экспорт в Excel"
Dim objExcelApp As Object, objWBook As Object
Dim sVal, lVal&, sTemplatePath$
Dim rs As DAO.Recordset
    
    Const csTemplateFile$ = "Поверка КИПиА_v04.xls" ' Имя файла шаблона находящегося в папке приложения
'--------------------------------------------------------------------------------------------------------
On Error GoTo MakeReport_Err
 
' Тут проверки на значений
    sTemplatePath = CurrentProject.Path & "\" & csTemplateFile
    If Dir(sTemplatePath) = "" Then
        MsgBox "Шаблон: " & vbCrLf & sTemplatePath & vbCrLf & "Не Найден!", vbExclamation
        Exit Sub
    End If
    
    If Me.ВыборГода.ListIndex = -1 Then
        MsgBox "А год выбрать - Забыли!", vbExclamation
        Me.ВыборГода.SetFocus:  Me.ВыборГода.Dropdown
        Exit Sub
    End If
    
    If Me.ВыборЛаборатории.ListIndex = -1 Then
        MsgBox "А лабу выбирать - Я за вас должен!", vbExclamation
        Me.ВыборЛаборатории.SetFocus: Me.ВыборЛаборатории.Dropdown
        Exit Sub
    End If
 
' Подготовка Recordset к передаче
    sVal = "SELECT Вид, Модель, Зав№СИ AS Зав, ДиапазонСИ AS Значение, ЕдИзмерения, " & vbCrLf & _
                "КлассТочности, МесяцПов, МестоСредаИзмНазначения AS Место" & vbCrLf & _
            "FROM zСредстваИзмеренияОбщий" & vbCrLf & _
            "WHERE ((ФлВыводГ=-1) AND (ФлСкрытьСтСИ=0) AND (ГодПов='" & Me!ВыборГода & "') " & _
                "AND (Лаборатория= '" & Me!ВыборЛаборатории & "'))" & vbCrLf & _
            "ORDER BY Зав№СИ, ДиапазонСИ, МесяцПов;"
    'Debug.Print sVal
    Set rs = CurrentDb.OpenRecordset(sVal, dbOpenSnapshot) ' (dbOpenSnapshot = 4 если что ...)
 
' Проверка есть ли данные для вывода:
    With rs
        If .BOF = True And .EOF = True Then 'записей нет
            MsgBox "Запрос не вернул записей, экспорт прекращён!", vbExclamation, "Ошибка экспорта данных"
            GoTo MakeReport_Bye
        End If
    End With
 
' Енд оф проверки на значения
'--------------------------------------------------------------------------------------------------------
    DoCmd.Hourglass True 'Показать часики
'--------------------------------------------------------------------------------------------------------
' Запуск нового экземпляра Excel
    Set objExcelApp = CreateObject("Excel.Application")
    objExcelApp.WindowState = -4140 ' (-4140 = xlMinimized)
    objExcelApp.Visible = True
    Set objWBook = objExcelApp.Workbooks.Open(sTemplatePath) ' Открытие шаблона:
    objWBook.Application.DisplayAlerts = False               ' Отмена сообщений совместимости и прочего
 
'--------------------------------------------------------------------------------------------------------
' Запуск Функции из ШАБЛОНА!
     lVal = objExcelApp.Application.Run("FillTemplate", Me.Form, rs)
     
' ----------------------------------------------------------------------------------------/
'Сохранение файла на диске.
    sVal = CurrentProject.Path & "\ExportNew_" & Format(Now, "yyyy-mm-dd hh-nn-ss") & ".xls"
    objWBook.SaveAs sVal
 
    DoCmd.Hourglass False 'Вернуть нормальный курсор
    MsgBox "Готово!" & vbCrLf & "Успешно экспортировано: " & lVal & " записей." & vbCrLf & _
        "Файл: " & sVal, vbInformation, "Экспорт в шаблон Excel"
 
    objExcelApp.DisplayAlerts = True ' вкл. сообщений совместимости и прочего
    objExcelApp.WindowState = -4137  ' -4137 = xlMaximized (во весь экран)
    AppActivate objExcelApp.Caption  ' Делает активным окно приложения
 
MakeReport_Bye:
    If rs Is Nothing = False Then rs.Close
    Set rs = Nothing:  Set objWBook = Nothing: Set objExcelApp = Nothing
    Exit Sub
 
MakeReport_Err:
    DoCmd.Hourglass False 'Вернуть нормальный курсор
    If objExcelApp Is Nothing = False Then objExcelApp.Visible = True
    MsgBox "Ошибка " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
        "в процедуре: ""Экспорт в шаблон Excel""", vbCritical, "Error"
    Resume MakeReport_Bye
End Sub

Для умеющих читать "особенно внимательно" - повторяю:
В Excel используем именно внешний модуль! - никаких модулей книги ("ThisWorkbook")!

Полный комплект (приложение для теста и шаблон) - во вложении - Приятного аппетиту! ...
Вложения
Тип файла: zip Поверка КИПиА_v04.zip (181.9 Кб, 10 просмотров)
1
Эксперт MS Access
 Аватар для Eugene-LS
13252 / 5930 / 1526
Регистрация: 05.10.2016
Сообщений: 16,592
12.12.2025, 08:13
VinniPuh, Тройная (!!!) вложенность запросов (источник данных подчинённой формы например) - Это круто.
Сократил до одного запроса для всего + отбор по тексту перевёл в отбор по цифре.
Получилось короче и главное быстрее.
...
Полный комплект (приложение для теста и шаблон) - во вложении ( и наблюдаем уменьшение размеру ...)
Вложения
Тип файла: zip Поверка КИПиА_v06.zip (152.0 Кб, 8 просмотров)
1
Модератор
Эксперт MS Access
 Аватар для shanemac51
12237 / 5084 / 814
Регистрация: 07.08.2010
Сообщений: 14,957
Записей в блоге: 4
12.12.2025, 08:57
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Получилось короче и главное быстрее.
быстрее - согласна,
но короче ли
100+ строк к модуле екселя
90+ строк в модуле аксесс

причем обработка разделена на 2 части, а значит логически это сложнее сопровождать, сложнее ввести любые доработки
0
Эксперт MS Access
 Аватар для Eugene-LS
13252 / 5930 / 1526
Регистрация: 05.10.2016
Сообщений: 16,592
12.12.2025, 09:40
Цитата Сообщение от shanemac51 Посмотреть сообщение
100+ строк к модуле екселя и 90+ строк в модуле аксесс
Короче, например, получился запрос для рекорсета передаваемого в шаблон.
...
Ну там можно конечно от чего-то отказаться, удалять же не писать.
Ув. Панург, например, предлагал использовать рекордсет формы, но там по полям не совпадает с шаблоном, а было бы хорошо конечно.
Можно отказаться от экранирования ошибок формата ячеек (используется только для красоты).
+ Можно оптимизировать проверку кол-ва записей, и вместо:
Visual Basic
1
2
3
4
5
6
7
' Проверка есть ли данные для вывода:
    With rs
        If .BOF = True And .EOF = True Then 'записей нет
            MsgBox "Нет записей для экспорта - экспорт прекращён!", vbExclamation, "Ошибка экспорта данных"
            GoTo MakeReport_Bye
        End If
    End With
Написать простенько, используя поле на форме:
Visual Basic
1
2
3
4
    If Not frmMain.ВсегоПриборов > 0 Then     ' Проверка есть ли данные для вывода
        MsgBox "Нет записей для экспорта - экспорт прекращён!", vbExclamation, "Ошибка экспорта данных"
        GoTo MakeReport_Bye
    End If
Из модуля шаблона можно смело убрать:
Visual Basic
1
    FillTemplate = Err.Number
- это я кстати забыл = остатки первого варианта, когда функция возвращала код ошибки или ноль.
и
Visual Basic
1
    Debug.Print "FillTemplate_Line: " & Erl & "."
И (не используемое в моём варианте) извращение:
Visual Basic
1
2
3
Public Sub MsgBoxReport(lRecords&)
    MsgBox "Успешно импортировано: " & lRecords & " записей.", vbInformation, "Искренне Ваш Excel"
End Sub
И уже - 5 строк долой ...
...
"Вылизывание" кода - может занимать ощутимое время, пока я запросы попытался оптимизировать, а там ещё ...
BTW: А начиналося фсё аж с 263-х строчек в пост№ 5 ... - процесс идёт ...
1
 Аватар для VinniPuh
9147 / 6176 / 594
Регистрация: 27.03.2013
Сообщений: 20,047
12.12.2025, 10:37  [ТС]
Цитата Сообщение от Eugene-LS Посмотреть сообщение
...А давай назначим Excel "кроликом" - и пойдём к нему мёд лопать!...
Приветствую!
1.Создал модуль
2.Скопировал в него твою процедуру
3.Скопировал процедуру в кнопку.

При компиляции вот так грязно ругается по буржуински.
Миниатюры
Экспорт из Access в Excel  
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12237 / 5084 / 814
Регистрация: 07.08.2010
Сообщений: 14,957
Записей в блоге: 4
12.12.2025, 10:37
Eugene-LS,
я для таких накладных предпочитала НТМ-формат
быстро и удобно
- основная часть кода стандартна, можно вынести в функцию
- основа - это строки запроса, которые легко переставить/добавить\удалить\закомментить
- автоподбор ширины столбцов и высоты строк
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Dim rs As DAO.Recordset
Dim sval, kx
Reset
Open "c:\temp\ww.htm" For Output As #1
Print #1, "<html>"
Print #1, "<table border=1 widh=100%>"
Print #1, "<tr><td>ЦЭРЛ ОГМетр<td>цех № 57<td>Кот. № 4, КИПиА"
Print #1, "</table>"
'````````
Print #1, "<h2>ПЕРЕЧЕНЬ</h2>"
Print #1, "<p>средств  измерений  подлежащих  поверке  (калибровке)"
Print #1, "<p>в: 2025 г.````````"
'````````
' Подготовка Recordset к передаче
  sval = "SELECT 0 as nn,"
  sval = sval & " Вид as [Вид СИ],"
  sval = sval & " Модель as [Модель СИ],"
  sval = sval & " Зав№СИ as [Зав номер],"
  sval = sval & " ДиапазонСИ as [Значение], "
  sval = sval & " ЕдИзмерения as [Ед Изм], "
  sval = sval & " КлассТочности as [Кл Точн], "
  sval = sval & " МесяцПов as [Мес Пов], "
  sval = sval & " МестоУстановки as [Место Устан]"
  sval = sval & " FROM qf_СредстваИзмерения_Sub"
  sval = sval & " WHERE ((КодЛабораторииВ=" & Me.ВыборЛаборатории & ")"
  sval = sval & " AND (ГодПов=" & Me.ВыборГода & "))"
    'Debug.Print sVal
    Set rs = CurrentDb.OpenRecordset(sval, dbOpenSnapshot) ' (dbOpenSnapshot = 4 если что ...)
   
Print #1, "<table border=1 width=100%>"
Print #1, "<tr>"
Dim j1, j1k
j1k = rs.Fields.Count
For j1 = 0 To j1k - 1
Print #1, "<th>"; rs.Fields(j1).name
Next j1
kx = 0
Do While rs.EOF = False
Print #1, "<tr>"
kx = kx + 1
For j1 = 0 To j1k - 1
If j1 = 0 Then
Print #1, "<td>"; kx
Else
Print #1, "<td>'" & rs.Fields(j1).Value
End If
Next j1
rs.MoveNext
Loop
Print #1, "</table>"
Print #1, "<table border=0 width=100%>"
Print #1, "<tr><td><td>Начальник  цеха № 57<td>------------<td>В.В. Соколов"
 
Print #1, "<tr><td><td>Составил:<td>------------<td>"
 
Print #1, "<tr><td><td>Начальник  участка  КИПиА<td>------------<td>О.В. Соколов"
Print #1, "</table>"
Print #1, "</html>"
Reset
Миниатюры
Экспорт из Access в Excel   Экспорт из Access в Excel  
3
Эксперт MS Access
 Аватар для Eugene-LS
13252 / 5930 / 1526
Регистрация: 05.10.2016
Сообщений: 16,592
12.12.2025, 10:50
Цитата Сообщение от VinniPuh Посмотреть сообщение
2.Скопировал в него твою процедуру
Не то ... и не туда!
Читай внимательнее пожалуйста! - Это нужно было в модуль ШАБЛОНА!
... кофейку - не!?

Пример (подсокращённый по просьбе ув. shanemac51) ниже:
Вложения
Тип файла: zip Поверка КИПиА_v07.zip (150.6 Кб, 12 просмотров)
1
Эксперт MS Access
 Аватар для Eugene-LS
13252 / 5930 / 1526
Регистрация: 05.10.2016
Сообщений: 16,592
12.12.2025, 10:51
Цитата Сообщение от shanemac51 Посмотреть сообщение
я для таких накладных предпочитала НТМ-формат
Это не ко мне - это к VinniPuh, это фсё он затеял!
...
Благодаря вашему посту про сокращения - помахал шашкой ... и обнаружил пяток "корявок" - кои исправил (v07).
Если кто найдёт ещё - не стесняемся - пишем ... пожалуйста.
Эх ... спешка фсё ... Спешка!
0
 Аватар для VinniPuh
9147 / 6176 / 594
Регистрация: 27.03.2013
Сообщений: 20,047
12.12.2025, 11:41  [ТС]
Всем помощникам Большое СПАСИБИЩЕ!!!
Такими темпами и с такими учителями, я наверное скоро самый Вумный стану в своём стойбище.
0
 Аватар для VinniPuh
9147 / 6176 / 594
Регистрация: 27.03.2013
Сообщений: 20,047
12.12.2025, 13:38  [ТС]
Eugene-LS, Блин
Решил изменить формат
с
Visual Basic
1
yyyy-mm-dd hh-nn
на
Visual Basic
1
yyyy.mm.dd hh-nn
Ну типа точки вместо палочек в дате
в тут:
Visual Basic
1
2
3
' Сохранение файла на диске.
 '   sVal = CurrentProject.Path & "\Отчеты\Export-" & Format(Now, "yyyy-mm-dd hh-nn")
    sVal = CurrentProject.Path & "\Отчеты\Поверка-КИПиА-" & Format(Now, "yyyy.mm.dd hh-nn")
Сохраненный файл сохранялся как - просто файл, без расширения типа файла

Но когда наморщил мозг и решился добавить -
Visual Basic
1
 & ".xls"
Visual Basic
1
2
3
' Сохранение файла на диске.
 '   sVal = CurrentProject.Path & "\Отчеты\Export-" & Format(Now, "yyyy-mm-dd hh-nn")
    sVal = CurrentProject.Path & "\Отчеты\Поверка-КИПиА-" & Format(Now, "yyyy.mm.dd hh-nn") & ".xls"
то стало норм.
Почему если тире стоят, то расширение не обязательно, а если точки, то нужно указывать расширение?
Или это касается только для моего А2003
0
Эксперт MS Access
 Аватар для Eugene-LS
13252 / 5930 / 1526
Регистрация: 05.10.2016
Сообщений: 16,592
12.12.2025, 13:50
Цитата Сообщение от VinniPuh Посмотреть сообщение
а если точки, то нужно указывать расширение?
А подумать???
Разделитель между именем и расширением = точка + расширение тоже может быть длинным ...
Следовательно: VBA воспринимает последний кусок строки после точки как заданное расширение ...
1
 Аватар для VinniPuh
9147 / 6176 / 594
Регистрация: 27.03.2013
Сообщений: 20,047
12.12.2025, 13:55  [ТС]
Цитата Сообщение от Eugene-LS Посмотреть сообщение
...расширением = точка + расширение тоже может быть длинным ...
Понял.
Ни разу не слышал о - ДЛИННЫХ расширениях.
Спасибо, намотаю на ус.
0
Эксперт MS Access
 Аватар для Eugene-LS
13252 / 5930 / 1526
Регистрация: 05.10.2016
Сообщений: 16,592
12.12.2025, 14:05
Цитата Сообщение от VinniPuh Посмотреть сообщение
Ни разу не слышал о - ДЛИННЫХ расширениях.
О! - Я вам скажу ... это шикарно!
Например хранить запароленные архивы WinRar ( с рабочими данными клиентов) - с расширением: *.xhomemovie или *.extravideolayertrack_plus
...
0
266 / 50 / 18
Регистрация: 02.12.2024
Сообщений: 88
12.12.2025, 15:03
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Если кто найдёт ещё - не стесняемся - пишем ... пожалуйста.
Во-первых, хочется отметить хорошую стилистику кода (на мой любительский взгляд).
Секционирование по основным шагам алгоритма. Детальные комментарии, особенно по числовым константам.
Всё это очень помогает быстро вникнуть что происходит. Даже если с VBA вообще не знаком.

Типовое наименование переменных (нотация не суть важна, главное единообразно и со смыслом), обработка исключений, явное освобождение объектов (памяти) в конце.
Отличная демонстрация хорошей практики написания кода на любом языке программирования (для зануд: которые всё это поддерживают).

Во-вторых, раз есть такой запрос , то вот ещё пара мелочей (не претендующих на титул "корявки" ):
1) В xls-шаблоне объявлена, но не используется процедура MsgBoxReport.

2) Из Access бодро рапортуем об успехе, несмотря на фактический результат:
MsgBox "Готово!" & vbCrLf & "Успешно экспортировано: " & lVal & " записей." & vbCrLf & _ ...
Несмотря на то, что lVal может быть равен 0.
Сейчас ошибок в шаблоне нет. Проблема незаметна.
Если будут править шаблон, то ошибки могут появиться.

Как бы доработал:
В FillTemplate в случае возникновения ошибки обнулил бы lRecNo. А строку "FillTemplate = lRecNo" перенёс бы в блок FillTemplate_End.
В ExportToExcel в случае lVal = 0 сообщил бы только о том, что при заполнении шаблона что-то пошло не так, и не сохранял бы файл.
1
Эксперт MS Access
 Аватар для Eugene-LS
13252 / 5930 / 1526
Регистрация: 05.10.2016
Сообщений: 16,592
12.12.2025, 15:34
Цитата Сообщение от XDlf Посмотреть сообщение
хочется отметить хорошую стилистику кода (на мой любительский взгляд)
Спасибо на добром слове!
Для себя (любимого) я так не стараюсь . А раз уж "для людей", то уж извольте ... - комментить по полной!

Дальше:
Цитата Сообщение от XDlf Посмотреть сообщение
но не используется процедура MsgBoxReport
Она опциональна, и это всего 3 строчки - для демонстрации как может выглядеть вызов Excel процедуры извне.
И да, в 07+ версиях она даже не упоминается, а вот если кому захочется? - а вот есть готовое - используйте!

Цитата Сообщение от XDlf Посмотреть сообщение
несмотря на фактический результат
Ну почему же - функция возвращает последнее значение нумератора записей, который начинается с 1 и если он больше 1 - то прошло, и это можно легко проверить, а это лишний код проверок ... + анализ возвращаемых ошибок ... = + пара - четвёрка десятков строк ...
А Галина и так написала что код длинный ....

Воспринимайте это как "рыбу" - а дальше вариации ...

По секрету:
Как выяснилось Пуху, на самом деле, нужно выводить 3 листа в книгу, по всем трём вариациям Лаб (по одной на листе).
А это всё меняет!
И решение уже готово - сомневаюсь что "ЭТО" (нелогичное) нужно публиковать на форуме ...

Спасибо! (с меня плюсики!)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.12.2025, 15:34

Экспорт записей из таблиц access в excel и наоборот
Здравствуйте, уважаемые участники! Стоит такая задача: Необходимо экспортировать записи из таблиц...

Экспорт из access в excel в конкретные ячейки
Уважаемые коллеги, здравствуйте! Возник вопрос по экспорту значений полей с формы в конкретные...

Программный экспорт сводной таблицы из бд Access в Excel
Доброго времени суток! Мучаюсь уже не один день, очень нужна помощь специалистов! Проблема...

Программный экспорт таблицы из Access в Excel
Скажите пожалуйста, как программно осуществить экспорт таблицы access в excel. всем спасибо!

Экспорт данных из Access в Excel
как можно осуществить экспорт данных из Аксесса в Эксель?????


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru