|
|
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
Я имел в виду,что вы по тропинке развития далеко от меня ушли. Это не попытка проявить неуважение. Прошу прощения если вы так считаете. И не буду спорить что вы внесли огромный вклад в решение моей проблемы,мои благодарности. У меня еще есть вопрос. Так как программа очень прожорливая до памяти,то лишние символы в файлах не нужны,это такие как цифры,буквы языка,на который переводится документ,точки там и т.д.(их все равно переводить не нужно). Но листы обычно заполнены формулами и если сразу начинать удалять все ненужное,то в ячейках остается что-то типа "#ИМЯ?" или подобное. И это воспринимается программой уже как материал для подсчета,хотя эти ячейки должны быть пустыми. Избежать этого можно путем сохранения листа на прежнее место,но что бы в ячейках оставались "значения" Вот я записал макрос на это. Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False если есть какой-нибудь более надежный или еще по какому-нибудь качеству лучший способ,не могли бы вы мне про него рассказать? В общем я спрашиваю ваше мнение по этому поводу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2011, 19:05 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
greeb, есть такой способ:-) Cells.value=Cells.value ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2011, 21:19 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
Вообще-то лучше использовать вместо cells - usedrange. И побыстрей и меньше памяти использует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2011, 21:28 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
А если внешний vbs скрипт написать, которому скармливаем путь к файлу xls, затем он через ADOX.Catalog получает список страниц, далее через ADODB.Recordset делаем к каждой странице select... с подсчетом ? Вроде как должно получиться. (вопрос к тем, кто понимает - о чем я :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2011, 22:46 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
kuklpDjon Player, Дело в том, что понятие Sheets включает все виды листов, листы диаграмм, макросов 4.0, диалогов и т.д. Поэтому(если у Вас не только рабочие листы) лучше пользоваться конструкцией For Each sh In ActiveWorkbook.WorkSheets тогда она будет обрабатывать только рабочие листы.Спасибо, не знал, все никак не мог понять разницы между WorkSheets и Sheets, первая мысль была, что WorkSheets более короткое написание конструкции ThisWorkbook.Sheets, но практическое применение показывало, что это не так, а в хелпе не смотрел. Поэтому я сам всегда использовал Sheets вместо WorkSheets. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2011, 02:05 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
Что то я не понимаю как нужно использовать Cells.value=Cells.value но это не особо важно,главное что есть решение) И еще я не совсем понимаю что такое cells и usedrange. Я ведь макросы делаю преимущественно записью т.к. не разбираюсь. ну я понял что cells выбирает весь лист. range вроде это диапазон, по логике usedrange это используемый диапазон,но тогда получается что его сначала нужно задать? или я тут неправильно понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2011, 14:17 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
greeb, >>Что то я не понимаю как нужно использовать >>Cells.value=Cells.value А так и использовать. Все формулы заменятся на значения. >>по логике usedrange это используемый диапазон,но тогда получается >>что его сначала нужно задать? или я тут неправильно понимаю? Немного неправильно:-) Написав usedrange, мы тем самым и задаем используемый диапазон. Т.е.: usedrange.value=usedrange.value Зачем нам присваивать значения заведомо неиспользуемым ячейкам? А Экс думать не умеет, что ему задай, то и сделает. Будет добросовестно менять пусто на пусто во всем листе. Есть еще понятия currentregion, area, но это уже совсем другая тема:-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2011, 15:51 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
kuklp, Забыл, перед usedrange нужно указывать лист, как то: sh.usedrange.value=sh.usedrange.value или, для общего случая например: sheets(1).usedrange.value... и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2011, 15:55 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
Возможно вы подумали что я на все забил уже и свалил,но это не так) Просто на работе времени не было,макросами я занимаюсь в свободное время, а дома вирусняк захавал файл hosts и инет не работал) Я так и не понял как сделать макрос с использованием sh.usedrange.value=sh.usedrange.value чтобы он на одином листе работал только. Я сделал так Sub Znachenia_for_sheet() ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value ActiveSheet.UsedRange.ClearFormats End Sub а потом перечитав сообщения я сделал еще такой вариант Sub Znatcheniya_for_sheet() With ActiveSheet .UsedRange.Value = .UsedRange.Value .UsedRange.ClearFormats End With End Sub для всей книги такой Sub Znachenia_for_book() Dim sh As Worksheet For Each sh In ActiveWorkbook.Worksheets sh.UsedRange.Value = sh.UsedRange.Value sh.UsedRange.ClearFormats Next sh End Sub а очистка формата для того чтобы визуально можно было различать обработанные листы от остальных и чтобы меньше файлы весили. Благодаря вам я узнал намного больше чем простым методом тыка,большое вам всем спасибо) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2011, 14:12 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
Впрочем, друг мой, защем? Защем Znatcheniya_for_sheet() делается с With ActiveSheet? - определённо, активен только _один_ лист... Защем Znachenia_for_book() нужен? Ибо _это_ делается быстрее через ADODB... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2011, 15:16 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
AndreTM, Для меня ADODB и сами макросы являеются темным лесом. Не нужно у меня спрашивать зачем ибо я делаю как могу,а не как нравится.И в первую очередь меня волнует достижение цели,а не средства на это. В виду отсутствия смайликов мое сообщение может быть воспринято как попытка кого-нибудь,но прошу учесть что оскорбление не является моей целью)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2011, 15:34 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
недописал половину сообщения... ну надеюсь все поняли что я имел в виду) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2011, 15:39 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
AndreTMВпрочем, друг мой, защем? Защем Znatcheniya_for_sheet() делается с With ActiveSheet? - определённо, активен только _один_ лист... Защем Znachenia_for_book() нужен? Ибо _это_ делается быстрее через ADODB...Позвольте не согласиться:-) 1) ActiveSheet - не обязательно лист, с которого запущен макрос. Для того и ActiveSheet. Но лучше конкретный лист, без его активации. Быстрей, технологичней(как у автора в Znachenia_for_book). 2) (ADODB)Ну мож, еще и операционку семейства UNIX прикрутить, а то уж слишком просто, одна строка все формулы, ссылки в значения преобразовывает. Не, можно конечно, асфальтовым катком носовой платок погладить... Я предпочитаю утюг:-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2011, 16:43 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
kuklp, И еще, скажем просьба. Покажите столь же простой код, как у автора Znachenia_for_book(), к-рый хотя бы в полтора раза быстрей работал в книге из десятка(ну пусть сотни) листов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2011, 16:52 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
kuklp, ActiveSheet, как я понимаю,это лист,который я выбрал и он мне в данный момент показывается на экране.(так ведь?) А под конкретным листом вы имеете в виду просто какой-то лист из книги, имя которого нужно будет указать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2011, 13:45 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
greebkuklp, ActiveSheet, как я понимаю,это лист,который я выбрал и он мне в данный момент показывается на экране.(так ведь?) А под конкретным листом вы имеете в виду просто какой-то лист из книги, имя которого нужно будет указать?Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2011, 15:36 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
ну макросы Sub Znatcheniya_for_sheet() и Sub Znatchenia_for_sheet() сделаны как раз для работы с выделенным листом,т.к. после на этими листами проводится еще удаление цифр,непереводимых символов и иногда английских букв. В общем чтобы все глазами видеть и предотвращать косяки, уж извините, но машине я не верю) как уже говорилось думать она не умеет)) а учитывая что все нужно делать быстро, то вариант когда нужно указывать листы руками не подходит(не, ну иногда подходит,но эт оредко бывает). Удаляющий макрос кстати выглядит так,это нормально?он 100% записанный. Cells.Replace What:="1", Replacement:="", LookAt:=xlPart, SearchOrder:= _ xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False И еще вопрос. Если в листе слишком много строк, его приходится разбивать на несколько листов и сохранять в отдельные книги. Сложный ли будет макрос для разбивания листа по 2000 строк начиная с конца в отдельные листы? Сохранить их в отдельные кники я и руками смогу))Хотя я участия в создании этих макросов практически не принимаю,но я не прошу чтобы за меня все делали, просто наставления) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2011, 15:57 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
greeb Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2011, 16:55 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
Ну это часть его)) там еще 9 строчек в нем таких же)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2011, 16:58 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
greeb, 9 строчек не лучшее решение, хотя бы цикл сделать и то уже получше будет, возможно можно ещё как-то попроще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2011, 17:03 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
Проблема в том что я про циклы вообще ниче не знаю. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Здесь используется цикл? а то мой макрос на транслитерацию из 60 строк состоит на замену... И я знаю что это плохо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2011, 17:14 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
greeb, ага, в этом примере комбинация for next и есть цикл, он пробегается по 33-ем элементам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2011, 17:18 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. Тут очень много скобочек и мне мало что понятно. Я могу сделать только так. но я даже не знаю что потом с этим делать... Вставить между sub и end sub? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2011, 17:30 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
greeb, функцию вы верно преобразовали, но конкретно для вашей ситуации думаю лучше сделать так: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2011, 00:15 |
|
||
|
Excel. Макрос. Открытие всех ячеек.
|
|||
|---|---|---|---|
|
#18+
Ваш макрос на больших листах быстрее работает,не сильно правда,но в больших объемах экономия времени все же присутствует))Спасибо за помощь) По поводу разбивания большого листа на мелкие по 2000 строк Код: plaintext 1. 2. 3. 4. 5. Сначала я думал сделать так,чтобы он автоматически разбивал весь большой лист,это бы делалось повторением макроса пока ошибка не выскочит,т.к в листе осталось бы меньше строк чем 2000,но я не знаю как заставить его повторяться и вроде тогда нужно поставить обработчик ошибок после строчки Код: plaintext 1. так что я подумал что можно просто стоять на большом листе и несколько раз подряд руками запускать макрос,вроде так проще)) Я вот только не уверен что есть понятия "последняя строка" и "последний лист".Да и про диапазон я не уверен "последняя:2000 строк вверх" Скажите,это вообще возможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2011, 12:46 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=37356278&tid=2176664]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 318ms |

| 0 / 0 |
