Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2010, 18:40   #1
JJill
 
Регистрация: 10.03.2010
Сообщений: 3
По умолчанию Проблема при работе с несколькими книгами

Для решения своих задач, решил, что больше всего подойдет работа с несколькими книгами.
До этого все работало но в одной книге, и было не эстетично.

вобщем, частично код взят с форума и выглядит примерно так

Код:
FileName = "04 Template.xls"
TemplatePath = Path & FileName
Set Template_wb = OpenData(TemplatePath, FileName, 1)

FileName = "05 ResultText.xls"
ProgramPath = Path & FileName
Set Program_wb = OpenData(ProgramPath, FileName, 1)

Program_wb.Worksheets(1).UsedRange.Clear


'==============Цикл по устройствам из Списка ================================
For Each MotListRow In List.UsedRange.Rows
    Call Drive_Gen(MotListRow, Program_wb, 1, Template_wb, LastRow_1, LastRow_2)
Next
фунция OpenData для проверки, открыта ли книга, и если открыта, то использовать её, если нет - открыть.

Код:
Public Function OpenData(Path As String, Name As String, Optional VisibleMode As Boolean) As Object
If Not IsWorkbookOpened(Path) Then
    Dim XLApp As New Excel.Application
    Set OpenData = XLApp.Workbooks.Open(Path)
    If VisibleMode Then XLApp.Visible = True
    Set XLApp = Nothing
Else
        Set OpenData = Workbooks(Name)
End If

End Function

Function IsWorkbookOpened(ByVal FileName As String) As Boolean
    Dim FF As Integer
    FF = FreeFile
    On Error Resume Next
    Open FileName For Binary Lock Read As #FF
    IsWorkbookOpened = (err.Number <> 0)
    On Error GoTo 0
    Close #FF
End Function
функция Drive_Gen обращается к одной книге (Template) и в зависимости от значения в строке DriveGen выбирает что конкретно нужно писать в Program

Код:
Sub Drive_Gen(DEVRow As Range, Program_wb As Workbook, ProgramPageNr, Template_wb As Workbook, LastRow_1, LastRow_2)

Dim Program As Worksheet: Set Program = Program_wb.Worksheets(ProgramPageNr)
Dim LastRow
Dim CurRow As Range

    '==установка рабочих параметров==
    DEVType = DEVRow.Cells(1, 6)
    
    Select Case DEVType
    Case "B", "D", "C", "G", "J", "A", "H-OC", "H-AB", "H-ABC", "L", "MM"
        'On Error GoTo err
        Set Template = Template_wb.Worksheets(DEVType)
    Case Else
err:
        DEVRow.Cells(1, 6).Interior.ColorIndex = 3
        GoTo NextDev
    End Select

собственно проблема в том, что это все занимает ОЧЕНЬ много времени.
минут 15, хотя если все расположено в одной книге, то секунды 2.

это нормально , или виноваты мои кривые руки?))
JJill вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема при работе с ini dolphin705 Общие вопросы Delphi 4 12.08.2009 20:59
Проблема при работе с массивом kAND Общие вопросы C/C++ 10 15.02.2009 19:30
Проблема при работе с БД HAMMAN БД в Delphi 3 29.03.2008 14:42
проблема при работе с несколькими исходными файлами Grind Помощь студентам 2 19.02.2008 19:37
Проблема при работе с представлениями Nemec БД в Delphi 2 29.07.2007 04:21