-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


VBA Выбрать лист для импорта

Суббота, 29 Июля 2017 г. 13:05 + в цитатник
Доброго времени суток
Есть процедура импорта экс-акс:
Public Sub ImpChT()  
Dim appX As Excel.Application
Dim wB As Excel.Workbook
Dim wS As Excel.Worksheet
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim rsE As DAO.Recordset
Dim i As Long

Set appX = CreateObject("Excel.Application")
Set wB = appX.Workbooks.Open(Forms![f].[Поле6].Value)
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Таблица")
Set wS = wB.Sheets(1)
   With wS
      For i = 2 To .Cells(.Rows.Count, "B").End(xlUp).Row
         If Len(wS.Cells(i, "B")) > 0 Then
            With rst
            .AddNew
            On Error GoTo ErN
            ![поле] = wS.Cells(i, "A")
            ![поле] = wS.Cells(i, "B")
            ![поле] = wS.Cells(i, "C")
            On Error GoTo 0
            .Update
            End With
         End If
      Next
   End With
rst.Close: Set rst = Nothing
dbs.Close: Set rst = Nothing
wB.Close: Set wB = Nothing
appX.Quit: Set appX = Nothing

MsgBox "Импорт Завершён"

   If DCount("[Name]", "MSysObjects", "[Name] = 'Errors_Таблица'") > 0 Then
   MsgBox "Найдены ошибки в строках(см. таблицу Errors_Таблица)"
   End If
Exit Sub
ErN:
   Select Case Err.Number
   Case 3421:
      If DCount("[Name]", "MSysObjects", "[Name]='Errors_Таблица'") = 0 Then
      CurrentDb.Execute "CREATE TABLE Errors_Таблица(RowNumbers INT)"
      End If
   Set rsE = dbs.OpenRecordset("Errors_Таблица")
      With wS
         With rsE
         .AddNew
         ![RowNumbers] = wS.Cells(i, "A")
         .Update
         End With
      End With
   rsE.Close: Set rsE = Nothing
   Resume Next
   Case Else
   End Select
End Sub

Нужно сделать возможным выбрать с какого листа импорировать данные. При этом номер листа прписывается в поле (желателен именно текст бокс, не комбобокс).
Я пробовал
...
Dim sn As String
...
sn = CInt(Forms![Форма].[Поле].Value)
...
Set wS = wB.Sheets(sn)
...

Возникала ошибка 9 - subscript out of range в Set wS...
Ведь не нужен же массив для того, чтобы просто указать номер листа?

http://www.sql.ru/forum/1267451/vba-vybrat-list-dlya-importa


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку