Iordania
Дата: 16.11.2009 10:34:14
Добрый день.
Пришлось быстро написать код на VBA в Аксесе. Написал - тут нужен 100% рефакторинг. Не знаю, есть ли вообщо в VBA объекты, коллекции. ничего не знаю про эти скрипты!
Задача такая - есть куча ЧекБоксов на форме, нужно выбрать которые хочется и нажать кнопку ОТЧЕТ. В результате - отчет в ексель, по каждому нажатому ЧекБоксу информция выводится на новом Листе в Книге Ексель.
Я написал вот так топорно.. Как написать все в одном цикле.. Есть ли коллекции, чтобы можно было формировать ArrayList какой-нить, а потом сразув одном цикле открывать все рекордсеты...???
Set db = CurrentDb
Set Ex = New Excel.Application
Ex.SheetsInNewWorkbook = 1
Ex.Workbooks.Add
If cbPL.Value = True Then
Ex.ActiveWorkbook.Worksheets.Add
Set rst = db.OpenRecordset("incassPL", dbReadOnly)
Ex.ActiveSheet.Name = "Ïîëüøà"
Call AccessToExcel(rst, Ex)
rst.Close
Set rst = Nothing
End If
If cbEU.Value = True Then
Ex.ActiveWorkbook.Worksheets.Add
Set rst = db.OpenRecordset("incassEU", dbReadOnly)
Ex.ActiveSheet.Name = "EURO"
Call AccessToExcel(rst, Ex)
rst.Close
Set rst = Nothing
End If
... еще много-много подобных операторов Условия
Хочется сократить текст раз в 10...
а.четакова
Дата: 16.11.2009 10:50:48
Iordania |
Добрый день. Пришлось быстро написать код на VBA в Аксесе. Написал - тут нужен 100% рефакторинг. Не знаю, есть ли вообщо в VBA объекты, коллекции. ничего не знаю про эти скрипты!
Задача такая - есть куча ЧекБоксов на форме, нужно выбрать которые хочется и нажать кнопку ОТЧЕТ. В результате - отчет в ексель, по каждому нажатому ЧекБоксу информция выводится на новом Листе в Книге Ексель.
Я написал вот так топорно.. Как написать все в одном цикле.. Есть ли коллекции, чтобы можно было формировать ArrayList какой-нить, а потом сразув одном цикле открывать все рекордсеты...???
Set db = CurrentDb Set Ex = New Excel.Application Ex.SheetsInNewWorkbook = 1 Ex.Workbooks.Add
If cbPL.Value = True Then Ex.ActiveWorkbook.Worksheets.Add Set rst = db.OpenRecordset("incassPL", dbReadOnly) Ex.ActiveSheet.Name = "Ïîëüøà" Call AccessToExcel(rst, Ex) rst.Close Set rst = Nothing End If If cbEU.Value = True Then Ex.ActiveWorkbook.Worksheets.Add Set rst = db.OpenRecordset("incassEU", dbReadOnly) Ex.ActiveSheet.Name = "EURO" Call AccessToExcel(rst, Ex) rst.Close Set rst = Nothing End If
... еще много-много подобных операторов Условия
Хочется сократить текст раз в 10... |
в таком духе
Dim z, zz As New Collection, v$()
zz.add "cbPL,incassPL,Ïîëüøà"
zz.add "cbEU,incassEU,EURO"
For Each z In zz
v = Split(CStr(z), ",")
If Me(v(0)).Value = True Then
Ex.ActiveWorkbook.Worksheets.add
Set rst = db.OpenRecordset(v(1), dbReadOnly)
Ex.ActiveSheet.Name = v(2)
Call AccessToExcel(rst, Ex)
rst.Close: Set rst = Nothing
End If
Next z