Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239

Оптимизация кода

19.03.2014, 07:58. Показов 2144. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые специалисты, ниже я привел код, который работает, но отрабатывает очень длительное время.
Возможно ли как то его оптимизировать, что бы код отрабатывался быстрее.
Пояснения к коду:
- Обработка ошибки в коде необходима, если один или несколько файлов "Фирма.." открыт в данный момент в монопольном режиме другим сотрудником.
- Приведение к правильному ЦФО необходимо, так как в каждом файле наименование магазина указывается по разному, а мне необходимо в сводной таблице единые наименования (Повлиять на правила заполнения исходных файлов нет возможности)

Скрин справочника для примера во вложении

Есть предположение, что можно не очищать каждый раз сводную таблицу с приказами, а обновлять данные,
но ускорит ли это выполнение процедуры я не знаю.

Есть желание рассмотреть предложения и развиваться в правильную сторону, заранее спасибо.

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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
Private Sub ДалееПриказы_Click()
Dim sql As DAO.Recordset
Dim n As Integer
Dim pat(1 To 15) As String
Dim tbl(1 To 15) As String
Dim a, cfo, patch, tblFirma, sqp, sqldell, sqlins, depust1, depust2 As String
' Путь к файлам данных
pat(1) = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд\" _
    & "Регистрация приказов- КАДРЫ\Регистрация приказов Фирма1.xls"
pat(2) = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд \" _
    & "Регистрация приказов- КАДРЫ\Регистрация приказов Фирма2.xls"
pat(3) = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд \" _
    & "Регистрация приказов- КАДРЫ\ Регистрация приказов Фирма3.xls"
pat(4) = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд \" _
    & "Регистрация приказов- КАДРЫ\Регистрация приказов Фирма4.xls"
pat(5) = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд \" _
    & "Регистрация приказов- КАДРЫ\Регистрация приказов Фирма5.xls"
pat(6) = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд \" _
    & "Регистрация приказов- КАДРЫ\Регистрация приказов Фирма6.xls"
pat(7) = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд \" _
    & "Регистрация приказов- КАДРЫ\Регистрация приказов Фирма7.xls"
pat(8) = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд \" _
    & "Регистрация приказов- КАДРЫ\Регистрация приказов Фирма8.xls"
pat(9) = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд \" _
    & "Регистрация приказов- КАДРЫ\Регистрация приказов Фирма9.xls"
pat(10) = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд \" _
    & "Регистрация приказов- КАДРЫ\Регистрация приказов Фирма10.xls"
pat(11) = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд \" _
    & "Регистрация приказов- КАДРЫ\Регистрация приказов Фирма11.xls"
pat(12) = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд \" _
    & "Регистрация приказов- КАДРЫ\Регистрация приказов Фирма12.xls"
pat(13) = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд \" _
    & "Регистрация приказов- КАДРЫ\ Регистрация приказов Фирма13.xls"
pat(14) = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд \" _
    & "Регистрация приказов- КАДРЫ\Регистрация приказов Фирма14.xls"
pat(15) = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд \" _
    & "Регистрация приказов- КАДРЫ\Регистрация приказов Фирма15.xls"
