Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: экспорт в excel
 
 автор: Василий   (04.11.2009 в 12:01)   личное сообщение
 
 

Доброго всем дня! И с праздником! Пытаюсь освоить хотя бы азы экспорта в эксель, вчера наваял что то вроде :

Public Sub Export()
Dim objExcel As Excel.Application
Set objExcel = New Excel.Application
With objExcel
.Visible = True
.Workbooks.Add
.Range("a1") = Forms.Company. [company]
.Range("a1").ColumnWidth = 23.29
End With
End Sub

Вопрос: тут идет ссылка на конкретное значение, а как вывести весь список значений из этого поля?
Заранее спасибо.

  Ответить  
 
 автор: Анатолий (Киев)   (04.11.2009 в 12:39)   личное сообщение
 
 

Допустим, источником формы является таблица "Company" с полем "Company", тогда так:

Dim rs As Object

Set rs = CurrentDb.OpenRecordset("SELECT Company FROM Company")
.Range("a1").CopyFromRecordset  rs

  Ответить  
 
 автор: Василий   (04.11.2009 в 13:06)   личное сообщение
 
 

Огромное спасибо! а не подскажите где тут ошибка? После того как один раз создаёт лист эксель второй раз выдает пустую страницу...надо перезагружать акс

Dim objExcel As Object
Set objExcel = CreateObject("Excel.application")
objExcel.Workbooks.Add
objExcel.Application.Visible = True

With objExcel
ActiveCell.FormulaR1C1 = "Компания"
Range("B1").Select
Columns("B:B").ColumnWidth = 23.29
Range("B1").Select
ActiveCell.FormulaR1C1 = "Название"
Range("B3").Select
End With

  Ответить  
 
 автор: Гоблин   (04.11.2009 в 14:15)   личное сообщение
 
 

Не совсем допонимаю к чему все это?
Вот код. Работает на кнопку в форме. В ней подчиненными формами в данном случае сводные таблицы.
If Me.НаборВкладок249.Value = 1 Then
Forms!Обследования![Сводная таблица статистики1].SetFocus
Else
If Me.НаборВкладок249.Value = 2 Then
Forms!Обследования![Сводная таблица2].SetFocus
Else
End If
End If
DoCmd.RunCommand (acCmdPivotTableExportToExcel)

Тут 2 вкладки с разными сводными таблицами. Не суть. Последняя строка переводит то, что на экране в экслель без замечаний. Или у вас шаблон в экселе, а в необходимые места вставляются данные? Если так, то хотелось бы глубже в тему вникнуть.

  Ответить  
 
 автор: Bellerofont   (04.11.2009 в 14:29)   личное сообщение
 
 

Странно вы пишите ...
Надо хотя бы так:
With objExcel
    .ActiveCell.FormulaR1C1 = "Компания"
    .Range("B1").Select
    .Columns("B:B").ColumnWidth = 23.29
    .Range("B1").Select
    .ActiveCell.FormulaR1C1 = "Название"
    .Range("B3").Select
End With

но Range и Columns я бы использовал для объекта Workshheet, а не для Application.
Видимо, если использовать Application, как у вас, то обращение будет к ActiveSheet

  Ответить  
 
 автор: Анатолий (Киев)   (04.11.2009 в 15:22)   личное сообщение
 
 

Попробуйте так:

Dim objExcel As Object, wb As Object, rng As Object 
   Set objExcel = CreateObject("Excel.application")
   objExcel.Visible = True
   Set wb = objExcel.Workbooks.Add
   Set rng = wb.WorkSheets(1).Range("A1")

   rng.Value = "Компания"
With rng.Offset(,1)
   .EntireColumn.ColumnWidth = 23.29
   .Value = "Название"
End With

   Set rng = Nothing
   Set wb = Nothing
   Set objExcel = Nothing

  Ответить  
 
 автор: Василий   (04.11.2009 в 20:38)   личное сообщение
 
 

Всем спасибо! А как менять цвет фона, ячейки в экселе?

  Ответить  
 
 автор: Василий   (05.11.2009 в 11:45)   личное сообщение
 
 

