Алёна
Молодой специалист
Offline
Блондинка...
|
|
« : 07-01-2006 19:09 » |
|
В Аccess есть несколько таблиц и запросов.... данные из которых мне надо перенести в определенную ячейку Excel.... Для этого я открываю Excel и ввожу данные в ячейку: Private Sub Кнопка9_Click()
Dim oApp As Object Set oApp = CreateObject("Excel.Application") With oApp .Visible = True .Workbooks.Open CurDir & "\Документ.xls" .ActiveSheet.Cells(1, 1).Value = 123 End With End Sub Как мне вместо 123 поставить расчет из Аccess из разных таблиц: например: .ActiveSheet.Cells(1, 1).Value = Таблица1.Sum(колонка1)+Таблица2.Sum(колонка1)
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 09-01-2006 05:33 » |
|
помниться есть использование диапазона .Range , но точно не подскажу, потому как не ведаю (в msdn сунулся - с трудом поддаётся поиску...)
|
|
|
Записан
|
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #2 : 11-01-2006 06:55 » |
|
Алёна, может выполнить запрос и рузультат поместить в ячейку? Или немного поподробнее, и лучше с небольшим примером
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
RomCom
|
|
« Ответ #3 : 11-01-2006 09:48 » |
|
Легче всего это сделать через SQL запросы. Вот для примера взял базу "Борей": Private Sub МойРасчет() Dim oApp As Object Dim SumRS As Recordset Dim s As Currency 'запрос к 1-й базе Set SumRS = CurrentDb.OpenRecordset("select sum(Заказы.СтоимостьДоставки) from Заказы") s = SumRS.Fields(0).Value 'сохраняем сумму SumRS.Close 'запрос ко 2-й базе Set SumRS = CurrentDb.OpenRecordset("select sum(Заказано.Цена*Заказано.Количество) from Заказано") s = s + SumRS.Fields(0).Value 'суммируем с предыдущим результатом SumRS.Close Set oApp = CreateObject("Excel.Application") With oApp .Visible = True .Workbooks.Open CurDir & "\Документ.xls" .ActiveSheet.Cells(1, 3).Value = s 'выводим в ячейку End With End Sub
|
|
« Последнее редактирование: 20-12-2007 14:49 от Алексей1153++ »
|
Записан
|
R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
|
|
|
RomCom
|
|
« Ответ #4 : 11-01-2006 09:58 » |
|
По работе в Аccess есть хороший сайт http://www.hiprog.com/access/default.asp. Там много примеров, статей и уроков.
|
|
|
Записан
|
R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #5 : 11-01-2006 15:59 » |
|
Спасибо...............
|
|
« Последнее редактирование: 11-01-2006 19:27 от Алёна »
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #6 : 17-01-2006 07:49 » |
|
А теперь мне необходимо данные перенести в Word. Для этого я в документе создала текстовое поле в которое в последствии я должна вставить данные. Private Sub Кнопка0_Click() Dim wda As Object Set wda = CreateObject("Word.Application") Set SumPS = CurrentDb.OpenRecordset("График") s = SumPS.Fields(0).Value SumPS.Close
With wda .Visible = True .Documents.Open CurDir & "\ЕСН.doc" .Bookmarks("ТекстовоеПоле1").Select .Selection.TypeText Text:= s End With End Sub VBA мне выдаёт ошибку на строчку: .Bookmarks("ТекстовоеПоле1").SelectНе пойму почему.........
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #7 : 17-01-2006 08:04 » |
|
Алёна, вот так делал я, может пригодится Set wrd = CreateObject("Word.Application") wrd.Visible = True Set doc = wrd.Documents.Add(App.Path & "\Statement.rtf") 'инициализируем поля SetDocVar doc, "CONTRACT_ID", " " .... Private Function SetDocVar(doc As Object, strName As String, value As Variant) On Error GoTo EH doc.Variables(strName).value = value Exit Function EH: doc.Variables.Add strName, value Exit Function End Function
|
|
« Последнее редактирование: 20-12-2007 14:51 от Алексей1153++ »
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
RomCom
|
|
« Ответ #8 : 17-01-2006 09:22 » |
|
а можно и так: Private Sub Кнопка0_Click() Dim wda As Object Dim i As Integer, f As Object Set wda = CreateObject("Word.Application") Set SumPS = CurrentDb.OpenRecordset("График") s = SumPS.Fields(0).Value SumPS.Close
With wda .Visible = True .Documents.Open CurDir & "\ЕСН.doc" For i = 0 To .ActiveDocument.InlineShapes.Count If .ActiveDocument.InlineShapes(i).OLEFormat.ProgId = "Forms.TextBox.1" Then Set f = .ActiveDocument.InlineShapes(i).OLEFormat.Object f.Text = s End If Next End With End Sub
|
|
|
Записан
|
R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #9 : 17-01-2006 10:22 » |
|
Теперь VBA не нравиться эта строчка:
If .ActiveDocument.InlineShapes(i).OLEFormat.ProgId = "Forms.TextBox.1" Then
Он говорит, что запрашиваемый номер семейства не существует....
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
RomCom
|
|
« Ответ #10 : 17-01-2006 12:11 » |
|
Сори. Апшибочка For i = 1 To .ActiveDocument.InlineShapes.Count И еще раз сори. Этот код для элемента управления "Поле". Для элемента формы "Текстовое поле" все гораздо проще. Private Sub Кнопка0_Click() Dim wda As Object Set wda = CreateObject("Word.Application") Set SumPS = CurrentDb.OpenRecordset("График") s = SumPS.Fields(0).Value SumPS.Close
With wda .Visible = True With .Documents.Open(CurDir & "\ЕСН.doc") .FormFields("ТекстовоеПоле1").result = s End With End With End Sub Бес попутал
|
|
« Последнее редактирование: 17-01-2006 12:17 от RomCom »
|
Записан
|
R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #11 : 21-01-2006 10:47 » |
|
Продолжим.................. У меня есть таблица из которой я выбираю данные по определенному критерию Set rs = CurrentDb.OpenRecordset("select * from ВыборкаТ where Месяц =1") ss1 = rs.Fields(0).Value ii1 = rs.Fields(1).Value bl1 = rs.Fields(2).Value fs1 = rs.Fields(3).Value ns1 = rs.Fields(4).Value rs.Close Set rs = CurrentDb.OpenRecordset("select * from ВыборкаТ where Месяц =4") ss1 = rs.Fields(0).Value ii1 = rs.Fields(1).Value bl1 = rs.Fields(2).Value fs1 = rs.Fields(3).Value ns1 = rs.Fields(4).Value rs.Close
и т.д. но это в итоге получается громоздко..... я пыталась сделать: p=1 ' переменная р будет меняться впоследствии по IF или по CASE.... Set rs = CurrentDb.OpenRecordset("select * from ВыборкаТ where Месяц =p") однако выдается ошибка.... В чем дело?
|
|
« Последнее редактирование: 20-12-2007 14:52 от Алексей1153++ »
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
RomCom
|
|
« Ответ #12 : 21-01-2006 13:31 » |
|
Set rs = CurrentDb.OpenRecordset("select * from ВыборкаТ where Месяц =" & p)
|
|
« Последнее редактирование: 21-01-2006 14:15 от RomCom »
|
Записан
|
R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #13 : 22-01-2006 09:57 » |
|
А теперь возникает ситуация, что в таблице нету переменной равной р и поэтому выдается ошибка "текущая запись отсутствует" Set rs = CurrentDb.OpenRecordset("select * from ВыборкаТ where Месяц=" & p1) bl1 = rs.Fields(2).Value Как мне в этой записи сделать проверку наличия поля rs.Fields(2).Valueт.е. сделать обработку ошибок P.S. В данное время я сильно ограничена во времени, поэтому разбираться мне некогда, а делать надо, поэтому я и спрашиваю......
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
RomCom
|
|
« Ответ #14 : 22-01-2006 11:54 » |
|
Если необходима проверка на наилчие записей, придется действовать в два этапа: Set rs = CurrentDb.OpenRecordset("select count(*) from ВыборкаТ where Месяц=" & p1) If rs.Fields(0).Value > 0 Then rs.Close; Set rs = CurrentDb.OpenRecordset("select * from ВыборкаТ where Месяц=" & p1) ... else rs.Close End If Или же проверять rs.RecordCount, но этот метод не дает 100% гарантии, т.к. если даже не найдено записей удовлетворяющих условию, то всеравно в rs будет одна запись только со значениями полей Null. Количество полей в запросе можно узнать из rs.Fields.Count.
|
|
« Последнее редактирование: 22-01-2006 13:16 от RomCom »
|
Записан
|
R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #15 : 23-01-2006 06:31 » |
|
а лучше проверять на конец рекордсета Set rs = CurrentDb.OpenRecordset("select count(*) from ВыборкаТ where Месяц=" & p1) If Not rs.eof then ... endif rs.close
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #16 : 26-02-2006 17:28 » |
|
Мерси за помощь.......
Я сдалась благополучно
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
|