'Юридические лица
tbl(1) = "tblFirma1"
tbl(2) = "tblFirma2"
tbl(3) = "tblFirma3"
tbl(4) = "tblFirma4"
tbl(5) = "tblFirma5"
tbl(6) = "tblFirma6"
tbl(7) = "tblFirma7"
tbl(8) = "tblFirma8"
tbl(9) = "tblFirma9"
tbl(10) = "tblFirma10"
tbl(11) = "tblFirma11"
tbl(12) = "tblFirma12"
tbl(13) = "tblFirma13"
tbl(14) = "tblFirma14"
tbl(15) = "tblFirma15"
'Очищаем сводную таблицу
sqldell = "delete * from tblAllFirma"
CurrentDb.Execute sqldell
'Метка цикла добавления данных
Perebor:
n = n + 1
If n = 16 Then
'Удаляем сообщения связанные с некорректным заполнением файлов сотрудниками отдела кадров
DoCmd.DeleteObject acTable, "увольнение$D:G_ОшибкиИмпорта"
DoCmd.DeleteObject acTable, "увольнение$D:G_ОшибкиИмпорта1"
DoCmd.DeleteObject acTable, "увольнение$D:G_ОшибкиИмпорта2"
'depust1 = "DELETE FROM tblAllFirma WHERE [Дата увольнения]Is Null"
depust2 = "DELETE FROM tblAllFirma WHERE [Дата увольнения]< #01/01/13# "
'CurrentDb.Execute depust1
CurrentDb.Execute depust2
'Приводим разрозненные наименования подразделений к правильному ЦФО
Set sql = CurrentDb.OpenRecordset("SELECT tblCfoSpravka.Подразделение, tblCfoSpravka.ЦФО FROM tblCfoSpravka")
Do Until sql.EOF
a = "Неизвестно"
cfo = "UPDATE tblAllFirma SET tblAllFirma.[ЦФО] = '" & sql!ЦФО & "' WHERE '" & sql!Подразделение & "' = tblAllFirma.[Подразделение]"
pusto = "UPDATE tblAllFirma SET tblAllFirma.[ЦФО] = '" & a & "' WHERE tblAllFirma.[ЦФО]Is Null"
CurrentDb.Execute cfo
CurrentDb.Execute pusto
sql.MoveNext
Loop
sql.Close
   Set sql = Nothing
DoCmd.Close acForm, "фрмЗаставка"
DoCmd.OpenForm "фрмКадрыПриказы", acNormal
Exit Sub
Else
patch = pat(n)
tblFirma = tbl(n)
'Запрос на очистку всех рабочих таблиц с приказами по фирмам
sqp = "delete * from " & tbl(n) & ""
CurrentDb.Execute sqp
'запрос на добавление данных в сводную таблицу с приказами всех фирм
sqlins = "INSERT INTO tblAllFirma ( ФИО, Должность, Подразделение, [Дата увольнения] )" _
    & " SELECT ФИО, Должность, Подразделение, [Дата увольнения]FROM " & tbl(n) & "" _
    & " WHERE (ФИО) Is Not Null AND [Дата увольнения] Is Not Null"
    On Error GoTo errend 'При возникновении ошибки преход на метку errEnd
'Импортируем новые данные
DoCmd.TransferSpreadsheet acImport, , tblFirma, patch, True, "увольнение!D:G"
'добавляем в общую таблицу данные всех файлов
CurrentDb.Execute sqlins
NoErr:
GoTo Perebor
errend:
Select Case Err.Number
     Case 3078 'Нет такой таблицы
        Resume Next
     Case 3044
        Resume Next
     Case 3051
        Dim XL As Object
        Set XL = CreateObject("Excel.Application")
        XL.Visible = False
        XL.Workbooks.Open FileName:=patch, UpdateLinks:=0, ReadOnly:=True
        DoCmd.TransferSpreadsheet acImport, , tblFirma, patch, True, "увольнение!D:G"
        'добавляем в общую таблицу данные всех файлов
CurrentDb.Execute sqlins
        XL.Quit
        GoTo Perebor
     Case Else
        MsgBox "Ошибка " & Err.Number & " " & "Нет источника данных обратитесь к администратору"
        Exit Sub
  End Select
  End If
End Sub
Миниатюры
Оптимизация кода  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.03.2014, 07:58
Ответы с готовыми решениями:

Оптимизация кода
Доброго времени суток. Необходима небольшая консультация с подсказкой. У меня есть код: Private Sub Дублировать_Click() Dim Con...

Оптимизация громоздкого кода
Уважаемые проффесионалы, нужна ваша помощь по оптимизации большого кода. Писал я его сам, пользуясь своими знаниями в VBA. Он работает как...

