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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2012, 16:31   #11
darthraziel
Пользователь
 
Регистрация: 21.02.2012
Сообщений: 24
По умолчанию

Ясно, спасибо большое за ответы, буду тогда копать в эту сторону. Хотя все-таки хотелось бы сделать это в экселе 8)

Пока вопрос остается открытым, так что, если кто-то будет смотреть этот топик, не стесняйтесь предлагать

Последний раз редактировалось darthraziel; 10.09.2012 в 16:47.
darthraziel вне форума Ответить с цитированием
Старый 10.09.2012, 17:01   #12
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Так я ведь не говорил, что это нельзя сделать в Экселе.
Вернее я не говорил, что нужно уйти из Экселя.
Вернее я вообще на эту тему не говорил
Я сказал, что нужно использовать SQL - 'это вполне можно сделать в макросе прямо на месте в Экселе.
Правда вот как через SQL обновить таблицу Экселя - я не знаю. Возможно, придётся перезаписать все данные таблицы из запроса, не знаю...

Я думаю, нужно разобраться с имхо лучшим вариантом - на SQL.
Ну а если специалисты скажут, что нельзя, или плохо - тогда уже другие варианты можно рассматривать.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 10.09.2012 в 17:05.
Hugo121 вне форума Ответить с цитированием
Старый 11.09.2012, 16:26   #13
darthraziel
Пользователь
 
Регистрация: 21.02.2012
Сообщений: 24
По умолчанию

Как-то это не весело через sql делать. Update, насколько я понял, обновляет значения, а добавляет их Insert, но, так или иначе, нужно указывать весь набор столбцов, которые нужно обновить, вручную, а это совсем не вариант. Если я, конечно, понял правильно принцип работы этих команд.


А что если в макросе попробовать сначала в Source расставить столбцы аналогично порядку в Main, т.е. чтобы столбец под нужным кодом находился в точно той же самой колонке, что и в основной книге, а после этого перенести весь блок данных с нужной даты (или с первой даты в Source) в соответствующее место в Main? Насколько это упростит задачу для vba? (Не то, чтобы я знал, как это технически осуществить , но у меня уже есть готовый инструмент по определению номера столбца в Main по коду из названий столбцов).
darthraziel вне форума Ответить с цитированием
Старый 11.09.2012, 18:45   #14
drimdonetsk
Пользователь
 
Регистрация: 11.09.2012
Сообщений: 17
По умолчанию

Может, конечно скажу глупость,(вы уж простите я не отношусь к программистам или просто не правильно понял задание), но если нужно перенести повторяющиеся данные из одного вручную заполняемого файла в другой автоматически, то почему бы с помощью строки формул не воспользоваться обычной ссылкой, ведь порядок цифр всегда сохраняется.
drimdonetsk вне форума Ответить с цитированием
Старый 11.09.2012, 21:17   #15
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Если столбцы переставить аналогично, то для VBA всё равно, а программисту будет полегче
Но для SQL важно название столбцов, а оно у Вас всюду одинаковое.
Так что думаю с SQL сделать просто. Только вот спецы молчат что-то...
Может быть Вам стОит в ветке Access или SQL вопрос задать? Хоть просто ссылку на эту тему - пусть посмотрят... выскажут мнение...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 12.09.2012, 02:23   #16
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Код:
Sub Add_Value_Close_file()
Dim Fl$, strSqlADD$
Fl = Application.GetOpenFilename("XLS Files(*.xls*),*.xls*", , "Выбрать  файл XLS", "Выбрать")
Dim cn As ADODB.Connection
Dim sCon As String
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
Set Urs = New ADODB.Recordset
sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName _
& ";Extended Properties=""Excel 8.0;HDR=Yes"";"
cn.Open sCon

