|
|
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Есть таблица в БД Access. Из неё необходимо, используя заранее подготовленный перечень номеров (одномерный массив) на листе Excel, путем автоматической последовательности SQL-запросов (по этим номерам) к БД, получить в новой книге Excel соответствующее количество групп отфильтрованных и обработанных данных, отделённых один от другого парой-тройкой пустых строк (для того, чтобы потом вручную пронумеровать каждый список в особом порядке). Методом ADO данные каждого запроса переносятся сначала на второй лист, там обрабатываются, и в окончательном виде группируются на первом листе этой новой книги Excel. Возникла трудность с извлечением самих этих номеров из перечня для передачи каждого из них в качестве переменной для сформированного SQL-запроса. На основе готовых примеров скомпилировал следующее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. Т.е. вопрос к мастерам VBA - как устранить получающуюся неоптимальность из-за возможного случая с единственным номером?... В дополнение - несмотря на то, что данные (NN) предполагается располагать в одном столбце (одномерный непрерывный массив) - возможно ли предусмотреть расширенный их ввод путём: 1) или объединения двух или более выделяемых диапазонов 2) или полного прерывающегося диапазона ячеек в столбце, но чтобы автоматически исключались пустые ячейки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2007, 22:22:47 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Первое, что приходит на ум - чтобы не повторять "тот же БОЛЬШОЙ объём кода" запиши "тело цикла по обработке каждого запроса" в виде функции (или Sub) с параметром NN. KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2007, 23:21:59 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Второе: Используй цикл For Each ... Next , это гораздо удобнее в этом случае (не нужно проверять на массив) и наверное правильнее! напр Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2007, 23:34:18 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Вобще не очень понятен смысл превращения диапазона в массив в данном случае. Похоже на потерю времени, тем более, что потом нужно проверять не пустая ли ячейка или использовать многообластные диапазоны. По-моему проще сразу делать перебор ячеек и не надо будет повторять рутину дважды: Код: plaintext 1. 2. KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2007, 23:35:40 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
обогнал меня Deggasad со вторым пунктом :D KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2007, 23:37:59 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Гы :) Доброй ночи сЭнсЭй! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2007, 23:43:24 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
взаимно :-) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 00:16:11 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Коллеги - большущее спасибо - сняли груз! :) (Всё гениальное просто - ответ сразу на все пожелания!)) кропаю код дальше... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2007, 00:34:32 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Теперь застрял на втором этапе - экспорт с помощью ADO в новую книгу. Причём, экспериментируя отдельно с этой процедурой (когда сначала сначала объявлялись объекты новой книги, затем методом ADO переносились данные на лист и потом книга сохранялась) - всё нормально; сейчас же, - объявив объекты книги и заранее её сохранив, и закрыв (чтобы не мешала выбирать "Выделите диапазон(ы) с перечнем №№:") - рекордсет в эту закрытую книгу не переносится... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. Или я опять что-то не так делаю? Помогите пожалуйста, а то учиться приходиться на этой практической задаче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2007, 23:32:27 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Либо не закрывайте книгу (проще) Либо придётся и к вашей книге через ADO подключаться, так же, как и к базе аксесса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 00:09:41 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
LeCrunchИли я опять что-то не так делаю?Ну дык! Фигню написал потому что. Сначала закрываешь книгу (в начале NN_Selection) а потом пытаешься использовать. Ее не надо закрывать (и потом открывать), оставь ее в памяти на все время работы макроса. LeCrunchПомогите пожалуйста, а то учиться приходиться на этой практической задаче.Это самый лучший метом обучения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 00:18:52 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
LeCrunchПомогите пожалуйста, а то учиться приходиться на этой практической задаче.Это самый лучший метом обучения.[/quot] +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 07:41:22 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Попробовал, как советовали, не закрывая - но при этом, похоже, макрос не может правильно воспринять передаваемый ему диапазон в InputBox; новая книга ADO.xls закрывает собой книгу LIST_with_NN.xls с номерами, и когда я перехожу к LIST_with_NN и выбираю на ней ячейки, ссылка в окне ввода принимает расширенный вид '[LIST_with_NN.xls]Лист1'!$D$2 вместо ранее простого 'Лист1'!$D$2 Чтобы убедится в ошибке, закомментировал в макросе команду 'On Error GoTo Canceled и выявилось - Run-time error '1004' Метод Select из класса Range завершен неверно До процедуры Public Sub NN_calculation() дело и не доходит... IMHO в этом случае метод InputBox не может правильно передать расположение выделяемой области, если она принадлежит другой книге. Параллельно вопросик - у меня нет ошибок в синтаксисе с объявлением ADO.xls и её листов и с записью туда рекордсетсета?.. Это самый лучший метод обучения. Согласен, много интересного узнал, да только это медленный процесс, а время поджимает... Книжки и Help - это хорошо, но со знающими людьми, кроме этого форума, и посоветоваться не с кем; так что не обижайтесь на вопросы начинающего ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2007, 01:18:10 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
LeCrunchи выявилось - Run-time error '1004' Метод Select из класса Range завершен неверно а ты не делай UserRange.Select. Это совершенно бессмысленная операция. LeCrunchIMHO в этом случае метод InputBox не может правильно передать расположение выделяемой области, если она принадлежит другой книге.Нет. InputBox выдает совершенно правильную область. С ней и надо работать. Но работать, а не визуально выделять. Если ты хочешь сделать Select на каком-то листе, ты сначала должен переключится (Activate) на книгу и на лист которые содержат нужную область. А если показывать эту область пользователю необязательно то и выделять не нужно. Кстати и копировать UserRange в MyRng тоже бессмысленно. Пустая трата времени и ресурсов. LeCrunchПараллельно вопросик - у меня нет ошибок в синтаксисе с объявлением ADO.xls и её листов и с записью туда рекордсетсета?..вроде нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2007, 02:17:41 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Спасибо за поправки - извлечение в цикле теперь проходит успешно! Осталась третья процедура - обработка каждой группы отфильтрованных данных. Делаю это построчно в цикле, вычисляя значения для каждой колонки. Дополнительная трудность - приходится преобразовывать ранее существовавшие для этой автоматизируемой задачи обычные формулы в код VBA. (Сразу вопрос - достаточно указания WorksheetFunction."название функции" или правильно нужно полностью, Application.WorksheetFunction. ?) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Но похоже, что-то опять путаюсь в диапазонах и формулах, подскажите плз... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 00:22:10 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Вдогонку - есть ли в VBA оптимальное решение для поиска значений в диапазоне, для примера: Существует вспомогательная заполненная табличка 16Rx6C, плюс слева и сверху названия строк и столбцов. Раньше, вручную, значения из неё извлекались по запросу строк (G1) и столбцов (V1) формулой типа: =ИНДЕКС(form!$A$1:$G$17; ПОИСКПОЗ(G1;Ку!$A$1:$A$17;); ПОИСКПОЗ(V1;Ку!$A$1:$G$1;)) Посоветуйте - как бы это поизящней описать в VBA (комбинацией массивов - но как?), и без необходимости держать вспомогательную таблицу на листе Excel? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 00:50:50 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
к последнему - опечатка - везде лист называется form! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 00:53:19 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Не уверен, что понял откуда что берется, но может так?: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 1) для работы с листом oSheet2, нет нужды его активировать 2) переменная r совсем непонятно откуда берется и почему так используется 3) синтаксис r.Cells("A:A") предположительно это попытка сделать r(row,"A") или r(1) [если это диапазон равный строке][???] 4) если r - это диапазон могущий содержать более одной ячейки, то непонятно след. его использование: Trim(IIf(WorksheetFunction.Left(r.Cells("G:G").Value,3) <> "док", _ ("документ № " & r ), _ r ))) 5) функции листа TEXT() в VBA соответствует функция Format() 6) функция VBA Trim , в отличие от одноименной функции листа, только убирает пробелы в начале и конце текстовой строки KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 01:01:57 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
LeCrunchдостаточно указания WorksheetFunction."название функции" или правильно нужно полностью, Application.WorksheetFunction. ?... да, в ответ на твой вопрос: если код запускается из-под Excel, то любой из след. синтаксисов должен работать: Application.WorksheetFunction.Trim() WorksheetFunction.Trim() Application.Trim() (!) Не все функции листа доступны из VBA (!) Некоторые функции листа имеют полные или частичные эквиваленты в VBA (!) Cинтаксис Application.Trim() несколько иначе работает со значениями ошибки, чем первые два. KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 01:11:03 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
LeCrunchВдогонку - есть ли в VBA оптимальное решение для поиска значений в диапазоне, для примера: Существует вспомогательная заполненная табличка 16Rx6C, плюс слева и сверху названия строк и столбцов. Раньше, вручную, значения из неё извлекались по запросу строк (G1) и столбцов (V1) формулой типа: =ИНДЕКС(form!$A$1:$G$17; ПОИСКПОЗ(G1;Ку!$A$1:$A$17;); ПОИСКПОЗ(V1;Ку!$A$1:$G$1;)) Посоветуйте - как бы это поизящней описать в VBA (комбинацией массивов - но как?), и без необходимости держать вспомогательную таблицу на листе Excel? 1) Оптимальней этой формулы в VBA ничего нет 2) табличку размером в 16Rx6C иначе как полностью расписывать в коде и присваивать каждый раз переменной не знаю как еще хранить вне листа (она врядли поместится в виде константы массива в объекте Name иза ограничения в 255 символов для проперти RefersTo). Ну а это вместо листа будет юзать память . 3) функции ИНДЕКС() и ПОИСКПОЗ() доступны из под VBA например ввиде: Application.Index() и Application.Match() . А функция ИНДЕКС() еще и эквивалентна прямому использованию диапазона, например Range("A1:D10")(8,2) или Range("A1:D10").Cells(8,2) или даже Range("A1")(8,2) , или массива, например arrMyArray(8,2) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 01:29:54 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
LeCrunchВдогонку - есть ли в VBA оптимальное решение для поиска значений в диапазоне, для примера: Существует вспомогательная заполненная табличка 16Rx6C, плюс слева и сверху названия строк и столбцов. Раньше, вручную, значения из неё извлекались по запросу строк (G1) и столбцов (V1) формулой типа: =ИНДЕКС(form!$A$1:$G$17; ПОИСКПОЗ(G1;Ку!$A$1:$A$17;); ПОИСКПОЗ(V1;Ку!$A$1:$G$1;)) Посоветуйте - как бы это поизящней описать в VBA (комбинацией массивов - но как?), и без необходимости держать вспомогательную таблицу на листе Excel? Если в коде, то более всего наверное подходит метод Find, примерно так Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 05:41:33 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
KL (XL) (!) Cинтаксис Application.Trim() несколько иначе работает со значениями ошибки, чем первые два. Привет, не пояснишь ли эту фразу? а то интересно стало. Я всегда именно так использую функции рабочего листа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 05:45:43 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Deggasad LeCrunchВдогонку - есть ли в VBA оптимальное решение для поиска значений в диапазоне, для примера: Существует вспомогательная заполненная табличка 16Rx6C, плюс слева и сверху названия строк и столбцов. Раньше, вручную, значения из неё извлекались по запросу строк (G1) и столбцов (V1) формулой типа: =ИНДЕКС(form!$A$1:$G$17; ПОИСКПОЗ(G1;Ку!$A$1:$A$17;); ПОИСКПОЗ(V1;Ку!$A$1:$G$1;)) Посоветуйте - как бы это поизящней описать в VBA (комбинацией массивов - но как?), и без необходимости держать вспомогательную таблицу на листе Excel? Если в коде, то более всего наверное подходит метод Find, примерно так Код: plaintext 1. 2. 3. 4. Даже так наверное Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 05:50:43 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Sheets("form") вместо Sheets(1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 05:52:07 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Deggasad KL (XL) (!) Cинтаксис Application.Trim() несколько иначе работает со значениями ошибки, чем первые два. Привет, не пояснишь ли эту фразу? а то интересно стало. Я всегда именно так использую функции рабочего листа. В случае с Application.WorksheetFunction.Trim() или WorksheetFunction.Trim() ошибка приводит к прерыванию кода с Run-Time Error , и должна отлавливаться с пом On Error Resume Next: Debug.Print Err.Number или чем-то подобным. Application.Trim() молча возвращает значение номера ошибки (в этом случае, тип переменной должен быть Variant, чтобы не возникла ошибка Type-Mismatch Error с прерыванием кода). Здесь ошибка отлавливается с пом. функции IsError() . KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 14:44:33 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
KL (XL) Deggasad KL (XL) (!) Cинтаксис Application.Trim() несколько иначе работает со значениями ошибки, чем первые два. Привет, не пояснишь ли эту фразу? а то интересно стало. Я всегда именно так использую функции рабочего листа. В случае с Application.WorksheetFunction.Trim() или WorksheetFunction.Trim() ошибка приводит к прерыванию кода с Run-Time Error , и должна отлавливаться с пом On Error Resume Next: Debug.Print Err.Number или чем-то подобным. Application.Trim() молча возвращает значение номера ошибки (в этом случае, тип переменной должен быть Variant, чтобы не возникла ошибка Type-Mismatch Error с прерыванием кода). Здесь ошибка отлавливается с пом. функции IsError() . KL [MVP - Microsoft Excel] Спасибо. Я , по-моему, как раз поэтому стал записывать как Application.Trim(), потому что IsError() отловить можно было. Только почему то у меня этот факт нигде не отложился, теперь то запомню (надеюсь). Ещё раз спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 15:01:51 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Спасибо! Только опять момент - виноват, не описал нюанс шаблона таблицы, формируемой на втором листе. Мне необходимо добавить в начало этой таблицы четыре пустых столбца, чтобы потом их заполнять вычисляемыми данными из других столбцов рекордсета. Поступил так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Но непонятно - при пошаговом выполнении макроса - всё нормально, при автоматическом - тихая остановка на первой выборке, после вставки этих пустых столбцов! На всяк. случай - критично ли этой процедуры, если для некоторые рекордсеты содержат пустые столбцы? Может сразу превращать(именовать) их в диапазоны, чтобы воспринимались как единое целое?... Ещё вопросики: 1. Как результат этого выражения: rng(row, 1) = Format(rng(row, 5), "000") & Format(rng(row, 6), "000") превратить в текст? (нельзя терять лидирующих нулей). 2. Как правильно надо превращать число в ячейке, сохранённое как текст, обратно в число? И на перспективу - есть какие-нибудь готовые примеры реализации только в коде (памяти), без вспомогательного листа нахождения значения в табличке на перекрестье названий строки столбца? Будет время - хочу попробовать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 20:51:03 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
LeCrunch И на перспективу - есть какие-нибудь готовые примеры реализации только в коде (памяти), без вспомогательного листа нахождения значения в табличке на перекрестье названий строки столбца? Будет время - хочу попробовать) Ты же уже спрашивал, ты что не читаешь ответы? неск-ко постов назад ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 21:23:19 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Deggasad Так я же сейчас имею ввиду готовые примеры реализации только в коде (памяти), без вспомогательного листа ! Т.е. не переписывая в VBA то, как это было реализовано ранее формулами, а собственно алгоритм, как это можно проделать без физической таблички на листе Excel. Хотя это нескоро. С непонятками в макросе разобраться бы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 21:36:59 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
LeCrunchМне необходимо добавить в начало этой таблицы четыре пустых столбца, чтобы потом их заполнять вычисляемыми данными из других столбцов рекордсета. Поступил так:... Но непонятно - при пошаговом выполнении макроса - всё нормально, при автоматическом - тихая остановка на первой выборке, после вставки этих пустых столбцов! На всяк. случай - критично ли этой процедуры, если для некоторые рекордсеты содержат пустые столбцы? Может сразу превращать(именовать) их в диапазоны, чтобы воспринимались как единое целое?... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. LeCrunch1. Как результат этого выражения: rng(row, 1) = Format(rng(row, 5), "000") & Format(rng(row, 6), "000") превратить в текст? (нельзя терять лидирующих нулей). Код: plaintext LeCrunch2. Как правильно надо превращать число в ячейке, сохранённое как текст, обратно в число? Код: plaintext 1. 2. LeCrunchИ на перспективу - есть какие-нибудь готовые примеры реализации только в коде (памяти), без вспомогательного листа нахождения значения в табличке на перекрестье названий строки столбца? Например так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 21:46:28 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
LeCrunchСпасибо! Ещё вопросики: 1. Как результат этого выражения: rng(row, 1) = Format(rng(row, 5), "000") & Format(rng(row, 6), "000") превратить в текст? (нельзя терять лидирующих нулей). 2. Как правильно надо превращать число в ячейке, сохранённое как текст, обратно в число? Можно ещё формат сделать текстовым в ячейке Код: plaintext 1. 2. 3. Назад в число Код: plaintext 1. 2. 3. А если нули нужны только для визуального отображения, то можнотолько формат числа поменять Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 21:58:45 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Пардон, еще две вещи забыл: 1) Код: plaintext не означает, что все три переменные задекларированы как тип Range. На самом деле, первые две - Variant, а последняя - Range. Правильно было бы: Код: plaintext 2) Код: plaintext В Excel2003 макс. число строк на листе 65536, а макс. число типа Integer - 32767. Т.ч. может нехватить (я уже не говорю про Excel2007). Так что лучше: Код: plaintext Да, и еще небольшая чистка моей версии кода: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 22:00:00 |
|
||
|
Данные из диапазона - в цикл для ADO
|
|||
|---|---|---|---|
|
#18+
Ещё раз большущее спасибо всем участникам темы, самому форуму и отдельно Most Valuable Professional'у! ;) Успел до конца отпуска - здорово облегчив работу на будущее! Однако тему прошу не закрывать, ибо, войдя во вкус, планирую понемножку улучшать макрос и дальше. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 06:30:28 |
|
||
|
|

start [/forum/topic.php?all=1&fid=61&tid=2182440]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 193ms |
| total: | 303ms |

| 0 / 0 |
