Есть такая проблема. Уменя есть исходный Эксель файл, ну типа шаблон. Я его открываю и записываю что либо. Потом закрываю. Но после этого в самом Экселе он становитья не видимый. я включил строки (см далее между **!!!**) которые создают видимость рабочей книги, но при этом когда прога работает в фоне (по таймеру) сам по себе открывается Эксел , а это как раз не нужно - в этом то и проблема. (Либо сам по себе открывается Эксель, либо нe видна рабочая книга.) ПОМОГИТЕ !!! ' вот чать кода, обьявление апишек не привожу. Dim appExcel As Excel.Application Dim wbkNew As Excel.Workbook, wksNew As Excel.Worksheet Dim str_new_file As String Dim ExcelWasNotRunning As Boolean Dim str_ar_fn As String On Error Resume Next ' определяем запущен ли Эксель Set appExcel = GetObject(, "Excel.Application") If Err.Number <> 0 Then ExcelWasNotRunning = True Err.Clear ' Clear Err object in case error occurred. On Error GoTo Error_OLEAccessToExcel str_path = "Z:\folder1\" str_filename_tpl = "file1.xls" str_filename_new = "K+Pr_Hot.xls" DetectExcel Set wbkNew = GetObject(str_path & str_filename_tpl, "Excel.Sheet") Set wksNew = wbkNew.ActiveSheet Set appExcel = wbkNew.Parent ' .. далее далаем вносим любые данные и изменениЯ wks_New.Range("B2").Value =" Сегодня : " & Now() '--- сохранЯем под другим именем, но ... ' ... перед сохраненим удалЯем старую версию --- ' if file exist On Error Resume Next Kill str_path & str_filename_new On Error GoTo Error_OLEAccessToExcel wbkNew.SaveAs str_path & str_filename_new
'' **!!!** если следующие строкi не включить в код то файл не видно wbkNew.Application.WindowState = xlMinimized wbkNew.Application.Visible = True wbkNew.Parent.Windows(str_filename_new).Visible = True '' **!!!** wbkNew.Close SaveChanges:=True If ExcelWasNotRunning = True Then appExcel.Quit End If Set wksNew = Nothing Set wbkNew = Nothing Set appExcel = Nothing Sub DetectExcel() ' Procedure dectects a running Excel and registers it. Const WM_USER = 1024 Dim hWnd As Long ' If Excel is running this API call returns its handle. hWnd = FindWindow("XLMAIN", 0) If hWnd = 0 Then ' 0 means Excel not running. Exit Sub Else ' Excel is running so use the SendMessage API ' function to enter it in the Running Object Table. SendMessage hWnd, WM_USER + 18, 0, 0 End If End Sub
Ответить
|