к сожалению не помогает при первой загрузке все цвета как должны быть при закрытии и при втором открытии все цвета теряются...закрываю акс, открываю вновь, при первой загрузке все цвета на месте, при второй пропадают, не пойму почему....

Dim objExcel As Excel.Application
Dim rs As Object
Set rs = CurrentDb.OpenRecordset("SELECT Company FROM Company")
Set objExcel = New Excel.Application

With objExcel
.Visible = True
.Workbooks.Add
.Range("a1").CopyFromRecordset rs
.Range("a1").ColumnWidth = 23.29
.Range("a1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End With

  Ответить  
 
 автор: snipe   (05.11.2009 в 12:14)   личное сообщение
 
 

.Color = 65535

Замените на .ColorIndex = (а вот с цветовой гаммой точнее с номерами цветов определитесь сами у Excel-я они свои красный 3 а желный вроде 6 и уж не 65535 )

  Ответить  
 
 автор: Василий   (05.11.2009 в 13:22)   личное сообщение
 
 

дело в том что он мне в первый раз выдает все как надо, цвет желтый, а во второй раз не выдает...

  Ответить  
 
 автор: Bellerofont   (05.11.2009 в 12:22)   личное сообщение
 
 

>With Selection.Interior
Будьте внимательнее, Selection это чье свойство? Application? Тогда надо так:

With .Selection.Interior

  Ответить  
 
 автор: Василий   (05.11.2009 в 13:56)   личное сообщение
 
 

огромное спасибо, все встало на свои места!

  Ответить  
 
 автор: Василий   (08.11.2009 в 13:23)   личное сообщение
 
 

Скажите пожалуйста, а если я создам шаблон экселевского файла, предположем на диске С:\ и назову отчет1, как написать ссылку на этот объект?

  Ответить  
 
 автор: snipe   (08.11.2009 в 14:03)   личное сообщение
 
 

я делаю вот так...

Dim jkl As String
jkl = CurrentProject.Path 'считываем путь проекта
Dim dfr As Object
Dim dfg As Object
Set dfg = CreateObject("Excel.Sheet")
Set dfr = dfg.Parent
dfr.Workbooks.Add jkl & "\ШаблонОтчета.xls" 'открываем шаблон
dfr.Visible = False 'True если показать окно Excel, но лучше потом когда всю инфу выгрузишь
dfr.ActiveWindow.WindowState = xlMaximized

'далее dfr. и чего хочешь сделать dfr.cells(1,1)="Всякая ерунда" запишет в ячейку А1 фразу всякая ерунда

  Ответить  
 
 автор: Василий   (08.11.2009 в 15:33)   личное сообщение
 
 

Спасибо

  Ответить  
 
 автор: Василий   (08.11.2009 в 16:09)   личное сообщение
 
 

и еще один вопросик есть следующее:

Dim Company As Object
Set Company = CurrentDb.OpenRecordset("SELECT Company,Project FROM Company")

я незнаю как много будет компаний будет, project предположим это какая то сумма, как мне в последней строчке вписать сумму этих значений...
Знаю вот так выводиться сумма, но незнаю на каком значении "В"
.Range("B7") = "=SUM(R[-4]C:R[-1]C)"

пробую Dim nRow

nRow=nRow+1
но что то не так...

  Ответить  
 
 автор: snipe   (08.11.2009 в 16:19)   личное сообщение
 
 

dim countrow as long
countrow=company.recordcount

вроде так
countrow - количество строк в вашем запросе

  Ответить  
 
 автор: Василий   (08.11.2009 в 19:07)   личное сообщение
 
 

а есть какие нибудь примеры, что то не получается

  Ответить  
 
 автор: snipe   (09.11.2009 в 10:00)   личное сообщение
 
 

ну тогда так

dim countrow as long
company.MoveLast
countrow=company.recordcount

  Ответить  
 
 автор: Василий   (09.11.2009 в 16:12)   личное сообщение
39 Кб.
 
 

этой строчкой он вырывает из запроса company последнюю компанию и Project соответственно, а мне нужен весь список, и в последней строчке предположим разместить тот же recordcount пробую так:

Dim countrow As Long
Company.MoveLast
countrow = Company.RecordCount
.Range("B" & countrow) = "20"

на всякий случай прикрепил файл, может я по кривому объясняю...

  Ответить  
 
 автор: snipe   (10.11.2009 в 03:17)   личное сообщение
 
 

да понятно все это .....
countrow это количество строк в вашем recordset-e т.е. если раньше вы не знали сколько в нем строк то теперь знаете
ни что не мешает Вам вернуться на первую запись Company.MoveFirst
организовать цикл через тот же For Next (количество строк уже известно)
выгружать инфу в Excel построчно например .Range("A" & i)=Company.Column(0) где i переменная цикла
потом перейти на другую запись recordset-а Company.MoveNext
можно заодно подсчитывать сумму

да - посмотрите в хелпе что такое Cells в некоторых случаях гораздо удобнее чем Range (особенно при организации цикла) (если точно то я уже забыл когда Range использовал)

  Ответить  
 
 автор: Василий   (17.11.2009 в 13:26)   личное сообщение
 
 

Подскажите, что не так ? есть таблица, есть экселевский файл, но в эксель не экспортирует... заранее благодарю.

Dim objXls As Object
Dim rst As Recordset
Dim i As Long
Set rst = CurrentDb.OpenRecordset("Company")
Set objXls = GetObject("C:\Documents and Settings\vasiliy.OMT\Мои документы\ERTE.xls")
objXls.Worksheets("Лист1").Activate
i = 2
Do While Not rst.EOF
objXls.Worksheets("Лист2").Cells(i, 2) = rst![Company1]
objXls.Worksheets("Лист2").Cells(i, 3) = rst![Project]
rst.MoveNext
i = i + 1
Loop
objXls.Worksheets("Лист2").Cells(i, 2).Formula = "=SUM(B2" & i - 1 & ")"
objXls.Worksheets("Лист2").Cells(i, 3).Formula = "=SUM(C2:C" & i - 1 & ")"
rst.Close
Set rst = Nothing
objXls.Application.Workbooks("Книга1.xls").Save
objXls.Application.Quit
Set objXls = Nothing

  Ответить  
 
 автор: osmor   (17.11.2009 в 13:57)   личное сообщение
 
 

, но в эксель не экспортирует.


подробнее

  Ответить  
 
 автор: Василий   (17.11.2009 в 14:03)   личное сообщение
 
 

пытаюсь выгрузить таблицу Company, с полями Company1 и Project в excel, необходимо чтоб в конце поля Project выдавал сумму значений (в excel) так как я не силен в этом прочел на форуме о таком способе но выгрузка не идет...

  Ответить  
 
 автор: osmor   (17.11.2009 в 14:49)   личное сообщение
 
 

подробнее что не идет, какие сообщения

  Ответить  
 
 автор: Василий   (17.11.2009 в 15:01)   личное сообщение
 
 

ошибок не каких не выдает, как будто грузит, песочные часы появляются, и все...захлебывается

  Ответить  
 
 автор: osmor   (17.11.2009 в 15:38)   личное сообщение
 
 

в процессах после этого Excel висит?
Проверьте файл
C:\Documents and Settings\vasiliy.OMT\Мои документы\ERTE.xls
точно есть?
Попробуйте перенести файл
ERTE.xls
куда нибуть в папку с коротким латинским именем например c:/test/ERTE.xls
и выполнить код с таким путем к файлу

  Ответить  
 
 автор: Василий   (18.11.2009 в 09:33)   личное сообщение
 
 

Excel вообще не грузится, файл точно есть, перенес файл, ничего не изменилось, я думаю где то в написании кода ошибка.

  Ответить  
 
 автор: osmor   (18.11.2009 в 09:42)   личное сообщение
 
 

после
Set objXls = GetObject("C:\Documents and Settings\vasiliy.OMT\Мои документы\ERTE.xls")
поставьте
objXls.Visible = true

обработчик ошибок есть? нигде resume next не стоит? Попробуйте в отладчике по шагам пройти процедуру и посмотреть все ли выполняется

  Ответить  
 
 автор: Denis V.   (18.11.2009 в 10:38)   личное сообщение
 
 

Конечно, не грузится, т.к. Вы используете GetObject, т.е. файл уже должен быть загружен. ;-)

  Ответить  
 
 автор: snipe   (18.11.2009 в 10:51)   личное сообщение
 
 