Упрощение и оптимизация кода
Добрый день. Вопрос такой нужно ли и стоит ли как то упрощать или усложнять ниже написанный код. И где в нем заметны косяки. Позже в этот...

24
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,083
19.03.2014, 08:52
Мои ИМХО:
Сократите, будет легче читаться.
Visual Basic
1
2
3
pat_ = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд\Регистрация приказов- КАДРЫ\"
pat(1) = pat_ & "Регистрация приказов Фирма1.xls"
...
Вместо GoTo Perebor используйте:
Visual Basic
1
2
3
4
For i = 1 to Ubound(pat)
...
Next
'Удаляем сообщения связанные...
Метка NoErr зачем, на нее нет перехода.
Может вместо перебора файлов лучше будет их слить в один массив? Так будет быстрее в 15 раз.
1
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,672
19.03.2014, 09:25
точно - читаться будет легче
Visual Basic
1
2
3
4
5
pat_ = "\\a\administration$\Административная дирекция\Отдел персонала\Приказы Бренд\Регистрация приказов- КАДРЫ\Регистрация приказов Фирма"
for i=1 to 15
pat(i)=pat_ & i & ".xls"
tbl(i) = "tblFirma" & i
next i
1
163 / 27 / 1
Регистрация: 09.06.2008
Сообщений: 50
19.03.2014, 09:49
Мне не до конца понятен смысл такой логики работы. Количество xls таблиц у Вас фиксированное, формат таблиц, как я понял, тоже. Почему не сделаете каждому индивидуальную базёнку аксессную, чтобы они в них колупались? Ведь можно сделать и так, чтобы от экселя практически не отличалось. Это формализует каждый файл, исключит много ошибок ввода и позволит делать синхронизацию имеющихся данных.
Если это экспорт из какой-то внешней системы, почему они работают в них монопольно?
Даже если не менять способ организации работы, можно же просто однократно подключить все эти файлы, как внешние таблицы и в них пользоваться запросами, а не делать каждый раз TransferDatabase.
А так, самое длительное что у Вас происходит, это естественно, создание экземпляра экселя.
Зачем Вы его создаете для каждого файла? Создайте один раз перед началом цикла и закройте по окончанию. Да и сам способ организации цикла Perebor ОЧЕНЬ странный!
Имхо, и вообще это Индусский код какой-то.
1
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
19.03.2014, 09:50  [ТС]
snipe спасибо, но наименование файлов не Фирма1, Фирма2, там разные наименования, указано так только для примера. Сорри если ввел в заблуждение.


Rube, а как слить данные всех файлов в массив? Можете привести пример?

если честно, то я думал что метка NoErr: относится к обязательным функции при обработке ошибок
0
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
19.03.2014, 09:50
Помимо уже высказанного..

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

Но есть одно, что безусловно увеличивает время выполнения: в коде много раз используется объектная переменная текущей базы данных CurrentDb. Использование вместо нее копии, даст выигрыш во времени
Visual Basic
1
2
3
4
5
6
7
Dim db as DAO.Database
Set db=CurrentDb
...................
...................
...................
db.Execute cfo
db.Execute pusto
1
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
19.03.2014, 09:54  [ТС]
Сорри, понял про массив. Добавлять в сводную не по частям, а сначала создаем таблицы , потом разом заносим их в сводную. Так, сокращаем 15 раз, правильно?
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,672
19.03.2014, 10:01
можно одним запросом

