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

Sub Otkrit()
Cells.AutoFilter
Cells.EntireColumn.Hidden = False
Cells.EntireRow.Hidden = False
End Sub

Этот макрос совершенно не реагирует на вместимое сводных таблиц(случайно обнаружил) и возможно еще много на что т.к. я не знаю как еще можно спрятать ячейки в экселе. Подскажите кстати какие там еще способы есть,все что я знаю это скрыть ячейки,поставить фильтр или сводная таблица. Последнее у меня вызывает ужас.

помогите написать макрос который открывал бы все ячейки независимо от того каким образом они были скрыты ибо я сам этого сделать не могу (если кто-то решит помочь,то еще объясните работу макроса чтобы у меня в голове немного прибавилось мозга). Ну и вообще дайте пару ценных советов для новичка,только ж не сильно заумных.
Заранее благодарен.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37336794
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Могут быть ещё скрытые листы.
Причем если стоит защита на книгу с паролем, то нужно знать пароль, чтобы сделать лист видимым.
Так-же может быть защита на лист, которая запрещает открывать скрытые строки, столбцы, автофильтры.


Но для того, чтобы сосчитать символы во всех ячейках всех листов не нужно делать их видимыми или знать пароли, т.к. само по себе скрытие не делает их невидимыми для макросов. Всё зависит от того, как написан код.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37336831
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пароли на сами файлы как правило мне предоставляются,а пароли на листы и книги легко узнать.
Я работаю в переводческой компании и мне нужно использовать специальную прогу для подсчета символов (там повторы,процент совпадения с памятью) и именно она не видит все что скрыто,а только то что видно глазом и можно выделить. а т.к. делать нужно все быстро,то руками все открывать и просматривать не получается.Если же отправлять файлы на подсчет как они есть,то считается как правило даже далеко не половина содержимого и естественно оплата перевода понижается,что злит начальство.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37336918
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А специальная прога которая считает, кто её разработчик, нельзя ли их напрячь этим вопросом.

По идее, того кода, что у вас приведен, достаточно, но надо учитывать то, что код работает для текущего активного листа, а так-же могут быть проблемы с автофильтром в зависимости от того, установлен был вообще какой-либо фильтр на данном листе или нет.

Если использовать данный макрос на чистом листе, сразу-же выскочит ошибка на первой строке кода.

Поэтому надо как минимум добавить обработку ошибок, к примеру так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Sub Otkrit()
 On Error Resume Next
 Cells.AutoFilter
 On Error GoTo  0 
 
 Cells.EntireColumn.Hidden = False
 Cells.EntireRow.Hidden = False
End Sub
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37336924
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Djon Player,

Знаешь,что-то ты меня озадачил скрытыми листами)
А про сводные таблицы знаешь что нибудь? Я заметил что в них фильтры не убираются,и ячейки не раскрываются если выделять весь лист и делай двойной клик на границе стольбцов/строк,плюс можно убрать отображение кнопок "+" и "-" и они тогда внешне просто похожи на обычные таблицы... ужас блин
Но тем не менее за помощь благодарен)
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37336944
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати ещё могут быть очень скрытые листы (у них свойство Visible=xlSheetVeryHidden), их не видно в списке скрытых листов, их можно увидеть только зайдя в VBA.
Чтобы их сделать видимыми, у них нужно устанавливать свойство Visible = xlSheetVisible
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37336952
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greeb,

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

Ну вообще эта программа еще сырая (по крайней мере я такой инфой располагаю) и пользоваться приходится тем,что есть. Достойной альтернативы пока тоже нет. если интересно то называется так : SDL Trados Studio 2009.
По правде говоря мало кто из заказчиков знает о существовании этой проги,но те кто знает люди серьезные.
Я еще мало что понимаю в этих макросах и почти все делаю через запись с последующим слепливанием частей этих записей в кучу)
При записи макросов на замену символов для всей книги и для отдельного листа разницы в них не обнаружил...по этому у меня все работает только на отдельном листе.Кстати только что понял что делают твои исправления))спасибо)
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37337015
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Djon Player,

