Ошибка при выполнении модуля openworkbook

 

Strannik

Пользователь

Сообщений: 3
Регистрация: 01.01.1970

Доброго времени суток.  
Написал надстройку, проверяющую открываемые книги Excel и, в зависимости от условий, разрешающую или блокирующую опредаленные действия с данными. Однако, по какой-то причине WorkBook_Open надстройки не запускается ни при открытии Excel, ни при подключении надстройки. Единственный способ — запустить макрос вручную из редактора. Может кто знает, как это исправить и избежать в дальнейшем.  

  Второй вопрос. Можно ли макросы типа WorkBook_Open вызвать программно?

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

1 выложите здесь облегченный пример(до 100кб) или дайте ссылку где скачать в инете  

  2 можно вызвать. как обычно — по имени:  
   Application.Run «Книга1.xls!ЭтаКнига.Workbook_Open»

 

Strannik

Пользователь

Сообщений: 3
Регистрация: 01.01.1970

WorkBook_Open размещен там, где ему и положено. И что самое главное (оно-же и самое непонятное) — он (макрос) может выполниться при открывании может и не выполниться. Событие случайное и, как правило, происходит после каких-либо манипуляций с кодом надстройки.

 

Strannik

Пользователь

Сообщений: 3
Регистрация: 01.01.1970

{quote}{login=слэн}{date=26.03.2011 01:15}{thema=}{post}2 можно вызвать. как обычно — по имени:  
   Application.Run «Книга1.xls!ЭтаКнига.Workbook_Open»{/post}{/quote}  

  Как все оказвыается просто! У меня мозгов на «ЭтаКнига» не хватило. Я пытался вызвать «Книга1.xls!Workbook_Open» и получал сообщение об ошибке.  
Спасибо за науку.

 

Alex_ST

Пользователь

Сообщений: 2746
Регистрация: 22.12.2012

На лицо ужасный, добрый внутри

Ещё можно попробовать вместо процедуры 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? Так бывает???    
В описанной мной ситуации, после ручного запуска WorkBook_Open все начинает работать и событийные макросы в том числе. Потом я закрываю Excel. Снова запускаю Excel. По логике, как я это себе представляю, при открытии книги должен выполняться марос WorkBook_Open, а он, зараза, выполняться не хочет. Точнее может выполниться, а может и не выполниться. Кучу времени убил на эксперименты но так ничего не понял. Вот такие пироги…  
Выше мне подсказали как программно запустить WorkBook_Open. Вот теперь я его принудительно из Auto_Open вызываю. Посмотрим, что получится.

 

Alex_ST

Пользователь

Сообщений: 2746
Регистрация: 22.12.2012

На лицо ужасный, добрый внутри

#8

27.03.2011 00:15:21

Нет смысла через Auto_Open вызывать WorkBook_Open.  
Событие Auto_Open также как и WorkBook_Open возникает всегда при открытии книги (также как и Auto_Close при закрытии). Это просто «рудиментарный орган» VBA, оставленный для обеспечения совместимости со старыми версиями, в которых не было обработки событий открытия-закрытия книги..  
Поэтому просто пишите в Sub 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»).Activate

    End 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 If

    Exit Function

    ErrTrap:
        MsgBox Err.Number & » » & Err.Description, vbOKOnly, » Error from OpenWorkbook»
        OpenWorkbook1 = «Failed to Open » & FileToOpen
        Exit Function

    End 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

Zoe stands with Ukraine's user avatar

asked Jul 6, 2012 at 21:18

TheTreeMan's user avatar

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

danielpiestrak's user avatar

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's user avatar

Bugs

4,4919 gold badges32 silver badges41 bronze badges

answered Aug 23, 2017 at 12:31

Nazim's user avatar

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

DrMarbuse's user avatar

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

Shawn's user avatar

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:

  1. Right clicked in the relevant folder, clicked New, clicked Microsoft Excel Worksheet.
  2. Named the file «Workbook_1«.
  3. Opened Workbook_1.
  4. File, Save As, changed file type to Excel Macro-Enabled Workbook (*.xlsm), Save.
  5. 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:

  1. Opened a new blank Workbook within Excel (Book1).
  2. File, Save As, input Workbook_2, changed filed type to Excel Macro-Enabled Workbook (*.xlsm), Save.
  3. 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

CaptainFun's user avatar

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 Covidiot's user avatar

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

Метки нет (Все метки)


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

Добрый вечер!

Подскажите, что делаю не так.
Задача: скопировать значение ячейки из одного .xlsm файла в другой. Вот код:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
    Public Function GetFromCloseFile(Data As Range) As Double
    Dim FileName As String
    FileName = "E:Dropbox1. TimeTracking and plansХронометраж" + Data + "_Хронометраж.xlsm"
    
    Dim WB As Workbook
    Set WB = Application.Workbooks.Open(FileName)
   
    GetFromCloseFile = WB.Cells(10, 1) 'WB.Sheets(1).Cells(10, 1).Value
    WB.Close
 
End Function

Дело в том, что WB как был Nothing так и остается Nothing после работы Workbooks.Open. Что делать в такой ситуации?



0



es geht mir gut

11265 / 4747 / 1183

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

Сообщений: 11,438

14.01.2016, 18:36

2

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

Что делать в такой ситуации?

А строку FileName проверяли? Там правильный адрес файла?



0



0 / 0 / 0

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

Сообщений: 12

14.01.2016, 18:39

 [ТС]

3

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

А строку 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

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

Я туда подставлял «C:123.xlsx»

Да это понятно. Я спрашиваю именно про код из первого поста. Строка правильная формируется?



0



0 / 0 / 0

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

Сообщений: 12

14.01.2016, 18:43

 [ТС]

5

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

Да это понятно. Я спрашиваю именно про код из первого поста. Строка правильная формируется?

Строка правильная.
Я имею ввиду, что и с «C:123.xlsx» не работает. Файл не открывается



0



es geht mir gut

11265 / 4747 / 1183

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

Сообщений: 11,438

14.01.2016, 18:49

6

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

Файл не открывается

А должен ли он открываться?
Данная функция возвращает содержимое ячейки А10 указанной книги непонятно какого листа.

Посмотрите хотя бы как называется функция : GetFromCloseFile

Да, и замените + на & , на всякий случай.



0



LostBY

0 / 0 / 0

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

Сообщений: 12

14.01.2016, 19:00

 [ТС]

7

SoftIce, должен открываться. Вот новый код — все равно не работает

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Public Function GetFromCloseFile(Data As Range) As Double
    Dim FileName As String
    FileName = "E:Dropbox1. TimeTracking and plansÕðîíîìåòðàæ" & Data & "_Õðîíîìåòðàæ.xlsm"
    
    Dim WB As Workbook
    Set WB = Application.Workbooks.Open(FileName)
 
    GetFromCloseFile = WB.Sheets(1).Cells(1, 10)
    WB.Close
 
End Function



0



es geht mir gut

11265 / 4747 / 1183

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

Сообщений: 11,438

14.01.2016, 19:00

8

Вот работа Вашего кода, все четко работает, файл не видно как открывался, а данные получены.
На процедуру main не обращайте внимания, там неправильно объявлена r

Миниатюры

Workbooks.Open не открывает файл
 



0



4131 / 2235 / 940

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

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

14.01.2016, 19:02

9

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

Дело в том, что WB как был Nothing так и остается Nothing после работы Workbooks.Open

Если при попытке открыть несуществующую книгу — не возникает ошибки, значит наличествует инструкция On Error …, которая мешает выявить причину.

P.S. Если известно имя листа, то извлечь данные из закрытой книги — можно и другим способом.



0



0 / 0 / 0

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

Сообщений: 12

14.01.2016, 19:24

 [ТС]

10

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

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

Понравилась статья? Поделить с друзьями:
  • Ошибка при выполнении метода объекта ком
  • Ошибка при выполнении макрофункции signdocument
  • Ошибка при выполнении кувырка вперед в группировки является
  • Ошибка при выполнении кувырка вперед в группировке является
  • Ошибка при выполнении кувырка вперед в группировке это