If Not cn.State = 1 Then Exit Sub
sSql = " SELECT Sourse.дата, Sourse.JKL, Sourse.SDF, Sourse.GHJ, Sourse.HJK" _
& " FROM [Лист1$] as Sourse LEFT JOIN `" & Fl & "`.[Лист1$] as main ON Sourse.дата = main.дата" _
& " WHERE main.дата Is Null"

 rs.Open sSql, cn, adOpenKeyset, adLockPessimistic
 Urs.CursorType = 3
 Urs.LockType = 3
   Urs.Open "Select * from `" & Fl & "`.[Лист1$]", cn
   Do While Not rs.EOF
   Urs.AddNew
   For i = 0 To rs.Fields.Count - 1
    Urs.Fields(rs.Fields(i).Name) = rs.Fields(i).Value
    Next
   Urs.Update
   rs.MoveNext
   Loop
  
 Urs.Close: rs.Close:cn.Close
Set cn = Nothing: Set rs = Nothing: Set Urs = Nothing
End Sub
ссылка на ADO должна быть подключена
файл main в формате xls
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234

Последний раз редактировалось R Dmitry; 12.09.2012 в 02:26. Причина: подправил
R Dmitry вне форума Ответить с цитированием
Старый 12.09.2012, 02:35   #17
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Лучше так
ссылка на ADO должна быть подключена
файл main в формате xls

Код:
Sub Add_Value_Close_file()
Dim Fl$, sSql$
Fl = Application.GetOpenFilename("XLS Files(*.xls*),*.xls*", , "Выбрать  файл XLS", "Выбрать")
Dim cn As ADODB.Connection
Dim sCon As String
Set cn = New ADODB.Connection
sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName _
& ";Extended Properties=""Excel 8.0;HDR=Yes"";"
cn.Open sCon
If Not cn.State = 1 Then Exit Sub
sSql = "INSERT INTO `" & Fl & "`.[Лист1$]( дата, JKL, SDF, GHJ, HJK ) SELECT Sourse.дата, Sourse.JKL, Sourse.SDF, Sourse.GHJ, Sourse.HJK" _
& " FROM [Лист1$] as Sourse LEFT JOIN `" & Fl & "`.[Лист1$] as main ON Sourse.дата = main.дата" _
& " WHERE main.дата Is Null"
cn.Execute sSql
cn.Close
Set cn = Nothing
End Sub
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234

Последний раз редактировалось R Dmitry; 12.09.2012 в 02:42.
R Dmitry вне форума Ответить с цитированием
Старый 12.09.2012, 09:31   #18
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Странно - что-то делает, но результата нет.
Вернее в результате каких-то моих поправок в первом коде данные стали добавляться в Source, вниз...
Второй вариант просто отрабатывает без результата
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 12.09.2012, 10:17   #19
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Игорь привет, я сделал добавление новых данных. Если даты нет в mail, а она есть в sourse, тогда данные добавляются. путь указываем к файлу main.
_______
Возможно я не до конца понял задачу ???
=====================
Да еще, я бы не использовал xls в качестве бд, лучше бы хранил данные в access, тогда все будет значительно надежнее и стабильнее
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234

Последний раз редактировалось R Dmitry; 12.09.2012 в 10:25. Причина: довесок
R Dmitry вне форума Ответить с цитированием
Старый 12.09.2012, 11:01   #20
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я понял задачу так - нужно и обновить/заменить, и добавить новые данные по датам и столбцам.
Если даты ещё нет - то добавить, если есть - заменить то, что есть.
Так ведь можно легко сделать на SQL? Макросом без SQL муторно...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как ComboBox на UserForm заполнить данными с другого листа ? Snekich Microsoft Office Excel 2 08.12.2011 18:37
Работа с данными с другого листа printer Microsoft Office Excel 1 14.06.2011 20:01
Копирование данных из одного файла Excel в другой через макрос I.P.iX Microsoft Office Excel 0 31.05.2011 22:20
Макрос, запускающий макрос из другого закрытого файла petruha Microsoft Office Excel 7 14.03.2010 11:31
Создать файл с данными на основе другого файла. Паскаль)) ТРОЯН=) Помощь студентам 13 16.04.2009 18:51