Дабы не быть назойливым у меня последний вопрос

Sheets("лист2").Visible = True

Вот это по идее должно делать видимым 2-й лист,но я не понимаю как написать чтобы делались видимыми все скрытые листы,чтобы не указывать их названия.

Sheets(Array("temp1841513506", "лист1", "лист2", "лист3")).Select
как я понимаю в этом случае просто выделяются листы,но опять же тут названия их и это не универсально.
SelectedSheets.Visible = True
если потом написать это,то получится раскрыть диапазон?


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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub Увидеть_все_листы()
 Dim sh As Worksheet
 
 For Each sh In ActiveWorkbook.Sheets
  If sh.Visible <> xlSheetVisible Then
   sh.Visible = xlSheetVisible
  End If
 Next sh
 
End Sub

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

Спасибо большое)хоть я и не понимаю как он рабртает и еще даже не проверил))Удачи
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37339183
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greebDjon Player,

Спасибо большое)хоть я и не понимаю как он работает и еще даже не проверил))УдачиОбщий смысл макроса такой. Он перебирает в цикле список всех листов активной книги и у каждого проверяет свойство Visible и у тех листов у которых оно не совпадает с xlSheetVisible, принудительно устанавливается xlSheetVisible.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37340910
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Djon Player,

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

Sub Увидеть_все_листы()
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Sheets
sh.Visible = xlSheetVisible
Next sh
End Sub
И вот это:
вместо
Cells.AutoFilter
лучше
sh.AutoFilterMode = 0
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37347428
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37347462
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Djon Player а так-же могут быть проблемы с автофильтром в зависимости от того, установлен был вообще какой-либо фильтр на данном листе или нет.

Если использовать данный макрос на чистом листе, сразу-же выскочит ошибка на первой строке кода.

Поэтому надо как минимум добавить обработку ошибок, к примеру так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Sub Otkrit()
 On Error Resume Next
 Cells.AutoFilter
 On Error GoTo  0 
 
 Cells.EntireColumn.Hidden = False
 Cells.EntireRow.Hidden = False
End Sub

А так не надо обработчика:
With ActiveSheet
.AutoFilterMode = 0
.Columns.Hidden = False
.Rows.Hidden = False
End With

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

вот что я написал пытаясь соединить их

Sub Danger()
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Sheets
sh.Visible = xlSheetVisible
sh.AutoFilterMode = 0
sh.Columns.Hidden = False
sh.Rows.Hidden = False
sh.Rows.AutoFit
sh.Columns.AutoFit
Next sh
End Sub

последние строчки чисто для визуализации
Прокоментируйте если не сложно
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37347950
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нормально. Я и писал: "ActiveSheet можно заменить на нужный лист." Какие еще комменты тут нужны?
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37348180
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да я просто немного туповат и сразу не въехал) щас то уже дошло что к чему. Спасибо))
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37348409
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Знаете что я тут обнаружил) макрос выдает ошибку если на какой-то лист занят полностью диаграммой.Когда делаешь расположение диаграммы на отдельном листе, на этом листе нельзя использовать фильтры вообще,и строчка макроса насчет этих фильтров выдает ошибку... досадно) я то уж подумал что это универсальный макрос...
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37348431
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greeb,

вот для этого и существует обработчик ошибок
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37348530
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не ну так,то он ошибку не выдает. Это все из-за того что на листе,полностью занятом диаграммой, нельзя фильтры юзать в принципе (ну это я так думаю). Если эту диаграмму перенести на лист с данными,то все нормально работает. Скажи,это возможно как-то обойти? Если да,то я продолжу поиски решения) ну в принципе такие файлы редко приходят и мне руками их подготовить не в падло,но мы ведь не в каменном веке живем чтобы руками все делать)
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37348546
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Djon Player,