я вам в (08.11.2009 в 14:03) посылал код - работает точно

  Ответить  
 
 автор: Василий   (18.11.2009 в 11:49)   личное сообщение
 
 

я видел, все у меня получилось, большое спасибо, пытаюсь другие методы освоить
А подскажите если в форме имеется подчиненная форма, ее в тот же запрос прописывать нужно? или можно другой записать? например :
dim flightsZap As Object
Set flightsZap = CurrentDb.OpenRecordset("SELECT JS, Flights FROM Companies")

или добавлять к companies?
Dim Companies As Object
Set Companies = CurrentDb.OpenRecordset("SELECT Company1, Project FROM Companies")

  Ответить  
 
 автор: snipe   (18.11.2009 в 12:04)   личное сообщение
 
 

Это от задумки зависит там ведь левое и правое объединение есть в запросе
тут полная свобода творчества

а на счет GetObject - тоже давно пытался пользоваться - ни чего не получилось и в итоге пользуюсь тем что Вам послал и не забиваю голову

Работает и пускай работает

  Ответить  
 
 автор: Василий   (19.11.2009 в 11:43)   личное сообщение
 
 

Пытаюсь сделать фильтр в запросе, что то вроде:

Set rs = CurrentDb.OpenRecordset("SELECT Company FROM Company WHERE company = Forms!Company! Company1")

