powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel. Макрос. Открытие всех ячеек.
25 сообщений из 62, страница 2 из 3
Excel. Макрос. Открытие всех ячеек.
    #37348679
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я имел в виду,что вы по тропинке развития далеко от меня ушли. Это не попытка проявить неуважение. Прошу прощения если вы так считаете.

И не буду спорить что вы внесли огромный вклад в решение моей проблемы,мои благодарности.
У меня еще есть вопрос. Так как программа очень прожорливая до памяти,то лишние символы в файлах не нужны,это такие как цифры,буквы языка,на который переводится документ,точки там и т.д.(их все равно переводить не нужно). Но листы обычно заполнены формулами и если сразу начинать удалять все ненужное,то в ячейках остается что-то типа "#ИМЯ?" или подобное. И это воспринимается программой уже как материал для подсчета,хотя эти ячейки должны быть пустыми. Избежать этого можно путем сохранения листа на прежнее место,но что бы в ячейках оставались "значения"
Вот я записал макрос на это.

Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

если есть какой-нибудь более надежный или еще по какому-нибудь качеству лучший способ,не могли бы вы мне про него рассказать?
В общем я спрашиваю ваше мнение по этому поводу.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37348802
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
greeb, есть такой способ:-)
Cells.value=Cells.value
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37348810
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще-то лучше использовать вместо cells - usedrange. И побыстрей и меньше памяти использует.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37348919
Art-C0de_NoPassword
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если внешний vbs скрипт написать, которому скармливаем путь к файлу xls,
затем он через ADOX.Catalog получает список страниц, далее через ADODB.Recordset делаем к каждой странице select...
с подсчетом ?
Вроде как должно получиться. (вопрос к тем, кто понимает - о чем я :))
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37349010
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kuklpDjon Player,

Дело в том, что понятие Sheets включает все виды листов, листы диаграмм, макросов 4.0, диалогов и т.д. Поэтому(если у Вас не только рабочие листы) лучше пользоваться конструкцией
For Each sh In ActiveWorkbook.WorkSheets
тогда она будет обрабатывать только рабочие листы.Спасибо, не знал, все никак не мог понять разницы между WorkSheets и Sheets, первая мысль была, что WorkSheets более короткое написание конструкции ThisWorkbook.Sheets, но практическое применение показывало, что это не так, а в хелпе не смотрел. Поэтому я сам всегда использовал Sheets вместо WorkSheets.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37349779
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что то я не понимаю как нужно использовать
Cells.value=Cells.value
но это не особо важно,главное что есть решение)
И еще я не совсем понимаю что такое cells и usedrange. Я ведь макросы делаю преимущественно записью т.к. не разбираюсь. ну я понял что cells выбирает весь лист. range вроде это диапазон, по логике usedrange это используемый диапазон,но тогда получается что его сначала нужно задать? или я тут неправильно понимаю?
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37350075
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
greeb,
>>Что то я не понимаю как нужно использовать
>>Cells.value=Cells.value

А так и использовать. Все формулы заменятся на значения.

>>по логике usedrange это используемый диапазон,но тогда получается >>что его сначала нужно задать? или я тут неправильно понимаю?

Немного неправильно:-) Написав usedrange, мы тем самым и задаем используемый диапазон.
Т.е.:
usedrange.value=usedrange.value
Зачем нам присваивать значения заведомо неиспользуемым ячейкам? А Экс думать не умеет, что ему задай, то и сделает. Будет добросовестно менять пусто на пусто во всем листе.
Есть еще понятия currentregion, area, но это уже совсем другая тема:-)
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37350091
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kuklp,

Забыл, перед usedrange нужно указывать лист, как то:
sh.usedrange.value=sh.usedrange.value
или, для общего случая например: sheets(1).usedrange.value... и т.д.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37355937
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно вы подумали что я на все забил уже и свалил,но это не так) Просто на работе времени не было,макросами я занимаюсь в свободное время, а дома вирусняк захавал файл 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

а очистка формата для того чтобы визуально можно было различать обработанные листы от остальных и чтобы меньше файлы весили.
Благодаря вам я узнал намного больше чем простым методом тыка,большое вам всем спасибо)
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37356092
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, друг мой, защем?
Защем Znatcheniya_for_sheet() делается с With ActiveSheet? - определённо, активен только _один_ лист...
Защем Znachenia_for_book() нужен? Ибо _это_ делается быстрее через ADODB...
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37356116
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

