Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/21: Рейтинг темы: голосов - 21, средняя оценка - 5.00
17 / 1 / 2
Регистрация: 20.04.2016
Сообщений: 120
1

Сохранение Excel-файла через макрос VBA в Access

28.07.2016, 14:12. Показов 3922. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
полная информация есть здесь:Сохранение excel файла через макрос access
подскажите если сможете, при сохранении файла exsel сначала открывается пустой файл и сохраняется, а нужный просто закрывается:
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
Sub test()
 
' открытие сап
 
If Not IsObject(Appl) Then
   Set SapGuiAuto = GetObject("SAPGUI")
   Set Appl = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
   Set Connection = Appl.Children(0)
End If
If Not IsObject(sess) Then
   Set sess = Connection.Children(0)
End If
If IsObject(WScript) Then
   WScript.ConnectObject sess, "on"
   WScript.ConnectObject Appl, "on"
End If
 
' составление таблиц и открытие ее.
 
sess.findById("wnd[0]").Maximize
sess.findById("wnd[0]/usr/cntlIMAGE_CONTAINER/shellcont/shell/shellcont[0]/shell").doubleClickNode "F00209"
sess.findById("wnd[0]/tbar[1]/btn[17]").press
sess.findById("wnd[1]/usr/txtENAME-LOW").Text = "safonova-o"
sess.findById("wnd[1]/usr/txtENAME-LOW").SetFocus
sess.findById("wnd[1]/usr/txtENAME-LOW").caretPosition = 10
sess.findById("wnd[1]/tbar[0]/btn[8]").press
sess.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").setCurrentCell 1, "TEXT"
sess.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").selectedRows = "1"
sess.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").doubleClickCurrentCell
sess.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB1/ssub%_SUBSCREEN_ORDER_CRITERIA:/BSHS/DM_SHP_MTRSTA:1010/ctxtP_VARI").Text = "/LYSIKOV"
sess.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB1/ssub%_SUBSCREEN_ORDER_CRITERIA:/BSHS/DM_SHP_MTRSTA:1010/ctxtP_VARI").SetFocus
sess.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB1/ssub%_SUBSCREEN_ORDER_CRITERIA:/BSHS/DM_SHP_MTRSTA:1010/ctxtP_VARI").caretPosition = 8
sess.findById("wnd[0]/tbar[1]/btn[8]").press
sess.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell").setCurrentCell 2, "DPREG"
sess.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell").selectedRows = "2"
sess.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell").contextMenu
sess.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell").selectContextMenuItem "&XXL"
sess.findById("wnd[1]/tbar[0]/btn[0]").press
sess.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "SHIPMENT.XLSX"
sess.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 8
sess.findById("wnd[1]/tbar[0]/btn[11]").press
 
Call TT
End Sub
' сохранение открывшегося файла .XLSX
Sub TT()
Dim xlWb
Set xlWb = GetObject(, "Excel.Application")
xlWb.Parent.Windows(1).Visible = True
xlWb.Application.displayalerts = False
xlWb.Application.activeworkbook.SaveAs FileName:="\\bykna001\FREDIRECT$\Lysikov\Desktop\ëèñò ïîäáîðà\SHIPMENT2.XLSX", FileFormat:=51
xlWb.Quit
 
End Sub
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2016, 14:12
Ответы с готовыми решениями:

Обработать в цикле ячейки листа из Access и запустить макрос Excel-файла из Access
Access 2007, Excel 2007. Две задачи: обработать в цикле ячейки листа из Accessa и запустить макрос...

Импорт донных в access 2007 из HTML через макрос VBA
Доброе утро. У меня есть импорт данных из exsel, а мне нужен из файла html: FName = "F:\SC\Bykovo...

Excel VBA макрос, добавляющий записи к таблице через Inputbox
Всем привет! Помогите пожалуйста написать такой макрос в Excel VBA : Создать макрос, создающий и...

Запустить макрос Access через Excel
Доброго времени суток. Уважаемые форумчане, кто подскажет как можно осуществить данную...