не фурыжит , а в запросе получается, вписываешь в условие отбора Forms!Company! Company1 и все... вопрос почему не получается в vba ?

  Ответить  
 
 автор: osmor   (19.11.2009 в 11:45)   личное сообщение
 
 


Set rs = CurrentDb.OpenRecordset("SELECT Company FROM Company WHERE company = " & Forms!Company!Company1 )

если Forms!Company! Company1 тестовое, то так

Set rs = CurrentDb.OpenRecordset("SELECT Company FROM Company WHERE company = '" & Forms!Company!Company1 & "'")


и еще непонятно почему пробел перед Company1

  Ответить  
 
 автор: Василий   (19.11.2009 в 12:00)   личное сообщение
 
 

Спасибо! Пробел я случайно при копировании поставил.

  Ответить  
 
 автор: Василий   (17.12.2009 в 12:02)   личное сообщение
 
 

Всем доброго дня! Подскажите пожалуйста почему ругается на запрос?

Set Zap = CurrentDb.OpenRecordset("SELECT Company, data FROM CompInf
WHERE data = " & Forms!Otchet![Конец])

номер ошибки 3075, число содержит синтаксическую ошибку в выражении запроса 'data =04.12.200'.

  Ответить  
 
 автор: Василий   (18.12.2009 в 09:38)   личное сообщение
 
 

неужели никто не подскажет где косяк?

  Ответить  
 
 автор: snipe   (18.12.2009 в 09:49)   личное сообщение
 
 

data=#" & .......& "#"

  Ответить  
 
 автор: Василий   (18.12.2009 в 10:25)   личное сообщение
 
 

Спасибо за ответ, только ту же самую ошибку выдает

  Ответить  
 
 автор: kot_k_k   (18.12.2009 в 12:18)   личное сообщение
 
 

переделац
StrSQL="SELECT Company, data FROM CompInf WHERE data = " & Forms!Otchet![Конец]
Set Zap = CurrentDb.OpenRecordset(SrtSQL)

и посмотри что пишет тебе в StrSQL
и еще проверь дату чтоб не вышло 30/12/2009 - для акса с его американским форматом это жопка у них месяц/день/год - 30-го месяца не бывает

  Ответить  
 
 автор: Василий   (18.12.2009 в 13:59)   личное сообщение
 
 

Спасибо, получилось, только вот так:

WHERE Data BETWEEN #" & Format(Forms!Otchet![Na4].Value, "mm-dd-yyyy") & "# AND #" & Format(Forms!Otchet![Kon].Value, "mm-dd-yyyy") & "#

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList