Страницы: 1
RSS
Проблема stdole32.tlb внезапно появилась в Excel, Прошу помощи
 
Друзья, был простенький макрос для Excel
Суть: документ в ворде содержал картинки, макрос вызванный из-под ворда находил номера страниц, на которых есть картинки
Затем вызывал файл Excel (который находился в той же папке, что и текущий документ ворда) и найденные номера страниц по порядку вписывал в нужную строку

Так вот, с некоторых пор перед открытием любого файла Excel возникает ошибка "stdole32.tlb". Нажимаешь ОК - и все загружается. Неприятно, но не критично. Переустановка, чистка реестра, танцы с бубном, угрозы сжечь комп - не подействовали, Excel упорно выдает ошибку stdole32.tlb
Соответственно и макрос перестал записывать нужные номера (т к в макросе есть автоматическое открытие и закрытие документа Excel, а автоматически он теперь не открывает)

Собственно сам вопрос: можно ли перед вызовом макроса просто открыть документ Excel, а функции открытия-закрытия из макроса убрать? Пусть он прямо в открытом ячейки заполняет, а сохранить и закрыть смогу уже сам руками?

Вот последние строки макроса (наверное их и нужно переписывать), подскажите пожалуйста как исправить? Могу прислать весь макрос, он небольшой
Код
 Set xl = CreateObject("Excel.Application")
    Set xlBook = xl.workbooks.Open(filepath)
        
    For i = 1 To UBound(aPages)
        If aPages(i) > 0 Then
            xlBook.Sheets(1).Cells(Row, Column).Value = i
            Column = Column + 1
        End If
    Next
    
    xlBook.Save
    xl.Quit
End Sub
 

Здравствуйте iiiadan - Такие идеи у меня:

Идея 1. Приложите пример всего вашего "Excel"-Word-макроса
или
Идея 2. Удалите Office и переустановите его
или
Идея 3. Попробуйте изменить процедуру "запусков" и запускайте Word из Excel, а не Excel из Word
или
Идея 4. Сценарий VBS запускает документ Word со своим макросом, затем сохраняет данные в текстовом-CSV файле на диск, затем закрывает документ Word, затем открывает CSV-файл в Excel

 
Цитата
iiiadan написал:
можно ли перед вызовом макроса просто открыть документ Excel, а функции открытия-закрытия из макроса убрать?
Код
Set xl = GetObject(,"Excel.Application")
а потом просто найти нужную книгу по имени(при необходимости)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Благодарю всех откликнувшихся!

Ну то есть идея какая: раз открыть макросом не получается, может у уже открытом вносить номера ячеек? То есть перед запуском макроса открыть таблицу
Соответственно, какие изменения в этом случае внести в макрос?

ocet p, спасибо!
1. сделано :)
2. уже пробовали, никак :(
3. не совсем понял, запускаю файл Excel, а затем вызываю макрос из Word, который в файле Excel выполнит изменения? Я как раз и хочу, чтобы так было, для этого тему и создал :)
4. да, все отлично, только у меня не хватит ума сначала создать CSV файл, а затем автоматически добавить его в файл (тем более Excel макросов не открывается)


Сам код:
Код
Sub GetPageImage()
    'константы
    aText = "1"                 'текст метки
    filepath = "шаблон.xls"     'название файла excel
    Row = 57                    'строка
    Column = 40                 'столбец (40 = AN)


    Dim pic As Object
    On Error Resume Next
    Dim i As Integer
    Dim NumPage As Integer
    Dim Pages As New Collection
    Dim aPages() As Integer

    filepath = ActiveDocument.Path & "\" & filepath
    NumPage = ActiveDocument.ComputeStatistics(wdStatisticPages)
    ReDim aPages(1 To NumPage)

    For Each pic In ActiveDocument.Content.InlineShapes
      If pic.Type = wdInlineShapePicture Then
        If pic.AlternativeText <> aText Then
            pic.Select
            Page = Selection.Information(wdActiveEndPageNumber)
            aPages(Page) = Page
        End If
      End If
    Next
    
    For Each pic In ActiveDocument.Content.ShapeRange
      If pic.Type = msoPicture Then
        If pic.AlternativeText <> aText Then
            pic.Select
            Page = Selection.Information(wdActiveEndPageNumber)
            aPages(Page) = Page
        End If
      End If
    Next

    Set xl = CreateObject("Excel.Application")
    Set xlBook = xl.workbooks.Open(filepath)
        
    For i = 1 To UBound(aPages)
        If aPages(i) > 0 Then
            xlBook.Sheets(1).Cells(Row, Column).Value = i
            Column = Column + 1
        End If
    Next
    
    xlBook.Save
    xl.Quit
    
End Sub
Изменено: iiiadan - 17.11.2019 12:14:51
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Код ? 1Set xl = GetObject(,"Excel.Application")а потом просто найти нужную книгу по имени(при необходимости)
Спасибо, заменил строчку в коде
с:
Код
Set xl = CreateObject("Excel.Application")
на:
Код
Set xl = GetObject(,"Excel.Application")

Запустил макрос при открытом файле Excel из той же папки - тишина :(
Изменено: iiiadan - 17.11.2019 12:18:36
 
Цитата
iiiadan написал:
Запустил макрос при открытом файле Excel из той же папки
это как понимать? При чем здесь так же папка или не та же? Может код приведете? Если подключились к Excel - открывать файл уже не надо, вместо строки
Код
Set xlBook = xl.workbooks.Open(filepath)
надо задать такую:
Код
Set xlBook = xl.workbooks(filepath)
где filepath это только имя книги, без полного пути: "Книга1.xlsx"

P.S. Обратите внимание на то, как оформлен мой код и как Ваш. Вернитесь в сообщение(Изменить), найдите кнопочку <...> и нажмите её, предварительно выделив листинг кода.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Если подключились к Excel - открывать файл уже не надо
Спасибо!
Подключился к Excel - что имеется ввиду?
в коде изначальные строчки:

Код
Set xl = CreateObject(, "Excel.Application")
Set xlBook = xl.workbooks.Open(filepath)

изменил на:

Код
Set xl = GetObject(,"Excel.Application") 
Set xlBook = xl.workbooks(filepath)

Да, filepath - константа имени файла без пути: "шаблон.xls"  
Изменено: iiiadan - 17.11.2019 12:25:39
 
Поскольку форум не по Word, a по Excel, сделал все то-же, но работающее из Excel.  :)
Код
Sub Мяу()
    Dim ar, i&, fName$
    Dim wa As Object, wd As Object, pic As Object
    With Application.FileDialog(msoFileDialogOpen)
        .InitialFileName = ThisWorkbook.Path & "\"
        .Filters.Clear
        .Filters.Add "Word", "*.doc; *.docx"
        If .Show = 0 Then Exit Sub
        fName = .SelectedItems(1)
    End With
    Set wa = CreateObject("Word.Application")
    Set wd = wa.Documents.Open(fName)
    ReDim ar(wd.Content.InlineShapes.Count)
    For Each pic In wd.Content.InlineShapes
        If pic.Type = 3 Then
            ar(i) = pic.Range.Information(3)
            i = i + 1
        End If
    Next
    wd.Close False
    wa.Quit False
    Set wd = Nothing: Set wa = Nothing
    ActiveSheet.Range("A1").Resize(, UBound(ar) + 1).Value = ar
End Sub
 
Цитата
iiiadan написал:
filepath - константа имени файла без пути: "шаблон.xls"
да? А по коду у неё тут появляется и путь:
Цитата
iiiadan написал:
filepath = ActiveDocument.Path & "\" & filepath
А вообще уберите из кода On Error Resume Next и посмотрите, где спотыкается код. Тогда можно будет более предметно разговаривать. А сейчас можно много предположений строить.
Изменено: Дмитрий(The_Prist) Щербаков - 17.11.2019 12:33:22
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:... посмотрите, где спотыкается код.
убрал, запустил, код споткнулся вот тут:
Код
Set xl = GetObject(, "Excel.Application")
 
Цитата
RAN написал:
xc
Добрый день! Сразу же остановился на строчке :(((
Код
Set wa = CreateObject("Word.Application")
 
Цитата
iiiadan написал:
код споткнулся вот тут
Can't create activeX object?
Если да - то у Вас явно проблема с библиотеками глубже. Надо скорее всего удалять офис полностью(с применением Fix-а от Microsoft для полного удаления всего-всего) и последующей установкой.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, ничего не пишет, просто при отладке подсвечивает желтым

Возможно, как раз это самое страшное, уже переустанавливали с чисткой реестра - все никак :(
 
Цитата
iiiadan написал:
уже переустанавливали с чисткой реестра - все никак
С того же дистрибутива?
 
Что такое STDOLE32.TLB и как его исправить? Содержит вирусы или безопасно?
 
Юрий, да, предустановленная винда 10 (шла вместе с ноутом), а офис 2007 старый

RAN, спасибо, уже танцевали :)
 
Цитата
iiiadan написал:
Сразу же остановился на строчке Код ? 1Set wa = CreateObject("Word.Application")
У меня, код RAN работает ... :) ... мяу, мяу ...
Какие есть системные и офисные версии у вас ? Я имею в виду, всё ли 32-bit или 64-bit, или например Office 32-bit а Windows 64-bit ? Может быть, причина кроется в несовместимости программного обеспечения.

...

Редакт.:

может быть это поможет (?):

https://appuals.com/fix-microsoft-excel-2007-error-stdole32-tlb/
https://answers.microsoft.com/en-us/msoffice/forum/msoffice_excel-mso_other-mso_2007/stdole32tlb-in-...
Изменено: ocet p - 17.11.2019 17:47:30
 
Причина проблемы в том, что реальное короткое имя каталога с MS Office не  совпадает с тем, что используется в записях в реестре. Например, в записях реестра используется C:\PROGRA~2\MICROS~1, а на диске у вас реально C:\PROGRA~2\MICROS~2. Для исправления  проще всего заменить в реестре короткое имя на длинное, например с помощью Registry Finder: ищем все вхождения C:\PROGRA~2\MICROS~1 и заменяем на C:\Program Files (x86)\Microsoft Office. Подробнее здесь (на англ.): https://superuser.com/questions/1629398/stdole32-tlb-error-on-starting-ms-excel-2007
Изменено: GCRaistlin - 06.03.2021 15:44:00
Страницы: 1
Наверх