|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
02.12.2008, 14:12 | #1 |
Форумчанин
Регистрация: 17.10.2008
Сообщений: 239
|
Три вопроса по VBA
УВажаемые господа!
ПРи написании одной задачи возникло три вопроса: Вопрос 1: ПРи чтении из БД часто встречается пустая запись (поле =NULL). Как подправить следующую строчку ot = oRes.Fields(4).Value nm(j) = RTrim(fio) + " " + Left(im, 1) + ". " + Left(ot, 1) + "." чтобы в случае если oRes.Fields(4).value=NULL выполнялась другая операция nm(j) = RTrim(fio) + " " + Left(im, 1) + ". " структуру типа IF oRes.fields(4).value=NULL then или IF oRes.fields(4).value iS NULL не работают Вопрос 2: При формировании страницы для печати (режим разметки страниц) в макросе Rows("1:41").Select k = (j - 1) * 41 / 13 + 1 Selection.Copy Range("a" & k).Select ActiveSheet.Paste Rows("" & ((j - 1) * 41 / 13 + 8) & ":" & (((j - 1) / 13 + 1) * 41 - 8)).Select Range("a" & ((j - 1) * 41 / 13 + 8) & ":" & "IU" & (((j - 1) / 13 + 1) * 41 - 8)).Select Selection.ClearContents With ActiveSheet.PageSetup .PrintTitleRows = "" .PrintTitleColumns = "" End With ActiveSheet.PageSetup.PrintArea = "$1:$" & (((j - 1) / 13 + 1) * 41) With ActiveSheet.PageSetup .PrintHeadings = False .PrintGridlines = False .Zoom = 100 .PrintErrors = xlPrintErrorsDisplayed End With Range("a" & k).Activate Set ActiveSheet.HPageBreaks(1).Location = Range("A" & k) Достаточно часто возникает ошибка и прога заканчивает работу. Но на листе разметка произведена. Повторный запуск программы уже этой ошибки не дает. Все листы находятся в состоянии разметки страниц. Вопрос 3: читаем данные из базы стандартным способом VBA Dim Conn As ADODB.Connection Dim oRes As ADODB.Recordset Dim oCmd As ADODB.Command ... Set Conn = CreateObject("ADODB.Connection") Set oRes = CreateObject("ADODB.Recordset") Set oCmd = CreateObject("adodb.command") Conn.Open "Provider=SQLOLEDB.1;Password=Proje ct2;Persist Security Info=True;User ID=Project2;Initial Catalog=e6work;Data Source=172.18.12.6" ... oCmd.ActiveConnection = Conn str = "ep_Askvtidata @cmd='List',@idvti=" & idVTI & ", @idreq=" & rndval & ", @TimeStart='" & Dtn & " 20:00' , @TimeEnd='" & Dtk & " 20:00'" oCmd.CommandText = str oCmd.Execute ... str = "select sum(valuefl), sum(idVTI) from vtidatalist where valuefl>4 and idvti=" & idVTI & " and idreq=" & rndval oRes.Open str, Conn Вопрос сумирование выполняется на компьютере где запущена прога VBA vs Excel или на MS SQL сервере. Если на своем компе то как заставить производить операцию сервер (подозрительно долго считает ~ 0,5 сек) Заранее балгодарен за ответы. |
02.12.2008, 14:27 | #2 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Вопрос 1.
Попробуйте так: If IsNull(oRes.fields(4).Value) Then Вопрос 2: Возможно, ошибка возникает при попытке установить позицию для несуществующего разделителя страниц: ActiveSheet.HPageBreaks(1).Location = Range("A" & k) тогда используйте перед этой строкой метод HPageBreaks.Add Какая ошибка возникает? Номер, описание ошибки? На какой строке останавливается выполнение кода? |
02.12.2008, 15:19 | #3 |
Форумчанин
Регистрация: 17.10.2008
Сообщений: 239
|
|
02.12.2008, 15:30 | #4 | |
Форумчанин
Регистрация: 17.10.2008
Сообщений: 239
|
Цитата:
добавив рекомендованную ВАМИ строку возникает такая же ошибка |
|
02.12.2008, 15:46 | #5 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
ActiveSheet.HPageBreaks.Add Range("A" & k) тогда строка ActiveSheet.HPageBreaks(1).Location = Range("A" & k) не нужна Напимер, можете использовать такой код: Код:
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
Макросы любой сложности на заказ. Мониторинг цен конкурентов Последний раз редактировалось EducatedFool; 02.12.2008 в 15:50. |
|
02.12.2008, 15:56 | #6 | |
Форумчанин
Регистрация: 17.10.2008
Сообщений: 239
|
Цитата:
Остался последний третий вопрос. По первому сам ошибся. Все работает!!! |
|
03.12.2008, 11:03 | #7 |
Форумчанин
Регистрация: 17.10.2008
Сообщений: 239
|
Уважаемый EducatedFool!
Если вчера все работало. То сегодня вновь возникла ошибка Run-time error "1004" Application-defined or object-defined error |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
черный ящик, на три входа и на три выхода | Shanson | Помощь студентам | 7 | 30.01.2008 09:45 |
Три вопроса по клавиатуре | Никки | Общие вопросы Delphi | 14 | 20.12.2007 22:07 |
три вопроса по ListView | Scorpeon | Компоненты Delphi | 1 | 05.11.2007 22:40 |
Три вопроса по Ассемблеру | Elm0 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 10 | 27.05.2007 15:43 |