например так

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sqlins = "INSERT INTO tblAllFirma ( ФИО, Должность, Подразделение, [Дата увольнения] )"
sqlins = sqlins & " SELECT a1.ФИО, a1.Должность, a1.Подразделение, a1.[Дата увольнения] FROM "
sqlins = sqlins & "(SELECT ФИО, Должность, Подразделение, [Дата увольнения] FROM tblFirma1 union all "
sqlins = sqlins & " SELECT ФИО, Должность, Подразделение, [Дата увольнения] FROM tblFirma2 union all "
sqlins = sqlins & " SELECT ФИО, Должность, Подразделение, [Дата увольнения] FROM tblFirma3 union all "
sqlins = sqlins & " SELECT ФИО, Должность, Подразделение, [Дата увольнения] FROM tblFirma4 union all "
sqlins = sqlins & " SELECT ФИО, Должность, Подразделение, [Дата увольнения] FROM tblFirma5 union all "
sqlins = sqlins & " SELECT ФИО, Должность, Подразделение, [Дата увольнения] FROM tblFirma6 union all "
sqlins = sqlins & " SELECT ФИО, Должность, Подразделение, [Дата увольнения] FROM tblFirma7 union all "
sqlins = sqlins & " SELECT ФИО, Должность, Подразделение, [Дата увольнения] FROM tblFirma8 union all "
sqlins = sqlins & " SELECT ФИО, Должность, Подразделение, [Дата увольнения] FROM tblFirma9 union all "
sqlins = sqlins & " SELECT ФИО, Должность, Подразделение, [Дата увольнения] FROM tblFirma10 union all "
sqlins = sqlins & " SELECT ФИО, Должность, Подразделение, [Дата увольнения] FROM tblFirma11 union all "
sqlins = sqlins & " SELECT ФИО, Должность, Подразделение, [Дата увольнения] FROM tblFirma12 union all "
sqlins = sqlins & " SELECT ФИО, Должность, Подразделение, [Дата увольнения] FROM tblFirma13 union all "
sqlins = sqlins & " SELECT ФИО, Должность, Подразделение, [Дата увольнения] FROM tblFirma14 union all "
sqlins = sqlins & " SELECT ФИО, Должность, Подразделение, [Дата увольнения] FROM tblFirma15) as a1"
sqlins = sqlins & " WHERE a1.[ФИО] Is Not Null AND a1.[Дата увольнения] Is Not Null"
1
163 / 27 / 1
Регистрация: 09.06.2008
Сообщений: 50
19.03.2014, 10:05
Цитата Сообщение от snipe Посмотреть сообщение
можно одним запросом
Чтобы одним запросом так делать, нужно все таблицы сначала подключить. А он их по одной импортирует, да еще и в каждой предварительно связи экселем обновляет.
1
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,672
19.03.2014, 10:20
ага - заметил
может тогда лучше создать связанные таблицы с файлами excel
и пусть юзеры мучают xls а тут останется только сдернуть инфу

Добавлено через 5 минут
тогда половина кода отвалится как не нужная
1
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,083
19.03.2014, 10:32
Цитата Сообщение от mserg1972 Посмотреть сообщение
Rube, а как слить данные всех файлов в массив? Можете привести пример?
Пожалуйста, есть конечно более краткие примеры, но привожу развернутый, чтоб понятней.
Кликните здесь для просмотра всего текста
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
Function СлияниеКнигВМассив()
    Set Книги = New Collection
    With Application.FileDialog(1)
        .Title = "Выберите файлы"
        .InitialFileName = CurrentProject.path ' задаем местоположение файлов
        .AllowMultiSelect = 1 ' разрешаем выделение нескольких файлов
        .Filters.Clear
        .Filters.Add "Файлы Excel", "*.xls; *.xls", 1 ' для 2003
        result = .Show
        If result = 0 Then Exit Function
        For Each it In .SelectedItems
            Книги.Add it ' создаем коллекцию книг
        Next
    End With
    
    Set arrКниги = New Collection ' коллекция массивов
    For Each it In Книги
        arrB = LoadArrayFromWorkbook(it, "A1") ' функция чтения из закрытого файла Excel
        If Not IsArray(arrB) Then Exit Function
        стрВсего = стрВсего + UBound(arrB) ' общее кол-во строк
        arrКниги.Add arrB ' добавляем массив в коллекцию
    Next
    
    столбцов = 100 ' или UBound(arrB)
    ReDim arrV(1 To стрВсего, 1 To столбцов) ' определяем общий массив
    Dim i As Long, a As Long
    For Each arr In arrКниги
        For i = 1 To UBound(arr) ' цикл по строкам
            a = a + 1
            For c = 1 To столбцов ' цикл по столбцам
                arrV(a, c) = arr(i, c)
            Next
        Next
    Next
