Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 14.07.2017, 10:17   #1
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 320
Репутация: 21
По умолчанию Копирование содержимого таблиц 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 в 10:20.
ольгаг вне форума   Ответить с цитированием
Старый 14.07.2017, 10:44   #2
Aleksandr H.
2 the Nation Glory
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 2,667
Репутация: 1096
По умолчанию

глупо, но ...во 2м случае rselemti получает какой-либо результат, RecordCount > 0?
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Старый 14.07.2017, 10:54   #3
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 320
Репутация: 21
По умолчанию

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

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

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

Базка, конечно, конфиденциальная на столько,что даже урезанной версии нельзя выложить для тестирования?
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Старый 14.07.2017, 12:51   #6
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 320
Репутация: 21
По умолчанию

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

Код:
dim sName as string
sName = Replace(tbl.Name,"-","_")
Set rselemti = conn.Execute("SELECT * FROM " & sName)
Код:
Set rselemti = conn.Execute("SELECT * FROM [" & tbl.Name &"]")
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Старый 14.07.2017, 13:25   #8
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 320
Репутация: 21
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таблицы 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 18:05
Копирование&Очистка таблиц Access Artruman БД в Delphi 4 29.04.2009 22:12


17:26.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.