Strannik Пользователь Сообщений: 3 |
Доброго времени суток. Второй вопрос. Можно ли макросы типа WorkBook_Open вызвать программно? |
слэн Пользователь Сообщений: 5192 |
1 выложите здесь облегченный пример(до 100кб) или дайте ссылку где скачать в инете 2 можно вызвать. как обычно — по имени: |
Strannik Пользователь Сообщений: 3 |
WorkBook_Open размещен там, где ему и положено. И что самое главное (оно-же и самое непонятное) — он (макрос) может выполниться при открывании может и не выполниться. Событие случайное и, как правило, происходит после каких-либо манипуляций с кодом надстройки. |
Strannik Пользователь Сообщений: 3 |
{quote}{login=слэн}{date=26.03.2011 01:15}{thema=}{post}2 можно вызвать. как обычно — по имени: Как все оказвыается просто! У меня мозгов на «ЭтаКнига» не хватило. Я пытался вызвать «Книга1.xls!Workbook_Open» и получал сообщение об ошибке. |
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
Ещё можно попробовать вместо процедуры Sub Workbook_Open, размещаемого в модуле книги, использовать Sub Auto_Open(), размещаемую в стандартном модуле. У меня как-то тоже были проблемы с не всегда возникающим событием Workbook_Open , а событие Auto_Open возникает всегда. С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
{quote}{login=Alex_ST}{date=26.03.2011 06:22}{thema=}{post}Ещё можно попробовать вместо процедуры Sub Workbook_Open, размещаемого в модуле книги, использовать Sub Auto_Open(), размещаемую в стандартном модуле. У меня как-то тоже были проблемы с не всегда возникающим событием Workbook_Open , а событие Auto_Open возникает всегда.{/post}{/quote} Спасибо. Я использовал Auto_Open для принудительного запуска WorkBook_Open из модуля книги. Теперь все работает. |
|
{quote}{login=The_Prist}{date=26.03.2011 05:30}{thema=Re: }{/post}{/quote}А если выполнить Application.EnableEvents = True ? Может где в коде Вы строкой Application.EnableEvents = False(или 0) отключаете отслеживание событий и не включаете по окончании кода? Или принудительное завершение процедуры выполняете, не вернув значение данного параметра в True?{/post}{/quote} Я, вероятно, не совсем правильно вас понял. Вы имеете в виду, что после Application.EnableEvents = False закрыть Excel, потом его снова открыть и EnableEvents так и остается False? Так бывает??? |
|
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
#8 27.03.2011 00:15:21 Нет смысла через Auto_Open вызывать WorkBook_Open. С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
OK, so far I’ve uninstalled & re installed Office-2010 3 to 4 times, done hours of research for 3 days with no success. I started getting this error either from Vbscript or Excel VBA, performing the same command that has worked for months. I am not sure what I may have changed, I don’t recall changing anything that could cause it but I nailed it down to the ReadOnly:=True
parameter. I think something may be wrong with the registry… but re-installing should fix it right? It didn’t…
Anyways, very simple command that I recorded on Excel 2010. This command WORKS FINE and the file opens:
Sub Macro1()
Workbooks.Open Filename:="C:tempfile_9928_131101.xlsx"
End Sub
But when I add the ReadOnly:=True parameter, it does NOT WORK:
Sub Macro1()
Workbooks.Open Filename:="C:tempfile_9928_131101.xlsx", ReadOnly:=True
End Sub
This is the returned error Run-time error ‘1004’ Method ‘Open’ of object ‘Workbooks’ failed:
When I click Debug, the error is at the only line of code.
- Remove From My Forums
-
Question
-
running excel 2010 on windows 7. trying to open Book2.xlsx from Book1.xlsm. this hard-coded macro works:
Sub Macro3()
Workbooks.Open Filename:=»C:UserssteveBook2.xlsx», UpdateLinks:=True, ReadOnly:=True
Workbooks(«book2.xlsx»).ActivateEnd Sub
This function doesn’t (no error on the workbooks.open line, but wb throws object variable or with block variable not set:
Public Function OpenWorkbook1(FileToOpen As String) As String
Dim wb As Workbook
On Error GoTo ErrTrap
If Dir(FileToOpen) <> «» Then
Set wb = Workbooks.Open(«c:usersstevebook2.xlxs», 0, True)
Debug.Print wb.Name
OpenWorkbook1 = «Opened » & FileToOpen
Else
OpenWorkbook1 = FileToOpen & » doesn’t exist.»
End IfExit Function
ErrTrap:
MsgBox Err.Number & » » & Err.Description, vbOKOnly, » Error from OpenWorkbook»
OpenWorkbook1 = «Failed to Open » & FileToOpen
Exit FunctionEnd Function
steve
This program is supposed to create a button that the user can press to activate a different sub. From my searches online, it seems that the sub below should activate when opening up the workbook, but it’s not?
What am I doing wrong?
Option Explicit
Private Sub Workbook_Open()
Dim btn As Button
Dim rng As Range
With Worksheets("Sheet1")
Set rng = .Range("B2:C2")
Set btn = .Buttons.Add(rng.Left, rng.Top, rng.Width, rng.Height)
With btn
.Caption = "To begin the program, please click this button"
.AutoSize = True
.OnAction = "TableCreation1"
End With
End With
End Sub
asked Jul 6, 2012 at 21:18
2
Make sure your Private Sub Workbook_Open() subroutine is pasted inside of the This Workbook object and not in a Module, Form, or Sheet object.
answered Jul 8, 2012 at 21:23
danielpiestrakdanielpiestrak
5,2493 gold badges29 silver badges29 bronze badges
1
The solution I found was running the below code and then the «Open» event worked.
Sub EventRestore()
Application.EnableEvents = True
End Sub
Bugs
4,4919 gold badges32 silver badges41 bronze badges
answered Aug 23, 2017 at 12:31
NazimNazim
711 silver badge1 bronze badge
2
Interesting.
In 2009 a conflict with conditional formatting of the sheet to open is described, as in
vbforum post.
It seems that this bug still exists in excel and prevents the workbook_open
event from being fired.
I have a workbook (old XLS-binary format) that simply does not fire the event in Excel 2003 and 2007 but does in 2013. I deleted all conditional formatting from the first worksheet but could still not get the workbook_open
procedure to run in elder Excel-Versions.
A Workaround, I use in distributed workbooks is to use a local variable and a second event in the workbook as follows:
''
' private variable
Private wbOpenEventRun as Boolean
''
' procedure to be called by excel when workbook opens
Private Sub Workbook_Open()
wbOpenEventRun = true
' perform tasks
End Sub
''
' the selection change event fires usually.
' performance is not reduced
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Not wbOpenEventRun Then Workbook_Open
' perform tasks in reaction of selection change events, if required
End Sub
answered Dec 2, 2014 at 13:34
DrMarbuseDrMarbuse
80411 silver badges30 bronze badges
1
I know this post has been dormant for a while, but I just struggled for hours to solve this problem. It’s the oddest thing, but I finally noticed that one of my worksheets was in «Page View»… and as soon as I put it into «Normal» my Workbook_Open() function started working as normal again. VERY STRANGE — definitely a Excel bug… just glad I finally solved it… Hope it helps someone…
answered Oct 4, 2016 at 3:37
ShawnShawn
212 bronze badges
0
My solution was kind of obscure, and I don’t even remember now why it occurred to me as a potential solution. The file I created in which the Workbook_Open() macro would not run, I originally created through the following steps:
- Right clicked in the relevant folder, clicked New, clicked Microsoft Excel Worksheet.
- Named the file «Workbook_1«.
- Opened Workbook_1.
- File, Save As, changed file type to Excel Macro-Enabled Workbook (*.xlsm), Save.
- Wrote VBA code including a Workbook_Open() nested in ThisWorkbook.
For whatever reason, I wondered if my problem had anything to do with the fact that the file «started as» a standard .xlsx. So I simply:
- Opened a new blank Workbook within Excel (Book1).
- File, Save As, input Workbook_2, changed filed type to Excel Macro-Enabled Workbook (*.xlsm), Save.
- Copied VBA code and structure from the original Workbook_1.
Unlike the original Workbook_1, the new Workbook_2 successfully ran the Workbook_Open() sub on open. Maybe a potential cause of this problem is related to the file’s type history (i.e. if it was at some point a type that cannot run macros). Or maybe simply trying again with a new file is what solved this problem for me. Either way, this may work for anyone for which other solutions did not.
answered Oct 1, 2019 at 15:45
Similar to Nazim’s event enable via code solution I found out the following fix:
the fix
closing all excel workbooks and VBA windows and reopening the one with Workbook_Open()
solved it.
(likely due to the event enabling similar to Nazim’s solution linked above).
problem experience
As I was debugging and aborted execution, I disabled the events in the running code before abort. I did not notice this circumstance at first and even after close/reopen of my workbook it did not work…
probable cause
…The other open excel workbooks or some global instance somehow «remembered» that the events of the reopened workbook had been turned off.
answered Jan 21, 2019 at 8:50
Andreas CovidiotAndreas Covidiot
4,2185 gold badges50 silver badges95 bronze badges
LostBY 0 / 0 / 0 Регистрация: 25.04.2013 Сообщений: 12 |
||||
1 |
||||
14.01.2016, 18:32. Показов 6451. Ответов 10 Метки нет (Все метки)
Добрый вечер! Подскажите, что делаю не так.
Дело в том, что WB как был Nothing так и остается Nothing после работы Workbooks.Open. Что делать в такой ситуации?
0 |
es geht mir gut 11265 / 4747 / 1183 Регистрация: 27.07.2011 Сообщений: 11,438 |
|
14.01.2016, 18:36 |
2 |
Что делать в такой ситуации? А строку FileName проверяли? Там правильный адрес файла?
0 |
0 / 0 / 0 Регистрация: 25.04.2013 Сообщений: 12 |
|
14.01.2016, 18:39 [ТС] |
3 |
А строку FileName проверяли? Там правильный адрес файла? Да. Я туда подставлял «C:123.xlsx». Файл 123.xlsx создан
0 |
es geht mir gut 11265 / 4747 / 1183 Регистрация: 27.07.2011 Сообщений: 11,438 |
|
14.01.2016, 18:41 |
4 |
Я туда подставлял «C:123.xlsx» Да это понятно. Я спрашиваю именно про код из первого поста. Строка правильная формируется?
0 |
0 / 0 / 0 Регистрация: 25.04.2013 Сообщений: 12 |
|
14.01.2016, 18:43 [ТС] |
5 |
Да это понятно. Я спрашиваю именно про код из первого поста. Строка правильная формируется? Строка правильная.
0 |
es geht mir gut 11265 / 4747 / 1183 Регистрация: 27.07.2011 Сообщений: 11,438 |
|
14.01.2016, 18:49 |
6 |
Файл не открывается А должен ли он открываться? Посмотрите хотя бы как называется функция : GetFromCloseFile Да, и замените + на & , на всякий случай.
0 |
LostBY 0 / 0 / 0 Регистрация: 25.04.2013 Сообщений: 12 |
||||
14.01.2016, 19:00 [ТС] |
7 |
|||
SoftIce, должен открываться. Вот новый код — все равно не работает
0 |
es geht mir gut 11265 / 4747 / 1183 Регистрация: 27.07.2011 Сообщений: 11,438 |
|
14.01.2016, 19:00 |
8 |
Вот работа Вашего кода, все четко работает, файл не видно как открывался, а данные получены. Миниатюры
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
14.01.2016, 19:02 |
9 |
Дело в том, что WB как был Nothing так и остается Nothing после работы Workbooks.Open Если при попытке открыть несуществующую книгу — не возникает ошибки, значит наличествует инструкция On Error …, которая мешает выявить причину. P.S. Если известно имя листа, то извлечь данные из закрытой книги — можно и другим способом.
0 |
0 / 0 / 0 Регистрация: 25.04.2013 Сообщений: 12 |
|
14.01.2016, 19:24 [ТС] |
10 |
P.S. Если известно имя листа, то извлечь данные из закрытой книги — можно и другим способом. Каким?
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
14.01.2016, 19:33 |
11 |
LostBY, Если полученное значение — затем вводится в ячейку, то можно сначала ввести обычную ссылку, а затем, заменить формулу на результат, который она возвращает. Если нет, то A VBA Function To Get A Value From A Closed File
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
14.01.2016, 19:33 |
11 |