Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Открытие книги Excel через Access - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Access » Открытие книги Excel через Access (Не работает макрос написанный в Access)
Открытие книги 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]
 
Ответить
СообщениеДоброе утро!
Помогите пожалуйста разобраться с кодом, который написа в 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]

Автор - A_3485
Дата добавления - 05.10.2012 в 10:59
Pelena Дата: Пятница, 05.10.2012, 13:28 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19188
Репутация: 4421 ±
Замечаний: ±

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

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


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЭта строчка неправильная, без неё нормально открывается
.Workbooks("sFullPath").Activate

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

Автор - Pelena
Дата добавления - 05.10.2012 в 13:28
A_3485 Дата: Пятница, 05.10.2012, 14:34 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 146
Репутация: 0 ±
Замечаний: 40% ±

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

Автор - A_3485
Дата добавления - 05.10.2012 в 14:34
Pelena Дата: Пятница, 05.10.2012, 14:38 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19188
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
Quote (A_3485)
чтобы Книга стала активной и отобразился Лист1

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


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
Quote (A_3485)
чтобы Книга стала активной и отобразился Лист1

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

Автор - Pelena
Дата добавления - 05.10.2012 в 14:38
A_3485 Дата: Пятница, 05.10.2012, 15:37 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 146
Репутация: 0 ±
Замечаний: 40% ±

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

Автор - A_3485
Дата добавления - 05.10.2012 в 15:37
Gustav Дата: Пятница, 05.10.2012, 16:32 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1137 ±
Замечаний: 0% ±

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


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеПоскольку при помощи CreateObject("Excel.Application") создается новый экземпляр (сессия) Excel (в отличие от GetObject), то открываемая книга будет в нём единственная, а, значит, и активная. Поэтому дополнительно ее активировать не надо (тем более таким ошибочным оператором).

Автор - Gustav
Дата добавления - 05.10.2012 в 16:32
A_3485 Дата: Пятница, 05.10.2012, 16:40 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 146
Репутация: 0 ±
Замечаний: 40% ±

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

Автор - A_3485
Дата добавления - 05.10.2012 в 16:40
Pelena Дата: Пятница, 05.10.2012, 16:58 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 19188
Репутация: 4421 ±
Замечаний: ±

Excel 365 & 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
 
Ответить
СообщениеПо мне так вот такой код вполне может открыть нужный файл на первом листе
[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]

Автор - Pelena
Дата добавления - 05.10.2012 в 16:58
A_3485 Дата: Пятница, 05.10.2012, 17:16 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 146
Репутация: 0 ±
Замечаний: 40% ±

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

Автор - A_3485
Дата добавления - 05.10.2012 в 17:16
Gustav Дата: Пятница, 05.10.2012, 17:27 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1137 ±
Замечаний: 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
 
Ответить
СообщениеМожет, Вам лучше будет открыть как шаблон, т.е. не через Open, а через Add ?

[vba]
Code
        .Workbooks.Add "C:\Documents and Settings\заявление.xls"
[/vba]

Автор - Gustav
Дата добавления - 05.10.2012 в 17:27
Pelena Дата: Пятница, 05.10.2012, 17:29 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 19188
Репутация: 4421 ±
Замечаний: ±

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

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


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЯ, конечно, не вижу Ваш файл. Создала свой. Но у меня он открывается с возможностью редактирования и сохраняется обычным образом.

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

Автор - Pelena
Дата добавления - 05.10.2012 в 17:29
Hugo Дата: Пятница, 05.10.2012, 23:37 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
Вероятно файл уже открыт в другом экземпляре Экселя - поэтому все остальные экземпляры открывают для чтения.
Есть способ открыть в уже открытом экселе, или если его нет - тогда открыть в новом.
Вот например - скрипт 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: E265281470651 Z422237915069
 
Ответить
СообщениеВероятно файл уже открыт в другом экземпляре Экселя - поэтому все остальные экземпляры открывают для чтения.
Есть способ открыть в уже открытом экселе, или если его нет - тогда открыть в новом.
Вот например - скрипт 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]

Автор - Hugo
Дата добавления - 05.10.2012 в 23:37
A_3485 Дата: Суббота, 06.10.2012, 16:51 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 146
Репутация: 0 ±
Замечаний: 40% ±

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

Автор - A_3485
Дата добавления - 06.10.2012 в 16:51
Pelena Дата: Суббота, 06.10.2012, 18:46 | Сообщение № 14
Группа: Админы
Ранг: Местный житель
Сообщений: 19188
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
Я в макросах не специалист, но можно попробовать, например, так
[vba]
Code
Dim oXL As Object
     Set oXL = CreateObject("Excel.Application")
     With oXL
         .Workbooks.Open "C:\Documents and Settings\1111.xls"
         .Visible = True
         .Sheets("1111").Unprotect Password:="555"
         .Sheets("Лист1").Activate
         .ActiveWorkbook.Unprotect Password:="555"
     End With
     Set oXL = Nothing
[/vba]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЯ в макросах не специалист, но можно попробовать, например, так
[vba]
Code
Dim oXL As Object
     Set oXL = CreateObject("Excel.Application")
     With oXL
         .Workbooks.Open "C:\Documents and Settings\1111.xls"
         .Visible = True
         .Sheets("1111").Unprotect Password:="555"
         .Sheets("Лист1").Activate
         .ActiveWorkbook.Unprotect Password:="555"
     End With
     Set oXL = Nothing
[/vba]

Автор - Pelena
Дата добавления - 06.10.2012 в 18:46
A_3485 Дата: Воскресенье, 07.10.2012, 10:51 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 146
Репутация: 0 ±
Замечаний: 40% ±

2007
Спасибо помогло!! А что означает строчка:
[vba]
Code
Set oXL = Nothing
[/vba]
 
Ответить
СообщениеСпасибо помогло!! А что означает строчка:
[vba]
Code
Set oXL = Nothing
[/vba]

Автор - A_3485
Дата добавления - 07.10.2012 в 10:51
Gustav Дата: Воскресенье, 07.10.2012, 19:40 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1137 ±
Замечаний: 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
 
Ответить
Сообщение
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

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

Автор - Gustav
Дата добавления - 07.10.2012 в 19:40
A_3485 Дата: Воскресенье, 07.10.2012, 22:06 | Сообщение № 17
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 146
Репутация: 0 ±
Замечаний: 40% ±

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

Автор - A_3485
Дата добавления - 07.10.2012 в 22:06
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Access » Открытие книги Excel через Access (Не работает макрос написанный в Access)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!