End Function
 
Public Function LoadArrayFromWorkbook(ByVal FileName, ByVal FirstCellAddress$, _
    Optional ByVal ColumnsCount& = 0) As Variant
    If FileName = "" Then Exit Function
    On Error Resume Next: Err.Clear
    Dim wb As Workbook, sh As Worksheet, ra As Range
    Set wb = GetObject(FileName)
    If wb Is Nothing Then Debug.Print "Не удалось загрузить файл " & FileName: Exit Function
    Set sh = wb.Worksheets(1)
    Set ra = sh.Range(sh.Range(FirstCellAddress$), _
        sh.Range(FirstCellAddress$).EntireColumn.Cells(sh.Rows.Count).End(xlUp))
    If ra Is Nothing Then Debug.Print "Не удалось обработать таблицу из файла " & _
        FileName: Debug.Print "Первая ячейка: " & FirstCellAddress$: wb.Close False: Exit Function
    If ColumnsCount& = 0 Then ColumnsCount& = sh.Columns.Count - sh.Range(FirstCellAddress$).Column + 1
    Err.Clear: Set ra = ra.Resize(, ColumnsCount&)
    If Err Then Debug.Print "Не удалось расширить диапазон в файле " & _
    FileName: Debug.Print "Первая ячейка: " & FirstCellAddress$, _
        "ширина: " & ColumnsCount&: wb.Close False: Exit Function
    LoadArrayFromWorkbook = ra.Value
    wb.Close False
End Function
1
138 / 29 / 2
Регистрация: 24.09.2013
Сообщений: 59
19.03.2014, 10:47
Цитата Сообщение от mserg1972 Посмотреть сообщение
Уважаемые специалисты, ниже я привел код, который работает, но отрабатывает очень длительное время.
Возможно ли как то его оптимизировать, что бы код отрабатывался быстрее.
Расставить в анализируемом коде контрольные точки:
Visual Basic
1
2
3
4
5
...
Debug.Print "01 контрольная точка - " & Now()
...
Debug.Print "02 контрольная точка - " & Now()
...
И просмотреть (после выполнения кода) полученные результаты в окне Immediate
Что долго выполняется, то и оптимизируй...
1
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
19.03.2014, 11:20  [ТС]
Перенести все данные и заставить заполнять соттрудников в Accesse не получится, об этом я написал в первом посте.

При связывании с файлом открытым другим сотрудником монопольно ничего не выйдет.
0
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
19.03.2014, 11:26  [ТС]
Вот скрин того что получиться при связывании.
Миниатюры
Оптимизация кода  
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,672
19.03.2014, 11:39
Тогда скопировать себе
а потом уж прилинковать
1
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
19.03.2014, 11:44  [ТС]
Странно но 8 секунд выполняется вот этот код
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Set sql = CurrentDb.OpenRecordset("SELECT tblCfoSpravka.Подразделение, tblCfoSpravka.ЦФО FROM tblCfoSpravka")
Do Until sql.EOF
a = "Неизвестно"
cfo = "UPDATE tblAllFirma SET tblAllFirma.[ЦФО] = '" & sql!ЦФО & "' WHERE '" & sql!Подразделение & "' = tblAllFirma.[Подразделение]"
pusto = "UPDATE tblAllFirma SET tblAllFirma.[ЦФО] = '" & a & "' WHERE tblAllFirma.[ЦФО]Is Null"
CurrentDb.Execute cfo
CurrentDb.Execute pusto
sql.MoveNext
Loop
sql.Close
   Set sql = Nothing
DoCmd.Close acForm, "фрмЗаставка"
DoCmd.OpenForm "фрмКадрыПриказы", acNormal
0
163 / 27 / 1
Регистрация: 09.06.2008
Сообщений: 50
19.03.2014, 11:44
Цитата Сообщение от mserg1972 Посмотреть сообщение
При связывании с файлом открытым другим сотрудником монопольно ничего не выйдет.
У меня всё прекрасно связывается. И с открытым и с закрытым. Уж не знаю, чего Вы там делаете.
К тому же, абсолютно себе не представляю, как можно открыть Excel файл монопольным доступом. Может научите?
Монопольный доступ был когда-то у dbf-ных таблиц. Да и то, там нужно было специальную галочку ставить.

Цитата Сообщение от snipe Посмотреть сообщение
Тогда скопировать себе
а потом уж прилинковать
Ну да, можно и так. Типа прилинковать на локальном ресурсе и перед обработкой все файлы туда копировать
1
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
19.03.2014, 11:47  [ТС]
Если файл Excel не с общим доступом, то при условии что он открыт другим сотрудником, вам будет предложено открыть его только для чтения. Именно в таком случае связать этот файл не получиться. Ав этих файлах постоянно сидят кадровики.

Каждый раз копировать себе с сервера 15 таблиц, а потом связывать?

Представтье краткую инструкцию для пользователя? " Скопируйте себе на рабочий стол все файли из папки .......... и т.д. ..........."
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,672
19.03.2014, 11:52
Лучший ответ Сообщение было отмечено mserg1972 как решение

Решение

скопировать можно вот так
Visual Basic
1
2
3
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile "F:\Users\snipe\Desktop\Отчет 28\2014\02-февраль\*.xlsx", "F:\Users\snipe\Desktop\Отчет 28\2014\02-февраль\01\"
Set fso = Nothing
сначала путь откуда потом путь куда
1
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
19.03.2014, 14:18  [ТС]
Разобрался.

Добавлено через 6 минут
Ок, спасибо, попробую применить предложенные варианты и посмотреть , что получиться.

Добавлено через 2 часа 18 минут
Вот этот код выполняется 12 секунд, его можно ускорить? Внес вроде все изменения правильно.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
For i = 1 To UBound(pat)
n = n + 1
patch = pat(n)
tblFirma = tbl(n)
'Запрос на очистку всех временных рабочих таблиц
sqp = "DELETE * FROM " & tbl(n) & ""
db.Execute sqp
    On Error GoTo errend 'При возникновении ошибки преход на метку errEnd
'Импортируем новые данные
DoCmd.TransferSpreadsheet acImport, , tblFirma, patch, True, "увольнение!D:G"
'запрос на добавление данных в одну общую главную таблицу
sqlins = "INSERT INTO tblAllFirma ( ФИО, Должность, Подразделение, [Дата увольнения] )" _
    & " SELECT ФИО, Должность, Подразделение, [Дата увольнения]FROM " & tbl(n) & "" _
    & " WHERE (ФИО) Is Not Null AND [Дата увольнения] Is Not Null"
db.Execute sqlins
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.03.2014, 14:18
Помогаю со студенческими работами здесь

Оптимизация кода запроса в Access 2010
Есть база данных с таблицей и запросом, запрос вычисляет столбец Difference, но работает очень медленно, если использовать его в большой...

Оптимизация SQL кода
Необходимо улучшить SQL код, если это возможно. Нет необходимости разбирать саму базу данных с точки зрения логики базы. Необходимо...

Оптимизация методом Ньютона (нахождение точки минимума). Оптимизация кода
MATLAB только начал осваивать. Попытался реализовать нахождение точки минимума методом Ньютона для функции 2*X12 - X1*X2 + 3*X22 -...

Оптимизация кода. Замер времени выполнения части кода.
Доброе утро. Есть желание посмотреть сколько времени занимает выполнение какого-то блока кода/отдельной функции или процедуры/программы...

Типы оптимизация: черная оптимизация, серая оптимизация и белая оптимизация
Много много лет назад, на заре становления профессии &quot;оптимизатора&quot; в какой то умной книжке был создан миф. Это миф о цветовой индефикации...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru