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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2017, 09:17   #1
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 325
По умолчанию Копирование содержимого таблиц access на листы excel 2003

Здравствуйте Уважаемые программисты!
Помогите пожалуйста исправить код ниже (vba excel 2003), в котором не выполняется условие выделенное серым цветом. Т.е. при открытии книги, с помощью файла udl (в котором прописан путь к файлу mdb), должно на создаваемые листы копироваться содержимое таблиц из access, в 1-ом условии IF копируются все таблицы кроме таблиц с именем начинающемся на "элем", а во 2-ом условии IF копируются только таблицы с именем начинающемся на "элем". Не работает 2-е условие: новые листы создаются, но данные из таблиц access не копируются?
Заранее спасибо!

Код:
Private Sub Workbook_Open()
   Dim conn As ADODB.Connection
   Set conn = New ADODB.Connection
   conn.Mode = adModeRead
   conn.Open "File Name=c:\connect.udl;"

   Dim i As Integer

   Dim xl As New Excel.Application
   Dim Sheet As Worksheet
   Dim wksht As String
   Dim wkbk As Excel.Workbook

   Dim cat As ADOX.Catalog
   Set cat = New ADOX.Catalog
   cat.ActiveConnection = conn

   Dim tbl As ADOX.Table
   Set tbl = New ADOX.Table

   Dim rselemti As ADODB.Recordset
   Set rselemti = New ADODB.Recordset

   xl.DisplayAlerts = False
   With wkbk
      For Each tbl In cat.Tables
         If tbl.Type = "TABLE" And left(tbl.Name, 4) <> "MSys" And left(tbl.Name, 4) <> "элем" Then
            Set rselemti = conn.Execute("SELECT * FROM " & tbl.Name)
            wksht = tbl.Name
            On Error Resume Next
            Set Sheet = Sheets(wksht)
            If Err Then
               Err.Clear
               Sheets.Add After:=Sheets(Sheets.Count)
               Sheets(Sheets.Count).Name = wksht
               i = 1
               Do While Not rselemti.EOF
                  Sheets(wksht).Cells(i, 1).Value = rselemti.Fields("Элемент")
                  i = i + 1
                  rselemti.MoveNext
               Loop
            End If
         End If

         If tbl.Type = "TABLE" And left(tbl.Name, 4) = "элем" Then
            Set rselemti = conn.Execute("SELECT * FROM " & tbl.Name)
            wksht = tbl.Name
            On Error Resume Next
            Set Sheet = Sheets(wksht)
            If Err Then
               Err.Clear
               Sheets.Add After:=Sheets(Sheets.Count)
               Sheets(Sheets.Count).Name = wksht
               i = 1
               Do While Not rselemti.EOF
                  Sheets(wksht).Cells(i, 1).Value = rselemti.Fields("Имя")
                  i = i + 1
                  rselemti.MoveNext
               Loop
            End If
         End If
      Next tbl
   End With
   xl.DisplayAlerts = True
End Sub

Последний раз редактировалось ольгаг; 14.07.2017 в 09:20.
ольгаг вне форума Ответить с цитированием
Старый 14.07.2017, 09:44   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

глупо, но ...во 2м случае rselemti получает какой-либо результат, RecordCount > 0?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 14.07.2017, 09:54   #3
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 325
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
глупо, но ...во 2м случае rselemti получает какой-либо результат, RecordCount > 0?
Да, таблицы access начинающееся по имени с "элем" не пустые, в третьем столбце "Имя" записи есть.
ольгаг вне форума Ответить с цитированием
Старый 14.07.2017, 10:49   #4
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 325
По умолчанию

Заметила сейчас, что не работает 2-ое условие, т.к. имя, например, "элем_ДД-12", а если имя "элем_ДД_12" работает. Подскажите пожалуйста, действительно ли недопустим символ "-"(тире) в имени таблицы access? Можно ли это обойти?
ольгаг вне форума Ответить с цитированием
Старый 14.07.2017, 10:57   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

"-" допустимый елемент имени таблицы.

Базка, конечно, конфиденциальная на столько,что даже урезанной версии нельзя выложить для тестирования?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 14.07.2017, 11:51   #6
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 325
По умолчанию

Но в запросе
Код:
Set rselemti = conn.Execute("SELECT * FROM " & tbl.Name)
выдает ошибку?(если в имени тире)
ольгаг вне форума Ответить с цитированием
Старый 14.07.2017, 12:06   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
dim sName as string
sName = Replace(tbl.Name,"-","_")
Set rselemti = conn.Execute("SELECT * FROM " & sName)
Код:
Set rselemti = conn.Execute("SELECT * FROM [" & tbl.Name &"]")
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 14.07.2017, 12:25   #8
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 325
По умолчанию

Спасибо!
ольгаг вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таблицы Access в Листы Excel дописать код ольгаг Microsoft Office Excel 6 28.06.2012 07:44
Сравнение таблиц Excel 2003 Арсений Михайлович Microsoft Office Excel 12 20.07.2010 09:36
Excel 2003 копирование из разных файлов в один mixaxa Microsoft Office Excel 11 28.05.2010 14:50
Резервное копирование папки с файлами xls (Excel 2003) vfv Microsoft Office Excel 11 12.03.2010 17:05
Копирование&Очистка таблиц Access Artruman БД в Delphi 4 29.04.2009 22:12