Дело в том, что понятие Sheets включает все виды листов, листы диаграмм, макросов 4.0, диалогов и т.д. Поэтому(если у Вас не только рабочие листы) лучше пользоваться конструкцией
For Each sh In ActiveWorkbook.WorkSheets
тогда она будет обрабатывать только рабочие листы.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37348609
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Знаете,я тут третий лишний) как в лесу брожу,пока носом не ткнете ниче не вижу... пичально конечно. Правда я на 3-х форумах написал это и только вы мне помогать стали. Я благодарен,узнал много новых вещей(ну это потому что я почти ниче не знаю).
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37348626
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
greeb, а почему "третий лишний"? Вам вроде стараются помочь. И на все Ваши вопросы(как мне показалось) отвечают. А в "Правда я на 3-х форумах написал это и только вы мне помогать стали.", просто не верю. На подобных форумах полно умных, добрых и отзывчивых.
...
Рейтинг: 0 / 0
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
Excel. Макрос. Открытие всех ячеек.
    #37359582
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greeb, лишь несколько раз прочитав ваше предыдущее сообщение, я вроде (хотя не уверен), понял о чем речь.
Вы хотите один лист, в котором много тысяч строк, разбить на несколько листов, чтобы в них было не более 2 тысяч строк?
Понятия последняя строка не существует, есть такие понятия как последняя строка содержащая данные, которую можно вычислить, так-же есть максимальный номер строки, к примеру в Excel 2003 это 65535.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37359603
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот смотрите какой макрос мне предложили использовать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub razdelit_list()
Dim iLastRow As Long, x As Long, n As Long
Application.ScreenUpdating = False
    With ActiveSheet
        iLastRow = .Cells(Rows.Count,  1 ).End(xlUp).Row
        x = Application.InputBox("Укажите количество строк в блоке для переноса на другие листы", "Выбираем размер блока", Type:= 1 )
        n = iLastRow / x
        For i =  1  To n -  1 
            Range(.Cells(x +  1 ,  1 ), .Cells(x + x,  1 )).EntireRow.Cut
            Sheets.Add After:=Sheets(Sheets.Count)
            ActiveSheet.Paste
            Range(.Cells(x +  1 ,  1 ), .Cells(x + x,  1 )).EntireRow.Delete
            iLastRow = .Cells(Rows.Count,  1 ).End(xlUp).Row
        Next
    End With
Application.ScreenUpdating = True
End Sub

Правда у меня эксель зависает когда я пытаюсь закрыть документ без сохранения.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37359623
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы правильно поняли) я писал про цель этого макроса немного выше авторИ еще вопрос. Если в листе слишком много строк, его приходится разбивать на несколько листов и сохранять в отдельные книги. Сложный ли будет макрос для разбивания листа по 2000 строк начиная с конца в отдельные листы? Сохранить их в отдельные кники я и руками смогу))Хотя я участия в создании этих макросов практически не принимаю,но я не прошу чтобы за меня все делали, просто наставления) хотя надо было еще раз написать, а то и правда получилось непонятно.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37359636
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"greeb" <nospam@sql.ru>; сообщил/сообщила в новостях следующее: news:11001374@sql.ru...
> Автор: greeb
> вот смотрите какой макрос мне предложили использовать
>
>
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Sub razdelit_list()
Dim iLastRow As Long, x As Long, n As Long
Application.ScreenUpdating = False
    With ActiveSheet
        iLastRow = .Cells(Rows.Count,  1 ).End(xlUp).Row
        x = Application.InputBox("Укажите количество строк в блоке для переноса на другие листы", "Выбираем размер 
блока", Type:= 1 )
        n = iLastRow / x
        For i =  1  To n -  1 
            Range(.Cells(x +  1 ,  1 ), .Cells(x + x,  1 )).EntireRow.Cut ' Здесь не совсем понятна система координат для 
определения блока под перенос на другой лист

            Sheets.Add After:=Sheets(Sheets.Count)
            ActiveSheet.Paste ' Это неоднозначность с With ActiveSheet, которая может приводить к разным глюкам
' Лучше завести переменную типа Sheet и работать с добавленными листами через неё. Потом не забыть очистить её 
Nothing'ом
            Range(.Cells(x +  1 ,  1 ), .Cells(x + x,  1 )).EntireRow.Delete ' Тот-же вопрос с системой координат
            iLastRow = .Cells(Rows.Count,  1 ).End(xlUp).Row ' Эта строка не понятно зачем
        Next
    End With
Application.ScreenUpdating = True
End Sub
Попробуй так:
Код: 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.
Sub razdelit_list()
Dim iLastRow As Long, x As Long, n As Long
Dim sh As Worksheet, nStartRow As Long, nStartCol As Long, nCountCol As Long

Application.ScreenUpdating = False
    With ActiveSheet
        iLastRow = .Cells(Rows.Count,  1 ).End(xlUp).Row
        x = Application.InputBox("Укажите количество строк в блоке для переноса на другие листы", "Выбираем размер 
блока", Type:= 1 )
        nStartRow = Application.InputBox("Укажите начальную строку с которой начинаем перенос на другие листы", 
"Указваем начальную строку", Type:= 1 )
        nStartCol = Application.InputBox("Укажите начальный столбец с которого начинаем перенос на другие листы", 
"Указваем начальный столбец", Type:= 1 )
        nCountCol = Application.InputBox("Укажите количество столбцов в блоке для переноса на другие листы", "Указываем 
количество столбцов", Type:= 1 )
        n = iLastRow / x
        For i =  1  To n -  1 
            Range(.Cells(nStartRow, nStartCol), .Cells(nStartRow + x, nStartCol + nCountCol)).EntireRow.Cut
            Set sh = Sheets.Add(After:=Sheets(Sheets.Count))
            sh.Paste
            Range(.Cells(nStartRow, nStartCol), .Cells(nStartRow + x, nStartCol + nCountCol)).EntireRow.Delete
        Next
        Set sh = Nothing
    End With
Application.ScreenUpdating = True
End Sub


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37359673
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greeb, я так понял основная цель лист разбить на отдельные файлы.

Вот побырому макререкодером записал и чуть подправил

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub Вырезка_Части_текста_в_новую_книгу()
 Dim wb As Workbook
 
 Set wb = ActiveWorkbook 
 
 Rows("1:2000").Copy
 Workbooks.Add
 Cells( 1 ,  1 ).Insert Shift:=xlDown
 wb.Activate
 Rows("1:2000").Delete
 Set wb = Nothing

End Sub

Один раз запускаете макрос на нужном листе, будет создана книга куда перенесутся данные первых 2000 строк.
После этого каждый раз нажимаете комбинацию Ctrl+Y и получаете ещё очередную порцию из новых книг с двумя тысячами строк.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37359738
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на самом деле это я написал там With activesheet, просто оригинальный вариант работал для "лист1"
Макрос кстати вроде не глючит.
Если мне нужно переносить все столбцы, то тогда ведь можно будет убрать необходимость их указания?
iLastRow = .Cells(Rows.Count, 1).End(xlUp).Row (эта строка -- ошибка)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub Макрос1()
Dim iLastRow As Long, x As Long, n As Long 
Application.ScreenUpdating = False 
    With Sheets("Лист1") 
        iLastRow = .Cells(Rows.Count,  1 ).End(xlUp).Row 
        x = Application.InputBox("Укажите количество строк в блоке для переноса на другие листы", "Выбираем размер блока", Type:= 1 )
        n = iLastRow / x 
        For i =  1  To n 
            Range(.Cells(x +  1 ,  1 ), .Cells(x + x,  1 )).EntireRow.Cut 
            Sheets.Add After:=Sheets(Sheets.Count) 
            ActiveSheet.Paste 
            Range(.Cells(x +  1 ,  1 ), .Cells(x + x,  1 )).EntireRow.Delete 
        Next
    End With
Application.ScreenUpdating = True
End Sub
вот в общем какой он сейчас
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37359776
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: greeb
> вот в общем какой он сейчас


Еще раз о системе координат:
Ты запрашиваешь размер блока(сколько строчек, по-русски ) для переноса

я на это ввожу 1000

Ты вычисляешь количество блоков по тысяче строк из используемых на листе и в цикле(А!!! теперь я понял )
начинаешь переносить блоки, начиная со второго.

Насчет столбцов - я погорячился. Ты выделяешь всю строку и вырезаешь/вставляешь всю строку. :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37359859
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разъясните мне пожалуйста (или ссылку) строчку

Код: plaintext
x = Application.InputBox("Тут как я понимаю указывается сообщение,которое я увижу", "А это я не понимаю", Type:= 1 )

Код: plaintext
Type:= 1 
это тип данных? Где мне посмотреть список : цифорка - тип данных

тогда я думаю можно будет подставить "x" в макрос вместо "2000" и я смогу регулировать количество переносимых строчек.надеюсь можно?

как-то так:

Sub Вырезка_Части_текста_в_новую_книгу()
Dim wb As Workbook

Set wb = ActiveWorkbook

Rows("1:x").Copy
Workbooks.Add
Cells(1, 1).Insert Shift:=xlDown
wb.Activate
Rows("1:x").Delete
Set wb = Nothing

End Sub
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37359863
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
просто макрос Djon Player'a мне кажется самым простым и понятным)
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37359867
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
F1 не работает?
Value Meaning
0 A formula
1 A number
2 Text (a string)
4 A logical value (True or False)
8 A cell reference, as a Range object
16 An error value, such as #N/A
64 An array of values
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37360277
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greeb,

Всё есть в справке.
Так-же в коде вы можете поставить курсор на нужную команду и нажать комбинацию Ctrl+I, высветится подсказка по параметрам.
С помощью комбинации Ctrl+J можно увидеть доступный список команд, функций, констант и прочего.


Попробуйте такой код, состоящий из двух процедур, его надо поместить в модуль:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Option Explicit

Public x As Long

Sub Ввод_количества_строк()
 If x =  0  Then x =  2000  'Тут мы задаем значение по умолчанию.
 x = InputBox("Введите количество строк для вырезки", "Ввод количества строк", x)
End Sub


Sub Вырезка_части_текста_в_новую_книгу()
 Dim wb As Workbook
 
 Set wb = ActiveWorkbook
 
 Rows("1:" & x).Copy
 Workbooks.Add
 Cells( 1 ,  1 ).Insert Shift:=xlDown
 wb.Activate
 Rows("1:" & x).Delete
 Set wb = Nothing

End Sub


Самым первым нужно запустить макрос Ввод_количества_строк() и ввести нужное количество строк.

А дальше можно запускать макрос Вырезка_части_текста_в_новую_книгу() и потом уже комбинацией Ctrl+Y запускать его повторно столько раз сколько нужно.

При желании можно сделать две процедуры, одну запускаем и в ней задаем количество строк.
А другая процедура использует ранее введенное значение и вопросы не задает.
...
Рейтинг: 0 / 0
Excel. Макрос. Открытие всех ячеек.
    #37362025
greeb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В справке все есть,не спорю,только она на английском. В английском я не силен. Сейчас я даже зная ответ не могу его там найти.
Да и инфа на русском для меня не особо понятна.В общем для того,чтобы не задавать тупых вопросов я решил прочитать самоучитель по vba.
Благодарю всех за помощь и за то,что вы не посылали меня гуглить,а объясняли и разжевывали.
Вы как-то очень глубоко вникаете в вопрос, ну результат конечно получается лучше ожидаемого.Но для меня прада не привычно такое отношение. Я вам всем очень признателен.
...
Рейтинг: 0 / 0
62 сообщений из 62, показаны все 3 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel. Макрос. Открытие всех ячеек.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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