Для меня ADODB и сами макросы являеются темным лесом. Не нужно у меня спрашивать зачем ибо я делаю как могу,а не как нравится.И в первую очередь меня волнует достижение цели,а не средства на это.
В виду отсутствия смайликов мое сообщение может быть воспринято как попытка кого-нибудь,но прошу учесть что оскорбление не является моей целью))
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37356130
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
недописал половину сообщения... ну надеюсь все поняли что я имел в виду)
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37356278
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTMВпрочем, друг мой, защем?
Защем Znatcheniya_for_sheet() делается с With ActiveSheet? - определённо, активен только _один_ лист...
Защем Znachenia_for_book() нужен? Ибо _это_ делается быстрее через ADODB...Позвольте не согласиться:-)
1) ActiveSheet - не обязательно лист, с которого запущен макрос. Для того и ActiveSheet. Но лучше конкретный лист, без его активации. Быстрей, технологичней(как у автора в Znachenia_for_book).
2) (ADODB)Ну мож, еще и операционку семейства UNIX прикрутить, а то уж слишком просто, одна строка все формулы, ссылки в значения преобразовывает. Не, можно конечно, асфальтовым катком носовой платок погладить... Я предпочитаю утюг:-)
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37356297
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kuklp,

И еще, скажем просьба. Покажите столь же простой код, как у автора Znachenia_for_book(), к-рый хотя бы в полтора раза быстрей работал в книге из десятка(ну пусть сотни) листов.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37357695
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kuklp,

ActiveSheet, как я понимаю,это лист,который я выбрал и он мне в данный момент показывается на экране.(так ведь?)
А под конкретным листом вы имеете в виду просто какой-то лист из книги, имя которого нужно будет указать?
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37357965
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
greebkuklp,

ActiveSheet, как я понимаю,это лист,который я выбрал и он мне в данный момент показывается на экране.(так ведь?)
А под конкретным листом вы имеете в виду просто какой-то лист из книги, имя которого нужно будет указать?Да.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37358016
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну макросы
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 строк начиная с конца в отдельные листы? Сохранить их в отдельные кники я и руками смогу))Хотя я участия в создании этих макросов практически не принимаю,но я не прошу чтобы за меня все делали, просто наставления)
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37358118
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greeb
Код: plaintext
1.
Cells.Replace What:="1", Replacement:="", LookAt:=xlPart, SearchOrder:= _
        xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
этот макрос лишь удаляет единички 1 на активном листе, а не все цифры.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37358124
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну это часть его)) там еще 9 строчек в нем таких же))
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37358141
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greeb, 9 строчек не лучшее решение, хотя бы цикл сделать и то уже получше будет, возможно можно ещё как-то попроще.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37358161
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в том что я про циклы вообще ниче не знаю.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Function Translit(ByVal txt As String) As String
     iRussian$ = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
     iTranslit = Array("", "a", "b", "v", "g", "d", "e", "jo", "zh", "z", "i", "jj", "k", _
                       "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "ch", _
                       "sh", "zch", "''", "'y", "'", "eh", "ju", "ja")
     For iCount% =  1  To  33 
         txt = Replace(txt, Mid(iRussian$, iCount%,  1 ), iTranslit(iCount%), , , vbTextCompare)
     Next
     Translit$ = txt
End Function

Здесь используется цикл? а то мой макрос на транслитерацию из 60 строк состоит на замену... И я знаю что это плохо
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37358170
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greeb,

ага, в этом примере комбинация for next и есть цикл, он пробегается по 33-ем элементам.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37358187
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Function Translit(ByVal txt As String) As String
     iBefore$ = "1234567890"
     iThen = Array("", "", "", "", "", "", "", "", "", "",)
     For iCount% =  1  To  10 
         txt = Replace(txt, Mid(iBefore$, iCount%,  1 ), iThen(iCount%), , , vbTextCompare)
     Next
     Then$ = txt
End Function

Тут очень много скобочек и мне мало что понятно. Я могу сделать только так. но я даже не знаю что потом с этим делать... Вставить между sub и end sub?
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37358547
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greeb,
функцию вы верно преобразовали, но конкретно для вашей ситуации думаю лучше сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
Sub Удалить_цифры_на_листе()
 Dim i As Integer
 
 For i =  0  To  9 
  Cells.Replace What:=Trim(Str(i)), Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
 Next i
End Sub
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37359194
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ваш макрос на больших листах быстрее работает,не сильно правда,но в больших объемах экономия времени все же присутствует))Спасибо за помощь)

По поводу разбивания большого листа на мелкие по 2000 строк

Код: plaintext
1.
2.
3.
4.
5.
With ActiveSheet
    .Rows("последняя строка:2000 строк вверх от последней").Select
    Selection.Cut
    Sheets.Add After:=Sheets(Sheets.Count)
    Последний лист в книге.Paste
    End With

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

Код: plaintext
1.
.Rows("последняя строка:2000 строк вверх от последней").Select
on error goto "конец"

так что я подумал что можно просто стоять на большом листе и несколько раз подряд руками запускать макрос,вроде так проще))
Я вот только не уверен что есть понятия "последняя строка" и "последний лист".Да и про диапазон я не уверен "последняя:2000 строк вверх"
Скажите,это вообще возможно?
...
Рейтинг: 0 / 0
25 сообщений из 62, страница 2 из 3
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel. Макрос. Открытие всех ячеек.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]