Выгрузка данных в Excel

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Выгрузка данных в Excel

Сообщение sergey-911 » 20.07.2006 (Чт) 19:26

Доброе время суток уважаемые.
Нужно сделать выгрузку данных в Excel. Для этого
Код: Выделить всё
Dim xlr As Excel.RangeDim xlr As Excel.Range
xlr.Range("A2").CopyFromRecordset TData1.Recordset

При включении компьютера, при первом запуске процедуры выгрузки в приложении – все ОК. При последующей выгрузке в этом открытом приложении происходит ошибка:

Error 1004 : Method 'Cells' of object '_Global' failed

Закрываю приложение, запускаю заново, дальнейшая выгрузка происходит без ошибок и в первый, и в последующие разы.
Как убрать ошибку?
На всякий случай привожу код всей процедуры выгрузки данных в Excel
Код: Выделить всё
Private Sub mnuSaveRepXLS_Click()
On Error GoTo Er

    Dim Cols As TrueOleDBGrid80.Columns
    Set Cols = TDBGrid1.Columns
    Dim i, C As Byte
    Dim xla As New Excel.Application
    Dim xlb As New Excel.Workbook
    Dim xls As New Excel.Worksheet
    Dim xlr As Excel.Range
       
    xla.ODBCTimeout = 60
    MousePointer = vbHourglass
    Set xlb = xla.Workbooks.Add
    Set xls = xlb.Worksheets.Add
    xls.Activate
    xlb.Saved = False
    'Позицируем курсор на листе для вставки в нужное место
    Set xlr = xls.Cells(1, 1)
    'Для вставки всего динамического набора
    If TData1.Recordset.BOF = False Then
        TData1.Recordset.MoveFirst
        'Вставка рекордсета в лист
        xlr.Range("A2").CopyFromRecordset TData1.Recordset  'Ошибка - здесь
        TData1.Recordset.MoveFirst
    End If
    For i = 0 To Cols.Count - 1
        C = i + 1
        'Задаем имя столбца
        xls.Cells(1, C) = Cols.Item(i).DataField
        Set xlr = xls.Cells(1, C)
        'Выделяем верхнюю строку полужирным шрифтом
        xlr.Select
        xlr.Font.Bold = True
    Next i
    MousePointer = vbDefault
    xla.Visible = True
    'Предварительный просмотр
    'xla.ActiveWindow.SelectedSheets.PrintPreview

Exit Sub
Er:
MsgBox "Error " & Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error"
End Sub
С уважением, Сергей.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.07.2006 (Чт) 21:10

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 21.07.2006 (Пт) 10:26

GSerg
Спасибо за ссылки. Но разобраться, так и не смог.
Строку
Код: Выделить всё
xlr.Range("A2").CopyFromRecordset TData1.Recordset

заменил на
Код: Выделить всё
xla.Range("A2").CopyFromRecordset TData1.Recordset

эффект тотже.
С уважением, Сергей.

BasiС
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 16.02.2006 (Чт) 23:34
Откуда: Koenigsberg

Сообщение BasiС » 21.07.2006 (Пт) 12:34

Что-то похожее у меня было, когда у меня excel после выполнения, оставался висеть в процессах.

попробуй поставить в конце процедуры:

Set xlr = Nothing
Set xls = Nothing
Set xlb = Nothing
Set xla = Nothing

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 21.07.2006 (Пт) 14:45

BasiС
Код: Выделить всё
Set xlr = Nothing
Set xls = Nothing
Set xlb = Nothing
Set xla = Nothing

Пробовал - не помогает.
Также пробовал
Код: Выделить всё
xla.Cells(2, 1).CopyFromRecordset TData1.Recordset 

, прочитав статью http://www.vbstreets.ru/VBA/Articles/65934.aspx
Эффект - все тотже... :(
С уважением, Сергей.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.07.2006 (Пт) 22:14

Убери new везде, где его не должно быть.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 22.07.2006 (Сб) 9:56

GSerg
Убрал, эффект тотже. На всякий случай привожу то, что получилось.
Код: Выделить всё
Private Sub mnuSaveRepXLS_Click()
On Error GoTo Er

    Dim Cols As TrueOleDBGrid80.Columns
    Set Cols = TDBGrid1.Columns
    Dim i, C As Byte
    Dim xla As Excel.Application
    Dim xlb As Excel.Workbook
    Dim xls As Excel.Worksheet
    Dim xlr As Excel.Range
   
    Set xla = New Excel.Application
       
    xla.ODBCTimeout = 60
    MousePointer = vbHourglass
    Set xlb = xla.Workbooks.Add
    Set xls = xlb.Worksheets.Add
    xls.Activate
    xlb.Saved = False
    'Для вставки всего динамического набора
    If TData1.Recordset.BOF = False Then
        TData1.Recordset.MoveFirst
        'Вставка рекордсета в лист
        xla.Cells(2, 1).CopyFromRecordset TData1.Recordset  'ОШИБКА - ЗДЕСЬ!!!!!!!!!!!!!!
        TData1.Recordset.MoveFirst
    End If
    For i = 0 To Cols.Count - 1
        C = i + 1
        'Задаем имя столбца
        xls.Cells(1, C) = Cols.Item(i).DataField
        Set xlr = xls.Cells(1, C)
        'Выделяем верхнюю строку полужирным шрифтом
        xlr.Select
        xlr.Font.Bold = True
    Next i
    MousePointer = vbDefault
    xla.Visible = True

    Set xlr = Nothing
    Set xls = Nothing
    Set xlb = Nothing
    Set xla = Nothing
   
Exit Sub
Er:
MsgBox "Error " & Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error"
End Sub
С уважением, Сергей.

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 22.07.2006 (Сб) 9:59

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


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 104

    TopList