8
5612 / 1596 / 414
Регистрация: 23.12.2010
Сообщений: 2,392
Записей в блоге: 1
28.07.2016, 14:32 2
Лучший ответ Сообщение было отмечено BSH как решение

Решение

Удалить:
Visual Basic
1
xlWb.Parent.Windows(1).Visible = True
Переписать
Visual Basic
1
2
3
4
5
6
7
8
9
Sub TT()
Dim i&, xlWb
For i=1 to 30000: DoEvents : Next  ' Ожидание открытия файла
Set xlWb = GetObject(, "Excel.Application")
xlWb.Application.Visible = True
xlWb.Application.displayalerts = False
xlWb.Application.activeworkbook.SaveAs FileName:="\\bykna001\FREDIRECT$\Lysikov\Desktop\AAA\SHIPMENT2.XLSX", FileFormat:=51
xlWb.Quit
End Sub
1
17 / 1 / 2
Регистрация: 20.04.2016
Сообщений: 120
28.07.2016, 16:30  [ТС] 3
Огромное спасибо. все заработало.

Добавлено через 1 час 36 минут
появился еще один вопрос.
мне нужно второй раз выгрузить похожий файл. но макрос сразу выдает ошибку:
compile error
duplicate declaration in current scope

я второй раз вставил ваш код. и у меня получилось желтым выделено Sub test(), и ошибка показывает на Dim i&, xlWb которая в самом низу.

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
Sub test()
 
'Начало работы в сап
 
If Not IsObject(Appl) Then
   Set SapGuiAuto = GetObject("SAPGUI")
   Set Appl = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
   Set Connection = Appl.Children(0)
End If
If Not IsObject(sess) Then
   Set sess = Connection.Children(0)
End If
If IsObject(WScript) Then
   WScript.ConnectObject sess, "on"
   WScript.ConnectObject Appl, "on"
End If
 
' составление таблицы и открытие ее.
 
sess.findById("wnd[0]").Maximize
sess.findById("wnd[0]/tbar[0]/okcd").Text = "/n/bshs/dm_shpmts"
sess.findById("wnd[0]").sendVKey 0
sess.findById("wnd[0]/tbar[1]/btn[17]").press
sess.findById("wnd[1]/usr/txtENAME-LOW").Text = "safonova-o"
sess.findById("wnd[1]/usr/txtENAME-LOW").SetFocus
sess.findById("wnd[1]/usr/txtENAME-LOW").caretPosition = 10
sess.findById("wnd[1]/tbar[0]/btn[8]").press
sess.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").setCurrentCell 1, "TEXT"
sess.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").selectedRows = "1"
sess.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").doubleClickCurrentCell
sess.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB1/ssub%_SUBSCREEN_ORDER_CRITERIA:/BSHS/DM_SHP_MTRSTA:1010/ctxtS_DPREG-LOW").Text = Format(Date - 4, "ddmmyy")
sess.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB1/ssub%_SUBSCREEN_ORDER_CRITERIA:/BSHS/DM_SHP_MTRSTA:1010/ctxtS_DPREG-HIGH").Text = Format(Date + 4, "ddmmyy")
sess.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB1/ssub%_SUBSCREEN_ORDER_CRITERIA:/BSHS/DM_SHP_MTRSTA:1010/ctxtP_VARI").Text = "/LYSIKOV"
sess.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB1/ssub%_SUBSCREEN_ORDER_CRITERIA:/BSHS/DM_SHP_MTRSTA:1010/ctxtS_DPREG-HIGH").SetFocus
sess.findById("wnd[0]/usr/tabsTABSTRIP_ORDER_CRITERIA/tabpS0S_TAB1/ssub%_SUBSCREEN_ORDER_CRITERIA:/BSHS/DM_SHP_MTRSTA:1010/ctxtS_DPREG-HIGH").caretPosition = 8
sess.findById("wnd[0]").sendVKey 0
sess.findById("wnd[0]/tbar[1]/btn[8]").press
sess.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell").selectedRows = "0"
sess.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell").contextMenu
sess.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell").selectContextMenuItem "&XXL"
sess.findById("wnd[1]/tbar[0]/btn[0]").press
sess.findById("wnd[1]/usr/ctxtDY_PATH").Text = "\\bykna001\FREDIRECT$\Lysikov\Desktop\Лист подбора"
sess.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "Shipment sap.XLSX"
sess.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 12
sess.findById("wnd[1]/tbar[0]/btn[11]").press
sess.findById("wnd[0]/tbar[0]/btn[3]").press
sess.findById("wnd[0]/tbar[0]/btn[3]").press
 
 
 
' открытую таблицу нужно перезаписать в формате .XLSX
 
Dim i&, xlWb
For i = 1 To 10000: DoEvents: Next ' Ожидание открытия файла
Set xlWb = GetObject(, "Excel.Application")
xlWb.Application.Visible = True
xlWb.Application.displayalerts = False
xlWb.Application.activeworkbook.SaveAs FileName:="\\bykna001\FREDIRECT$\Lysikov\Desktop\лист подбора\SHIPMENT access.XLSX", FileFormat:=51
xlWb.Quit
 
' закрытие dm_shpmts
 
sess.findById("wnd[0]").Maximize
sess.findById("wnd[0]/tbar[0]/btn[3]").press
sess.findById("wnd[0]/tbar[0]/btn[3]").press
 
' открытие bshl/wmm
 
sess.findById("wnd[0]").Maximize
sess.findById("wnd[0]/tbar[0]/okcd").Text = "/n/bshl/wmm"
sess.findById("wnd[0]").sendVKey 0
sess.findById("wnd[0]/usr/tabsTABSTRIP/tabpTS003").select
sess.findById("wnd[0]/usr/ctxt/BSHL/WM_C_DIALOG_D0100-BEZON").Text = "ru2"
sess.findById("wnd[0]").sendVKey 0
sess.findById("wnd[0]/usr/tabsTABSTRIP/tabpTS003/ssubTABAREA:/BSHL/WM_IWN_MONITOR:0900/subPARAMS:/BSHL/WM_IWN_MONITOR:0911/chkP0911004").Selected = False
sess.findById("wnd[0]/usr/tabsTABSTRIP/tabpTS003/ssubTABAREA:/BSHL/WM_IWN_MONITOR:0900/subPARAMS:/BSHL/WM_IWN_MONITOR:0911/chkP0911001").Selected = False
sess.findById("wnd[0]/usr/tabsTABSTRIP/tabpTS003/ssubTABAREA:/BSHL/WM_IWN_MONITOR:0900/subPARAMS:/BSHL/WM_IWN_MONITOR:0911/chkP0911001").SetFocus
sess.findById("wnd[0]/tbar[1]/btn[8]").press
sess.findById("wnd[0]/usr/cntlD0200_CUSCON/shellcont/shell").pressToolbarContextButton "&MB_VARIANT"
sess.findById("wnd[0]/usr/cntlD0200_CUSCON/shellcont/shell").pressToolbarButton "&MB_VARIANT"
sess.findById("wnd[1]/usr/cntlGRID/shellcont/shell").clickCurrentCell
sess.findById("wnd[0]/usr/cntlD0200_CUSCON/shellcont/shell").contextMenu
sess.findById("wnd[0]/usr/cntlD0200_CUSCON/shellcont/shell").selectContextMenuItem "&XXL"
sess.findById("wnd[1]/tbar[0]/btn[0]").press
sess.findById("wnd[1]/usr/ctxtDY_PATH").Text = "\\bykna001\FREDIRECT$\Lysikov\Desktop\Лист подбора"
sess.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "IWN Monitor.XLSX"
sess.findById("wnd[1]/tbar[0]/btn[11]").press
 
' открытую таблицу нужно перезаписать в формате .XLSX
 
Dim i&, xlWb
For i = 1 To 10000: DoEvents: Next ' Ожидание открытия файла
Set xlWb = GetObject(, "Excel.Application")
xlWb.Application.Visible = True
xlWb.Application.displayalerts = False
xlWb.Application.activeworkbook.SaveAs FileName:="\\bykna001\FREDIRECT$\Lysikov\Desktop\лист подбора\IWN Monitor access.XLSX", FileFormat:=51
xlWb.Quit
 
' закрытие bshl/wmm
 
session.findById("wnd[0]").Maximize
session.findById("wnd[0]/tbar[0]/btn[3]").press
session.findById("wnd[0]/tbar[0]/btn[3]").press
 
 
End Sub
0
5612 / 1596 / 414
Регистрация: 23.12.2010
Сообщений: 2,392
Записей в блоге: 1
28.07.2016, 17:38 4
Лучший ответ Сообщение было отмечено BSH как решение

Решение

Надо убрать вторую строку
Visual Basic
1
Dim i&, xlWb
Хороший тон - все необходимые Dim (без задвоения) в начале процедуры.
1
17 / 1 / 2
Регистрация: 20.04.2016
Сообщений: 120
10.08.2016, 18:18  [ТС] 5
Доброго времени суток.
Ни стал открывать новую тему. Нужна помощь.
В сохранении файла нужно добавить, что бы он сохранял и закрывал именно тот который открывается. Просто часто открыто сразу несколько файлов и когда запускается макрос:
Visual Basic
1
2
3
4
5
6
7
Dim i&, xlWb
For i = 1 To 15000: DoEvents: Next 
Set xlWb = GetObject(, "Excel.Application")
xlWb.Application.Visible = True
xlWb.Application.DisplayAlerts = False
xlWb.Application.activeworkbook.SaveAs FileName:="F:\SC\Bykovo Warehouse\Этикетка\lx03 access.XLSX", FileFormat:=51
xlWb.Quit
то закрываются все файлы. Это очень неудобно.

Можно что то сделать.
0
5612 / 1596 / 414
Регистрация: 23.12.2010
Сообщений: 2,392
Записей в блоге: 1
11.08.2016, 09:29 6
Попробуйте везде вместо
Visual Basic
1
xlWb.Quit
написать
Visual Basic
1
xlWb.Application.displayalerts = True
1
17 / 1 / 2
Регистрация: 20.04.2016
Сообщений: 120
11.08.2016, 09:43  [ТС] 7
Тоже вариант, спасибо. Теперь файлы остаются открытыми, вместе с остальными, а хотелось бы, что бы они закрывались.
и их не видели сотрудники. То есть мысль в чем.
Из программы извлекается файл exsel и открывается, мне нужно, чтобы файл сохранился в определенной папке и под определенным названием и потом закрылся. Это есть. но он закрывает и остальные exsel файлы. А нужно что бы закрывался только тот файл который открылся.
0
5612 / 1596 / 414
Регистрация: 23.12.2010
Сообщений: 2,392
Записей в блоге: 1
11.08.2016, 13:08 8
Тогда так:
Visual Basic
1
2
xlWb.Application.displayalerts = True
xlWb.Application.activeworkbook.Close 0
1
17 / 1 / 2
Регистрация: 20.04.2016
Сообщений: 120
11.08.2016, 13:17  [ТС] 9
спасибо
0
11.08.2016, 13:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.08.2016, 13:17
Помогаю со студенческими работами здесь

Импорт данных в access 2007 из Excel через макрос
Доброе утро. нужно сделать импорт данных из Excel в access. сделал вот это: Dim FName As String...

Подключение к БД access через VBA excel
Private Sub CommandButton1_Click() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset...

Работа с БД Access через VBA Excel
Добрый день! Суть проекта: необходим макрос в Excel, который бы добавлял/изменял строки в...

Как установить пароль в Access через VBA Excel?
Доброго времени суток! Есть Excel'евская программы которая подключается к БД Access, все работает...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru