Access открыть файл excel макросом

284 / 126 / 35

Регистрация: 16.03.2013

Сообщений: 1,294

1

15.04.2016, 10:14. Показов 16995. Ответов 20


Студворк — интернет-сервис помощи студентам

Добрый день! Поиск почему то не хотит искать, может некорректно формулирую вопрос. Подскажите пожалуйста как можно реализовать открытие файла формата Excel (допустим называется он «Запасы») расположенного на сетевом диске L: по клику кнопкой расположенной на форме БД? С открытием сетевых папок и запуском приложений типа калькулятора разобрался, а вот как открыть конкретный файл L: Торговый залЗапасы.xlsЛист1 расположенный на сетевом ресурсе не догоняю.
Спасибо.



0



texnik-san

шапоклякистка 8-го дня

3674 / 2234 / 391

Регистрация: 26.06.2015

Сообщений: 4,647

Записей в блоге: 1

15.04.2016, 10:44

2

Visual Basic
1
Shell "excel.EXE ""L: Торговый залЗапасы.xls""", 1



3



9 / 8 / 0

Регистрация: 27.09.2015

Сообщений: 837

15.04.2016, 11:46

3

Цитата
Сообщение от texnik-san
Посмотреть сообщение

Shell «excel.EXE «»L: Торговый залЗапасы.xls»»», 1

Здравствуйте. По аналогии можно назначить запуск другой access-базы по кнопке, правильно?)))

Извиняюсь, что влезаю)))



0



шапоклякистка 8-го дня

3674 / 2234 / 391

Регистрация: 26.06.2015

Сообщений: 4,647

Записей в блоге: 1

15.04.2016, 12:56

4

Да.



3



284 / 126 / 35

Регистрация: 16.03.2013

Сообщений: 1,294

15.04.2016, 14:14

 [ТС]

5

ПРЕОГРОМНОЕ СПАСИБО!

Добавлено через 16 минут
А можно реализовать еще такую функцию: В поле [Название файла]находится наименование файла в некой директории. Файл этот с расширением PDF.
Чтобы при нажатии кнопки открывался именно файл из этой директории с наименованием соответствующим наименованию в активном поле таблицы.
Ну допустим курсор стоит в поле [Название файла]=» А1904Б», посему при нажатии кнопки программе должно открыть файл из сетевой директории имеющий тот же номер.Как такое сделать можно?
Но тут еще проблема, эта директория содержит 2 папки с разными источниками данных, но с однотипными файлами, вот как провести еще и выбор в какую папку он должен обратится или можно так сделать что он именно в директории L:ТорговыйЗал будет искать, не взирая на лежащие в ней папки Точка продажи1 и ТочкаПродажи2?



1



texnik-san

шапоклякистка 8-го дня

3674 / 2234 / 391

Регистрация: 26.06.2015

Сообщений: 4,647

Записей в блоге: 1

15.04.2016, 15:45

6

Visual Basic
1
Shell "ПолныйПутьИИмяПрограммыДляОткрытияФайловPDF.EXE ""L: Торговый зал" & [Название файла] & """", 1

Цитата
Сообщение от Braser
Посмотреть сообщение

сделать что он именно в директории L:ТорговыйЗал будет искать

«Оно» вообще ничего не ищет.



0



mobile

Эксперт MS Access

26777 / 14456 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

15.04.2016, 15:54

7

Мне кажется с гиперссылкой проще, нет?

Visual Basic
1
application.FollowHyperlink "L:Торговый зал" & [Название файла]

Съедает обратный слэш перед кавычкой…



3



шапоклякистка 8-го дня

3674 / 2234 / 391

Регистрация: 26.06.2015

Сообщений: 4,647

Записей в блоге: 1

15.04.2016, 17:52

8

Цитата
Сообщение от mobile
Посмотреть сообщение

Съедает обратный слэш перед кавычкой…

Точно. Который раз попадаюсь уже.

А с гиперссылкой — да, вообще шикарное решение, особенно для случая, когда не стоит задача запускать какое-то конкретное приложение, а просто нужно открыть файл тем, чем он может быть открыт.



2



Dimasterfrom4e

9 / 8 / 0

Регистрация: 27.09.2015

Сообщений: 837

15.04.2016, 22:58

9

И снова лезу….))) Не подскажете пример с кодом для открытия другой бд access на кнопке? Что-то не выходит у меня…((( Access 2013

Извиняюсь, что в чужую тему пишу))

Visual Basic
1
2
3
4
Private Sub Кнопка0_Click()
Shell start ''C:UsersololoshaDesktopStock After Pick8.accdb'''
Application.Quit
End Sub

Тут код на меня ругается. С кодом ругаюсь пока учусь)))



0



Эксперт MS Access

26777 / 14456 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

15.04.2016, 23:23

10

Dimasterfrom4e, Shell запускает программу, исполняемый файл. А программа MSaccess.exe. Ваш файл это параметр запуска, а не исполняемый файл. И что за команда или параметр «start» после шелла? Явно лишний.

Посмотрите как записана shell у texnik-san. Только измените программу на акс.



1



9 / 8 / 0

Регистрация: 27.09.2015

Сообщений: 837

15.04.2016, 23:30

11

Цитата
Сообщение от mobile
Посмотреть сообщение

Посмотрите как записана shell у texnik-san.

Вначале пробовал, но не вышло, т.к. неправильно программу написал(((( А теперь все здорово!!!!)))) Благодаря вам)))) Спасибо))))



0



9 / 8 / 0

Регистрация: 27.09.2015

Сообщений: 837

17.04.2016, 02:37

12

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

Можно ли написать код, что при отсутствии файла в нужной директории, выходило сообщение: «Проверьте полномочия» или что-то вроде того? То есть хочется избежать появления окна debug-ошибки.

Заранее спасибо за помощь)))



0



mobile

Эксперт MS Access

26777 / 14456 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

17.04.2016, 02:55

13

Visual Basic
1
2
3
4
If Dir("путьфайл.accdb")="" Then
   Msgbox "Проверьте полномочия"
   Exit Sub
End If



1



284 / 126 / 35

Регистрация: 16.03.2013

Сообщений: 1,294

17.04.2016, 21:20

 [ТС]

14

Как же не ищет☺?Когда не находит файл , то пишет, открыть невозможно,файл не найден…

Добавлено через 7 минут
Но вообщем то это не суть важно, как при запуске процедуры поиска и открытия файла
Задать полю «Название файла» соответствующее значение из активной строки на форме??

Добавлено через 3 минуты
Visual Basic

1 application.FollowHyperlink «L:Торговый зал» & [Как подставить сюда значение из поля формы?]

Добавлено через 10 минут
Может что то типа
namefile =Form_Запасы.НазваниеФайла

application.FollowHyperlink «L:Торговый зал» & [namefile]
???



0



Эксперт MS Access

7267 / 4469 / 288

Регистрация: 12.08.2011

Сообщений: 13,513

18.04.2016, 05:26

15

Цитата
Сообщение от Braser
Посмотреть сообщение

1 application.FollowHyperlink «L:Торговый зал» & [Как подставить сюда значение из поля формы?]

application.FollowHyperlink «L:Торговый залкосая» & forms!названиеформы!полеформы



0



commun

450 / 238 / 14

Регистрация: 29.10.2014

Сообщений: 959

06.05.2016, 21:59

16

Вообще само приложение подходит к этому вопросу… Вот что можно обнаружить в Справке 10го Акса по запросу
GetObject Function (почти копия):

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
Public Sub Открыть_файл()
 Dim Obj As Object ' Переменная для хранения справочной инф в Excel
 Dim ExcelWasNotRunning As Boolean    ' Flag реализации
    Set ExcObj = New Excel.Application ' инициализация объекта-Excel
    ExcObj.Visible = True 'вывод на экран
    On Error Resume Next    
    ' Тест, чтобы увидеть, что копия Microsoft Excel уже запущена
    ' игнорировать следующую возможную ошибку
    ' Getobject function без первого аргумента
    ' позволяет получить приложение. Если оно не запускается,
    ' появляется сообщение об ошибке.
    Set ExcObj = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then ExcelWasNotRunning = True
    Err.Clear 'удалить сведения об ошибках
    ' Microsoft Excel запущена
    ' получить искомый объект
    Set Obj = GetObject("E:Книга1.xlsx")
    
    'Показать объект Microsoft Excel помощью его свойств.
    'Показать реальное окно, содержащее файл с помощью Windows
    ' ссылок на объект Obj
    Obj.Application.Visible = True
    Obj.Parent.Windows(1).Visible = True
 
    'работайте с объектом здесь:
                    ' ...
    'Если данная копия Microsoft Excel не был запущена, когда вы
     'стартовали, закройте объект, используя метод Quit
    'Обратите внимание, что при попытке выйти из программы Microsoft Excel,
    'заголовок окна мигает, и отображается сообщение о том,
    'хотите ли Вы сохранить все загруженные файлы.
    'Если файл не загружен-не будет сообщения, а только интерфейс Microsoft Excel
    If ExcelWasNotRunning = True Then
        Obj.Application.Quit
    End If
    Set Obj = Nothing    ' удалить объект из оперативной памяти
End Sub



0



9 / 8 / 0

Регистрация: 27.09.2015

Сообщений: 837

08.05.2016, 20:17

17

Извиняюсь, что снова лезу, но может ответ на следующий вопрос кому-нибудь пригодится в будущем)))

Есть ли способ, так сказать, наоборот?? Из access как открыть другие файлы в принципе понятно, а вот по кнопке в excel к примеру понадобится открыть access-файл или даже выполнить запрос какой нибудь?? Или это мне уже в категорию excel в форуме писать??))



0



Эксперт MS Access

26777 / 14456 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

08.05.2016, 20:30

18

Цитата
Сообщение от Dimasterfrom4e
Посмотреть сообщение

вот по кнопке в excel к примеру понадобится открыть access-файл или даже выполнить запрос какой нибудь??

Есть несколько способов. В Excel есть Query и можно создавать запросы с его помощью.
Есть универсальный инcтрументарий ADODB. Им можно получить данные практически из любой БД
Для Jet SQL (ядро баз данных Access) можно получить данные при помощи DAO, создав запрос и выполнив его.
Можно программно открыть Access и выполнить любое действие так, как его делают в самой программе



1



9 / 8 / 0

Регистрация: 27.09.2015

Сообщений: 837

08.05.2016, 20:49

19

Цитата
Сообщение от mobile
Посмотреть сообщение

В Excel есть Query и можно создавать запросы с его помощью.

Это наверно отдельная тема)) Я еще обдумаю это, возможно из экселя не понадобится это делать)))



0



Zlodiy

0 / 0 / 0

Регистрация: 26.11.2016

Сообщений: 6

28.11.2016, 10:41

20

Здравствуйте все. Может не в тему — прошу меня простить
Прошу помочь мне.
Access 2016
По аналогии всех советов сделал следующее

PureBasic
1
2
3
4
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim ProcID As Integer
        ProcID = Shell("C:Program Files (x86)Microsoft OfficeOffice16MSACCESS""F:Database2.accdb""")
    End Sub

Но при запуске формы пишет, что файл по этому пути не найден
Помогите. Я только учусь
Спасибо всем



0



Открытие книги Excel через Access

A_3485

Дата: Пятница, 05.10.2012, 10:59 |
Сообщение № 1

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 146


Репутация:

0

±

Замечаний:
40% ±


2007

Доброе утро!
Помогите пожалуйста разобраться с кодом, который написа в Access. При нажатии на кнопку на форме Access, у меня открываетя книга excel, а вот потом все неработает, не могу понять почему….

[vba]

Code

Dim oXL As Object
     Dim sFullPath As String
     Set oXL = CreateObject(«Excel.Application»)
     On Error Resume Next
     oXL.UserControl = True
     On Error GoTo 0          
          On Error GoTo ErrHandle
     sFullPath = «C:Documents and Settingsзаявление.xls»                
     With oXL
         .Visible = True
         .Workbooks.Open (sFullPath)
         .Workbooks(«sFullPath»).Activate
         .ThisWorkbook.Unprotect Password:=»555″
         .Sheets(«Лист1»).Visible = False
         .Sheets(«Лист2»).Visible = False         
     End With      
ErrExit:
     Set oXL = Nothing
     Exit Sub      
ErrHandle:
     oXL.Visible = False
     MsgBox Err.Description
     GoTo ErrExit
End Sub

[/vba]

 

Ответить

Pelena

Дата: Пятница, 05.10.2012, 13:28 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Эта строчка неправильная, без неё нормально открывается
.Workbooks(«sFullPath»).Activate

ИМХО: с обработчиками ошибок перемудрили


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

A_3485

Дата: Пятница, 05.10.2012, 14:34 |
Сообщение № 3

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 146


Репутация:

0

±

Замечаний:
40% ±


2007

Да это так, но мне нужно, чтобы Книга стала активной и отобразился Лист1

 

Ответить

Pelena

Дата: Пятница, 05.10.2012, 14:38 |
Сообщение № 4

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Quote (A_3485)

чтобы Книга стала активной и отобразился Лист1

Как же он отобразится, если вы его в этом коде скрываете?


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

A_3485

Дата: Пятница, 05.10.2012, 15:37 |
Сообщение № 5

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 146


Репутация:

0

±

Замечаний:
40% ±


2007

Я наверное не совсем правильно выразился в постановке задачи. Мне хтелось бы, чтобы после пыполнения указанного кода, стал активен excel, т.е автоматически произошло переключение на активную книгу.

 

Ответить

Gustav

Дата: Пятница, 05.10.2012, 16:32 |
Сообщение № 6

Группа: Друзья

Ранг: Старожил

Сообщений: 2397


Репутация:

985

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

Поскольку при помощи CreateObject(«Excel.Application») создается новый экземпляр (сессия) Excel (в отличие от GetObject), то открываемая книга будет в нём единственная, а, значит, и активная. Поэтому дополнительно ее активировать не надо (тем более таким ошибочным оператором).


МОИ: Ник, Tip box: 41001663842605

 

Ответить

A_3485

Дата: Пятница, 05.10.2012, 16:40 |
Сообщение № 7

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 146


Репутация:

0

±

Замечаний:
40% ±


2007

Спасибо, буду исправлять. А как можно упростить код?

 

Ответить

Pelena

Дата: Пятница, 05.10.2012, 16:58 |
Сообщение № 8

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

По мне так вот такой код вполне может открыть нужный файл на первом листе
[vba]

Code

    Dim oXL As Object
     Set oXL = CreateObject(«Excel.Application»)
     With oXL
         .Workbooks.Open «C:Documents and Settingsзаявление.xls»
         .Visible = True
     End With
     Set oXL = Nothing

[/vba]


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

A_3485

Дата: Пятница, 05.10.2012, 17:16 |
Сообщение № 9

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 146


Репутация:

0

±

Замечаний:
40% ±


2007

Все бы ничего если бы…..открывался именно файл «заявление» не как файл для чтения(при сохранения пишет замеить существующий), а сам по себе и при открытии можно было снять пароли, отобразить Листы, и сделать книгу активной.

 

Ответить

Gustav

Дата: Пятница, 05.10.2012, 17:27 |
Сообщение № 10

Группа: Друзья

Ранг: Старожил

Сообщений: 2397


Репутация:

985

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

Может, Вам лучше будет открыть как шаблон, т.е. не через Open, а через Add ?

[vba]

Code

        .Workbooks.Add «C:Documents and Settingsзаявление.xls»

[/vba]


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал GustavПятница, 05.10.2012, 17:29

 

Ответить

Pelena

Дата: Пятница, 05.10.2012, 17:29 |
Сообщение № 11

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Я, конечно, не вижу Ваш файл. Создала свой. Но у меня он открывается с возможностью редактирования и сохраняется обычным образом.

Может Вы несколько раз уже эту кнопку нажали, и файл уже был открыт, тогда, конечно, ТОЛЬКО ДЛЯ ЧТЕНИЯ


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Hugo

Дата: Пятница, 05.10.2012, 23:37 |
Сообщение № 12

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Вероятно файл уже открыт в другом экземпляре Экселя — поэтому все остальные экземпляры открывают для чтения.
Есть способ открыть в уже открытом экселе, или если его нет — тогда открыть в новом.
Вот например — скрипт vbs (в соответствии с темой smile ), но синтаксис в общем одинаков:
[vba]

Code

Option Explicit
Dim objFSO, objExcel, ExcelPath, wb

ActivateExcel

Set objFSO = CreateObject(«Scripting.FileSystemObject»)   
ExcelPath = objFSO.GetParentFolderName(WScript.ScriptFullName)   
Set wb = objExcel.Workbooks.Open (ExcelPath & «test.xls»)
Set objExcel = Nothing

Private Function ActivateExcel()
On Error resume next   
Set objExcel = GetObject(, «Excel.Application»)
If objExcel Is Nothing Then
   Set objExcel = CreateObject(«Excel.Application»)
   objExcel.Visible = True
End If
End Function

[/vba]


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

A_3485

Дата: Суббота, 06.10.2012, 16:51 |
Сообщение № 13

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 146


Репутация:

0

±

Замечаний:
40% ±


2007

Спасибо всем что откликнулись на мою просьбу!
У меня теперь стоит задача, чтобы в коде VBA который пишется в Access, можно было снять защиту с листа «1111» и книги «1111» и активировать «Лист1»?

 

Ответить

Pelena

Дата: Суббота, 06.10.2012, 18:46 |
Сообщение № 14

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Я в макросах не специалист, но можно попробовать, например, так
[vba]

Code

Dim oXL As Object
     Set oXL = CreateObject(«Excel.Application»)
     With oXL
         .Workbooks.Open «C:Documents and Settings1111.xls»
         .Visible = True
         .Sheets(«1111″).Unprotect Password:=»555»
         .Sheets(«Лист1»).Activate
         .ActiveWorkbook.Unprotect Password:=»555″
     End With
     Set oXL = Nothing

[/vba]


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

A_3485

Дата: Воскресенье, 07.10.2012, 10:51 |
Сообщение № 15

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 146


Репутация:

0

±

Замечаний:
40% ±


2007

Спасибо помогло!! А что означает строчка:
[vba][/vba]

 

Ответить

Gustav

Дата: Воскресенье, 07.10.2012, 19:40 |
Сообщение № 16

Группа: Друзья

Ранг: Старожил

Сообщений: 2397


Репутация:

985

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

Quote (A_3485)

А что означает строчка:

Set oXL = Nothing

Ответ, например, здесь: http://www.askit.ru/custom/vba_office/m4/04_02_objects_creation.htm

Quote

Удаление объектов производится очень просто:

Set объектная_переменная = nothing

например,

Set oApp = nothing

В принципе, объект можно и не удалять — он будет удален автоматически после того, как последняя объектная переменная, которая на него ссылается, уйдет за область видимости (обычно это значит, что закончит работу процедура, в которой он используется). Однако явное удаление объектов — это «правило хорошего тона», которое позволит вам при создании серьезных приложений избежать конфликтов имен и перерасхода ресурсов.


МОИ: Ник, Tip box: 41001663842605

 

Ответить

A_3485

Дата: Воскресенье, 07.10.2012, 22:06 |
Сообщение № 17

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 146


Репутация:

0

±

Замечаний:
40% ±


2007

Всем спасибо! Все получилось. Можно тему закрывать.

 

Ответить

Return to VBA Code Examples

Open Excel File

This function below will open an Excel file with Access VBA.

Before using the function, make sure to add a reference to Microsoft Excel Object Library by going to Tools > References and checking Microsoft Excel Object Library.

Public Function OpenExcelFile(strFilePath As String) As Boolean
    'Required: Tools > Refences: Add reference to Microsoft Excel Object Library
    
    Dim appExcel As Excel.Application
    Dim myWorkbook As Excel.Workbook

    Set appExcel = CreateObject("Excel.Application")
    Set myWorkbook = appExcel.Workbooks.Open(strFilePath)
    appExcel.Visible = True
    
    'Do Something or Just Leave Open
    
    Set appExcel = Nothing
    Set myWorkbook = Nothing

End Function

'Usage Example
Sub OpenExcelFile_Example()
    Call OpenExcelFile("C:UsersStevePC2Downloadstest.xlsx")
End Sub

Open Word Document Using Access VBA

First set a reference to the Word Library for the Access VBA Environment.

Note: You would do this in the VBE by going to Tools>References and ticking Microsoft Word 15.0 Object Library.

The following code will allow you to open your Word document using Access:

Dim WordDoc As Object

Set WordDoc = CreateObject("Word.Application")
WordDoc.Visible = True
WordDoc.Documents.Open "C:UsersTarynDesktopBusinessDocument.docx"
Set WordDoc = Nothing

Or you can adapt the Open Excel File function above to create a function to open a Word document from Access VBA.

If you ever wanted to click a magic button and make complex business tasks happen automatically, macros can make that wish come true. Macros are small programs that execute commands you specify. Write them yourself using Visual Basic for Applications or let programs such as Microsoft Access build them for you. While working with an Access database, you may often find yourself importing data from Excel. Eliminate that repetitive task by letting Access create a macro that loads your spreadsheet at the click of a button.

Prepare Spreadsheet

  1. Launch Access and open one of your databases.

  2. Move to the Tables pane and double-click the table you wish to load. The table’s fields appear in columns running across the top of the update pane. You’ll probably find it easier to work with your data if the column headings in your Excel spreadsheet match the names of the fields in your Access database.

  3. Launch Excel and open the spreadsheet you wish to load into Access. Verify that the spreadsheet’s column names match the Access table’s field names. If the spreadsheet has no column headings, right-click the spreadsheet’s first row and select “Insert.” Excel adds a new empty row to the top of the spreadsheet. Type a column heading for each column in the spreadsheet. For example, if the field names in your Access table are Name and Age, use those names as column headings in the spreadsheet.

Create Macro

  1. Return to Access and click “Create.” Double-click the “Macro” button on the Ribbon to view the Macro Builder.

  2. Click “Show All Actions” and then click “Action Catalog” to display the Action Catalog pane if it is not visible. This pane displays a list of macro categories.

  3. Move to the Action Catalog Pane and double-click “Data Import/Export” to view the macros within that category. The ImportExportSpreadsheet form appears. This form allows you to set up the parameters Access needs to import your spreadsheet.

  4. Type the name of your table in the “Table name” text box. Type the path name of your spreadsheet in the “File name” text box. For example, if it is a file named “Sales.xlsx” residing in a folder named “Spreadsheets” on your “C” drive, type the following into the “File Name” text box: .. C:SpreadsheetsSales.xslx

  5. Type “Yes” in the Has Field Names text box and press “Ctrl-S.” Type a name for your macro in the “Macro Name” text box and click “OK.”

Run Macro

  1. Click the tool bar’s “Database Tools” button and then click “Run Macros” to view the Run Macro popup window.

  2. Click the “Macro Name” drop-down menu and select the macro you created.

  3. Click “OK” to run the macro. Excel imports the spreadsheet data into the table.

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
    Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

    Обратите внимание:
    1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
    2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
    3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
    4. Используйте теги [ code=vba ] …текст программы… [ /code ] для выделения текста программы подсветкой.
    5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
    6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

    Полезные ссылки:
    user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google


    Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.

    >
    Как из Access открыть Excel выполнить в Excel макрос и закрыть с сохранением.

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    08.10.07, 12:15

      Member

      **

      Рейтинг (т): 4

      Весь фак перерыл — ничего не нашел….
      Хотя скорее всего уже не раз обсасывалось.

      из Аксеса хочу открыть екселевский файл в который экспортировал данные. Числовые поля которые упрямо воспринимаются как текст привести в нормальный вид следующим кодом:

      ExpandedWrap disabled

        ActiveSheet.UsedRange.Select

        For Each tt In Selection.Cells

            tt.Value = tt.Value

        Next tt

      ____________________________
      Хор Веревки: :whistle: :whistle: :whistle: :whistle: :whistle: :whistle: :whistle: :whistle: :whistle: :whistle: :whistle:

      Добавлено 08.10.07, 12:31

      ExpandedWrap disabled

        Shell «cmd /X /C start c:mydocexample.xls»

      открывает — но как дальше выполнить там макрос пока не ясно.

      Добавлено 08.10.07, 12:54
      Вот что получилось:

      ExpandedWrap disabled

        sse = «D:My_docsliv.xls»

        Dim objExcel As Object

        Set objExcel = CreateObject(«Excel.application»)

        With objExcel

        .Workbooks.Add Template:=sse

        .Visible = True

        End With

        objExcel.ActiveSheet.UsedRange.Select

        For Each tt In objExcel.Selection.Cells

            tt.Value = tt.Value

        Next tt

        objExcel.Workbooks(1).Save

        objExcel.Application.Quit

        Set objExcel = Nothing

      Единственное думает очень долго….
      Если исходный макрос запускать из екселся — раз в 20 быстрее.

      за наведение на мысль спасибо Mongol и maxim84_


      Nick



      Сообщ.
      #2

      ,
      08.10.07, 13:21

        Member

        **

        Рейтинг (т): 4

        немного модифицировал

        ExpandedWrap disabled

          sse = «D:My_docsliv.xls»

          Dim objExcel As Object

          Set objExcel = CreateObject(«Excel.application»)

          With objExcel

          .Workbooks.Add Template:=sse

          .Visible = True

          End With

          objExcel.ActiveSheet.UsedRange.Select

          For Each tt In objExcel.Selection.Cells

              tt.Value = tt.Value

              rreee = tt.Address

          Next tt

          objExcel.Application.DisplayAlerts = False

          objExcel.Workbooks(1).SaveAs sse

          objExcel.Application.Quit

          Set objExcel = Nothing

        Но грабли вылезли в следующем: на полной базе это займет около часа (напомню в екселе это занимает 20 сек)
        Может есть нормальный способ выливать в ексель числа чтобы не приходилось так корячиться????
        напомню: при экспорте в ексель из аксеса числовые поля стают текстом — спасает от этого только процедура повторного присвоения значения(см код выше)

        ХЕЛП!!!!!!!!!! :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wacko: :wacko: :wacko:

        Сообщение отредактировано: Nick — 08.10.07, 13:44


        pvr



        Сообщ.
        #3

        ,
        08.10.07, 20:18

          Junior

          *

          Рейтинг (т): 9

          Этого надо избегать

          ExpandedWrap disabled

            For Each tt In objExcel.Selection.Cells

          Вот так будет быстрее:

          ExpandedWrap disabled

            Const xlPasteValues = -4163

            Const xlCellTypeBlanks = 4

            Const xlPasteSpecialOperationAdd = 2

            Dim objExcel As Object, sse As String

            sse = «D:My_docsliv.xls»

            Set objExcel = CreateObject(«Excel.application»)

            With objExcel

                .Workbooks.Open Filename:=sse, ReadOnly:=False

                .Cells.SpecialCells(xlCellTypeBlanks).Copy

                .ActiveSheet.UsedRange.PasteSpecial xlPasteValues, xlPasteSpecialOperationAdd

                .DisplayAlerts = False

                .Workbooks(1).SaveAs Filename:=sse

                .Quit

            End With

            Set objExcel = Nothing

          Сообщение отредактировано: pvr — 08.10.07, 20:29


          Nick



          Сообщ.
          #4

          ,
          09.10.07, 07:50

            Member

            **

            Рейтинг (т): 4

            pvr даааа…..
            Повис ексель с аксесом и надежно — снял только через три пальца и то через 10 мин.
            То ли лыжи не едут толи я не лыжник….
            может как-то можно в екселе создавать макрос-запускать на выполнение-удалять макрос-закрывать с сохранением?

            pvr— все равно спасибо — показал иной подход.

            Вопрос остаётся открытым… :no-sad:

            Добавлено 09.10.07, 08:25
            Манипуляции привели к твердому решению — никаких действий с ячейками в екселе из под объекта в аксесе. Уже на выделении ячеек связка виснет на минут 5.

            Следовательно уточняю задачу:

            Открыть ексель — это решено
            Создать в нем макрос определенного содержания — не решено
            Передать управление екселю и запустить макрос — не решено
            по окончании выполнения макроса — удалить все макросы в екселе — не решено
            сохранить и закрыть ексель — это решено
            передать управление аксесу — не решено


            pvr



            Сообщ.
            #5

            ,
            09.10.07, 18:25

              Junior

              *

              Рейтинг (т): 9

              Nick
              С точки зрения выполнения макроса — абсолютно всё-равно, кто его запускает, работать будет одинаково.
              Попробуй мой код выполнить по F8 из аксесса — какой его участок тормозит?

              И тот же код из самого Excel — только objExcel замени на Application.

              У меня одинаково отрабатывает…..

              Может у тебя при старте Excel куча каких-нибудь надстроек грузится?


              Nick



              Сообщ.
              #6

              ,
              10.10.07, 06:18

                Member

                **

                Рейтинг (т): 4

                я же говорю — макрос сначала был написан в екселе — время выполнения — 20-40 секунд на всё.
                Даже операция выделения непустых ячеек — это 1-3 секунды если запускаешь макрос в екселе (по упомянутому тобой F8) против 5 минут — если это делаешь в аксесе.
                Операция копирования в твоём коде приводит к подвисанию связки (это если дождаться пока оно все выделит) — на работе процесора и памяти данный процес никак не отражается почему-то… :unsure:
                в моём же коде процес идет, но на каждую ячейку тратится очень много времени (10-20ячеек за секунду) при минимальном размере 2000*40 — это на долго….

                :'( :blink: :'(

                Profi

                Rust



                Сообщ.
                #7

                ,
                10.10.07, 08:13

                  Цитата Nick @ 09.10.07, 07:50

                  Создать в нем макрос определенного содержания — не решено
                  Передать управление екселю и запустить макрос — не решено
                  по окончании выполнения макроса — удалить все макросы в екселе — не решено

                  Динамическое добавление и запуск макроса на языке VBA в среде разработки Visual Basic


                  pvr



                  Сообщ.
                  #8

                  ,
                  10.10.07, 08:27

                    Junior

                    *

                    Рейтинг (т): 9

                    Nick
                    Так какая строка моего кода подвисает —
                    Copy или PasteSpecial ???


                    Nick



                    Сообщ.
                    #9

                    ,
                    10.10.07, 09:02

                      Member

                      **

                      Рейтинг (т): 4

                      2 pvr копирование.
                      2 Rust — спасибки — по виду самое оно!
                      пробовать не буду — уже далеко ушел.
                      Думаю линк в ФАК добавить стоит.

                      С учетом поста Rust думаю можно закрывать тему.

                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                      0 пользователей:

                      • Предыдущая тема
                      • Visual Basic: Общие вопросы
                      • Следующая тема

                      Рейтинг@Mail.ru

                      [ Script execution time: 0,0304 ]   [ 16 queries used ]   [ Generated: 13.04.23, 19:48 GMT ]  

                      Понравилась статья? Поделить с друзьями:
                    • Access word что это такое
                    • Access word from chrome
                    • Access word 2007 скачать
                    • Access with excel database engine
                    • Access violation at address word