Обработка файла Excel открытого ранее

YK13
Дата: 02.11.2009 20:00:35
Всем добрый день!

Опять проблема с VBA

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

делаю так


Public Function FileExcel_OK(xlsPath As String, xlsPathOld As String, imagePath As String) As String
    Dim xlApp As Excel.Application
    Dim xWBook As Object
    Dim xSheet As Object

    Set xlApp = GetObject(, "Excel.Application")
    
    On Error GoTo Err_NoFile:
    
    For Each xwb In xlApp.Workbooks
        If (xwb.Path & "\" & xwb.Name) = xlsPathOld Then
            Set xWBook = xwb
            Exit For
        End If
    Next
        
    Set xSheet = xWBook.Worksheets("MySheet1")
    
    xSheet.Unprotect Password:="zfp"

    xSheet.Range("A1").Select
    xlApp.ActiveSheet.Pictures.Insert(imagePath).Select

    xSheet.Protect Password:="zfp"
    xWBook.SaveAs xlsPath
    xWBook.Close False
    FileExcel_OK = "OK"
    Exit Function
Err_NoFile:
    FileExcel_OK = "File not found"
    Exit Function
End Function


Однако xlApp.Workbooks показывает количество Workbooks равным 0 хотя файл который мне нужно обрабатывать в действительности уже открыт

Зараннее благодарен за совет
С уважением
YK13
Andrew_nik
Дата: 03.11.2009 09:17:23
Количество открытых книг
xlApp.workbooks.count
Полный путь к книге
xWb.FullPath
Кстати можно цикл организовать и по другому. Кстати так будет быстрее
for i=1 to xlapp.workbooks.count
  
  if xlapp.workbooks(i).fullpath=oldpath then 
       set wWb=xlapp.workbooks(i): Exit For
  end if

next

Надо бы объявить переменную xWb в начале процедуры.

Не забывайте обнулять переменные при выходе.
Анатолий ( Киев )
Дата: 03.11.2009 10:23:37
Вероятно у вас открыто несколько экземпляров Excel.
Set xlApp = GetObject(, "Excel.Application") возвращает ссылку на первый (возможно - скрытый), а файл открыт в другом.

В вашем случае (и вообще для существующего файла) лучше так:
  Set xWBook = GetObject(xlsPathOld)
  Set xlApp = xWBook.Application