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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2011, 07:59   #1
Simbad
Пользователь
 
Регистрация: 10.12.2009
Сообщений: 62
Вопрос DataGrid 6 и рабочий лист

Здравствуйте!
Как связать VBA- DataGrid 6 c лист Excel?
Искал на форуме и на инете ничего подобного не нашел.
Заранее спасибо тем кто поможет!
Simbad вне форума Ответить с цитированием
Старый 03.11.2011, 10:35   #2
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от Simbad Посмотреть сообщение
Здравствуйте!
Как связать VBA- DataGrid 6 c лист Excel?
Искал на форуме и на инете ничего подобного не нашел.
Заранее спасибо тем кто поможет!
Связать MSFlexGrid с рабочим листом простым "способом" не возможно,
можно конечно это сделать программно и отслеживать события на листе,
а затем уже синхронизировать грид подобным образом
в цикле
Код:
With MSFlexGrid1
.TextMatrix(i, j) = Cells(i,j).Value
End With
да, у грида нумерация идет с 0, не стоит забывать об этом.
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 03.11.2011, 10:40   #3
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Дима, DataGrid и MSFlexGrid - разные контролы. Но смысл тот же, без танцев с бубнами никак. Да и не нужно это. Лист Эксел - чем не DataGrid? А по вожможностям на несколько порядков круче.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 03.11.2011 в 10:43.
kuklp вне форума Ответить с цитированием
Старый 03.11.2011, 10:45   #4
Simbad
Пользователь
 
Регистрация: 10.12.2009
Сообщений: 62
Сообщение

Цитата:
Сообщение от R Dmitry Посмотреть сообщение
Связать MSFlexGrid с рабочим листом простым "способом" не возможно,
можно конечно это сделать программно и отслеживать события на листе,
а затем уже синхронизировать грид подобным образом
в цикле
Код:
With MSFlexGrid1
.TextMatrix(i, j) = Cells(i,j).Value
End With
да, у грида нумерация идет с 0, не стоит забывать об этом.
Все таки спасибо, но я не хочу так.
Вот нашел другой способ:
Sub SelRng(rang As Range)
'строка подключения к текущей сохраненной(!) рабочей книге,
'HDR=Yes - первая строка содержит заголовки полей
Const sCn1 = "Provider=Microsoft.Jet.OLEDB.4.0;D ata Source="
Const sCn2 = ";Extended Properties=""Excel 8.0;HDR=YES"";"
Dim nm As String
'константы "Заготовки" строки запроса к заданному диапазону листа
Const sQ1 = "SELECT * FROM ["
nm = rang.Worksheet.Name & "$" & rang.Address(0, 0) & "]"
Dim sCon As String
'создание экземпляра подключения и рекордсета
Set cn1 = New ADODB.Connection
Set rs1 = New ADODB.Recordset
With ThisWorkbook
'Формирование строки подключения к источнику
sCon = sCn1 + .Path + "\" + .Name + sCn2
End With
cn1.Open sCon
If Not cn1.State = 1 Then Exit Sub
rs1.Open sQ1 + nm, cn1, adOpenStatic, adLockReadOnly
Set dbGrid.DataSource = rs1
rs1.Close: cn1.Close 'закрытие созданных объектов
Set cn1 = Nothing: Set rs1 = Nothing '"очищениние" занимаемой ими памяти
End Sub

но в DataGrid не чего не показывается, не подскажете в чем проблема?
Simbad вне форума Ответить с цитированием
Старый 03.11.2011, 10:52   #5
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от Simbad Посмотреть сообщение
Все таки спасибо, но я не хочу так.
Вот нашел другой способ:
Sub SelRng(rang As Range)
'строка подключения к текущей сохраненной(!) рабочей книге,
'HDR=Yes - первая строка содержит заголовки полей
Const sCn1 = "Provider=Microsoft.Jet.OLEDB.4.0;D ata Source="
Const sCn2 = ";Extended Properties=""Excel 8.0;HDR=YES"";"
Dim nm As String
'константы "Заготовки" строки запроса к заданному диапазону листа
Const sQ1 = "SELECT * FROM ["
nm = rang.Worksheet.Name & "$" & rang.Address(0, 0) & "]"
Dim sCon As String
'создание экземпляра подключения и рекордсета
Set cn1 = New ADODB.Connection
Set rs1 = New ADODB.Recordset
With ThisWorkbook
'Формирование строки подключения к источнику
sCon = sCn1 + .Path + "\" + .Name + sCn2
End With
cn1.Open sCon
If Not cn1.State = 1 Then Exit Sub
rs1.Open sQ1 + nm, cn1, adOpenStatic, adLockReadOnly
Set dbGrid.DataSource = rs1
rs1.Close: cn1.Close 'закрытие созданных объектов
Set cn1 = Nothing: Set rs1 = Nothing '"очищениние" занимаемой ими памяти
End Sub

но в DataGrid не чего не показывается, не подскажете в чем проблема?
а вы проверьте свой рекордсет, есть ли там данные ?
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 03.11.2011, 10:55   #6
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
Дима, DataGrid и MSFlexGrid - разные контролы. Но смысл тот же, без танцев с бубнами никак. Да и не нужно это. Лист Эксел - чем не DataGrid? А по вожможностям на несколько порядков круче.
Я знаю что разные контролы, но у меня почему то DataGrid не находит (хотя стоит у меня(VS 2010), и вообще я использую грид от OneStudio 8.0
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 03.11.2011, 10:58   #7
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Simbad.
да и рекордсет у вас не обновляемый, не получиться ни добавить ни редактировать запись даже если удасться загрузить.
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 03.11.2011, 11:00   #8
Simbad
Пользователь
 
Регистрация: 10.12.2009
Сообщений: 62
По умолчанию

Да есть проверил вот так
Msgbox rs1.RecordCount
показывает 3, действительно у меня 3 ячейки
Simbad вне форума Ответить с цитированием
Старый 03.11.2011, 11:01   #9
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

добавьте строку выгрузки на лист вашего рекордсета
sheets("tmp").Cells(1, 1).CopyFromRecordset rs1
////////////////////
хотя Вы уже проверили......

скорей всего Вы нашли пример для VB, а поведение и свойства конролов могут отличаться
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234

Последний раз редактировалось R Dmitry; 03.11.2011 в 11:06.
R Dmitry вне форума Ответить с цитированием
Старый 03.11.2011, 11:58   #10
Simbad
Пользователь
 
Регистрация: 10.12.2009
Сообщений: 62
Сообщение

Цитата:
Сообщение от R Dmitry Посмотреть сообщение
добавьте строку выгрузки на лист вашего рекордсета
sheets("tmp").Cells(1, 1).CopyFromRecordset rs1
////////////////////
хотя Вы уже проверили......

скорей всего Вы нашли пример для VB, а поведение и свойства конролов могут отличаться
я удалил последние две строки, рекордсет работает нормально но по прежнему DataGrid пустой
Simbad вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод целого массива на рабочий лист drNabla Microsoft Office Excel 9 14.01.2011 02:22
Пустой рабочий лист или нет? Simbad Microsoft Office Excel 2 21.01.2010 06:23
Защищена ли рабочий лист или нет? Simbad Microsoft Office Excel 1 19.01.2010 06:47
Разбить рабочий лист MS Word на 2 страницы Tayfun Общие вопросы Delphi 1 04.01.2010 18:26
При закрытии книги переключится в рабочий лист valerij Microsoft Office Excel 8 03.07.2009 00:38