Рисунок слишком велик и будет усечен excel как убрать
Excel. Макрос. Разбивание большого листа на мелкие.
Greeb:
По поводу моих знаний. Я практически ничего не понимаю в макросах.
Задача у меня такая: Нужно большой лист (там например 50 000 строчек) разбить на мелкие листы по 2000 (ну число произвольное). Для этого по моему нужно выбрать диапазон от последней ячейки до ячейки на 2000 строк выше, рывезать его, добавить пустой лист в конец книги и вставить туда вырезанный диапазон.
Мой вариант такой,но есть некоторые сложности.
With ActiveSheet
.Rows(«последняя строка:2000 строк вверх от последней»).Select
Selection.Cut
Sheets.Add After:=Sheets(Sheets.Count)
Последний лист в книге.Paste
End With
Сначала я думал сделать так,чтобы он автоматически разбивал весь большой лист,это бы делалось повторением макроса пока ошибка не выскочит,т.к в листе осталось бы меньше строк чем 2000,но я не знаю как заставить его повторяться и вроде тогда нужно поставить обработчик ошибок после строчки
.Rows(«последняя строка:2000 строк вверх от последней»).Select
on error goto «конец»
так что я подумал что можно просто стоять на большом листе и несколько раз подряд руками запускать макрос,вроде так проще))
Я вот только не уверен что есть понятия «последняя строка» и «последний лист».Да и про диапазон я не уверен «последняя:2000 строк вверх»
Скажите,это вообще возможно?
Юрий М:
Возможно. Один из вариантов в приложенном файле. Не писал дополнительные проверки: например, ввод числа строк для разбивки, превышающий общее количество строк, проверку на пустое значение, отказ.
Greeb:
Ниче себе блин. Мне аж стыдно стало за мой вариант) Не буду просить объяснений работы,пока не дорос. Благодарю за помощь, хотя я расчитывал получить не ответ, а подсказку. прада тогда скорей всего все бы очень затянулось
Юрий М:
Вам нужны комментарии к коду?
Greeb:
Я врядли пойму. Мой уровень познаний в vba представлен в моем примере) не утруждайтесь.
Единственное я там поменял лист1 на activesheet.
Когда я закрываю документ не сохраняя excel пишет «рисунок слишком велик и будет усечен» объясните это)
Рисунок слишком велик и будет усечен excel как убрать
Argument ‘Topic id’ is null or empty
Сейчас на форуме
© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru
Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.
| ООО «Планета Эксел» ИНН 7735603520 ОГРН 1147746834949 |
ИП Павлов Николай Владимирович ИНН 633015842586 ОГРНИП 310633031600071 |
Буфер обмена Excel расширяет возможности копирования
Практическое применение преимуществ инструмента «Буфер обмена» лучше всего продемонстрировать на примерах.
С помощью расширенных функций буфера обмена можно повысить производительность работы в Excel при выполнении копирования и вставки элементов. Это одни из наиболее часто используемых операций при работе с программой Excel. Поэтому стоит научиться их использовать профессионально. Тем более что это не сложно.
Копирование несколько элементов в буфер
Для начала продемонстрируем на примере как с помощью буфера обмена можно быстро заполнять данные в таблице. Для этого создадим исходную табличку как показано на рисунке:
Для быстрого заполнения ячеек с помощью буфера необходимо:
- Открыть окно буфера обмена нажав на угловую кнопку вкладки «Главная» как показано на рисунке:

- В ячейку C2 и C3 введем текст «логистика», «администрация».
- Теперь копируем введенный текст комбинацией клавиш CTRL+C или через «Главная»-«Копировать» сначала с C2. Потом отдельно копируем значение из C3. Обратите внимание, в окне буфера появились новые элементы.

- Выделяем диапазон ячеек C4:C5.
- Щелкните по элементу «администрация». Выделенные ячейки заполнятся соответствующими значениями.
- В такой же способ вставьте в диапазон ячеек C6:C8 слово логистика.

Как видите, вам теперь не приходится каждый раз копировать, когда необходимо заполнять ячейки повторяющимися значениями. Это очень удобно и экономно по времени.
Управление буфером обмена Excel
Буфер обмена может содержать до 24 элементов. В Excel неважно, что копировать: таблицу, столбец, строку, содержимое одной ячейки или просто текст – все это является отдельными элементами в независимости от его объема их информации. При копировании 25-го элемента – первый удаляется автоматически.
Вы можете управлять содержимым буфера. Если в нем находятся лишние элементы, удалите их. Для этого щелкните правой кнопкой мышки по лишнему элементу и выберите опцию «Удалить». Чтобы полностью очистить буфер обмена Excel следует в боковом окне нажать на кнопку «Очистить все».

Информация о количестве элементов выводится в заголовке окна. Там же находится кнопка закрытия бокового окна инструмента «X».

Если вам мешает боковое окно инструмента, но вы желаете продолжать его наполнять элементами, то сделайте так:

- щелкните по кнопке «Параметры», которая расположена в низу окна;
- выберите опцию «Собирать данные без отображения буфера обмена Office»;
- закройте окно буфера, щелкнув по крестику (х).
Режим работы комплексного копирования сохраниться и окно не будет мешать, а когда уже все данные для заполнения будут собраны в буфер, снова откройте его окно для выборочной вставки скопированных элементов.
Так работать очень удобно, особенно когда нужно копировать данные на другие листы Excel или в другие программы пакета MS Office (например, Word). Каждая программа, которая входит в пакет MS Office обладает инструментом «Буфер обмена». А значит, в каждой из этих программ можно вызвать окно буфера для выборочной вставки элементов. Данный инструмент позволяет эффективно организовать одновременную работу с несколькими документами.
Примечание. Перемещение данных осуществляется в такой же способ, как и копирование. Только вместо комбинации клавиш CTRL+C следует нажимать CTRL+X, а вместо опций «копировать» нужно выбирать опцию «вырезать».
- Excel Formula Examples
- Создать таблицу
- Форматирование
- Функции Excel
- Формулы и диапазоны
- Фильтр и сортировка
- Диаграммы и графики
- Сводные таблицы
- Печать документов
- Базы данных и XML
- Возможности Excel
- Настройки параметры
- Уроки Excel
- Макросы VBA
- Скачать примеры
Лист Excel в отдельный файл
Есть одна кнопка. По нажатию на нее надо чтобы этот лист со всеми форматами ( собственно областью печати) сохранялся в отдельный файл. Желательно чтобы имя нового файла можно было бы ввести.
23 ответа
29 июня 2005 года
985 / / 19.09.2004
Если под кнопкой Вы подразумеваете элемент ActiveX, то Вы можете использовать что-то типа :
Private Sub CommandButton1_Click()
iPrompt = «Введите имя файла»: iTitle = «Диалоговое окно»
FileName: iFileName = InputBox(iPrompt, iTitle)
If iFileName = «» Then
iPrompt = «Пора вводить имя файла»
iTitle = «Хватит дурачиться»
GoTo FileName
Else
iFullName = Application.DefaultFilePath & «\» & iFileName & «.xls»
If Dir(iFullName) <> «» Then
iPrompt = «Введите новое имя файла»
iTitle = «Подберите уникальное имя»
GoTo FileName
End If
End If
Примечание :
При использовании данного метода существует вероятность, что данные в ячейках, содержимое которых превышает 255 символов, будут усечены.
30 июня 2005 года
123 / / 19.04.2005
Спасибо, это здорово, но все же немного не то.
Надо чтобы в той-же папке появлялся отдельный файл Эксель, в котором будет только один лист (нужный). А файл в котором работают так и оставался как есть.
Сейчас же получается что просто переименовываетс файл (книга) в которой сейчас работают, причем сохраняется непонятно где или надо сохранять именно вручную (т.е. перименовывается только текущий файл и все)
30 июня 2005 года
985 / / 19.09.2004
При нажатии кнопки (которая представляет собой элемент управления ActiveX и располагается на ячейках рабочего листа) создаётся отдельная рабочая книга, состоящая всего из одного листа, того самого в котором Вы нажали на кнопку.
Далее, после ввода имени файла, эта рабочая книга сохраняется не неизвестно куда, а в папку по умолчанию, как правило \Мои документы\
Так что всё совпадает с Вами требованиями, за исключением папки сохранения, где я имел право свободу выбора, так как в первоначальном вопросе эта часть не обсуждалась.
30 июня 2005 года
123 / / 19.04.2005
Извините, возможно я не совсем точно сформулировал вопрос. Но нужно чтобы сохранялся только один лист( можно сказать область печати этого листа), а сохраняется вся книга. ПРичем и с макросом и с кнопокой, короче вся. Куда помещается действительно не важно 🙂 упор не на место расположения, а на содержание листа.
30 июня 2005 года
123 / / 19.04.2005
А все понял, я сам накосячил, извините 🙂
30 июня 2005 года
985 / / 19.09.2004
Лист действительно копируется вместе с кнопкой и макросом, который находится в модуле этого же листа, но это не противоречило Вашим первоначальным требованиям. Если этого нужно избежать, то можно использовать что-то вроде :
Private Sub CommandButton1_Click()
With Workbooks.Add(xlWBATWorksheet)
Me.Cells.Copy Destination:=.Worksheets(1).Cells
End With
Можно даже так, но первый пример, в основном был с прицелом на дальнейшее продолжение кода.
Private Sub CommandButton1_Click()
30 июня 2005 года
123 / / 19.04.2005
Ценные сведения, учту. Я решил избежать этого еще проще 🙂 я порсто перенес весь макрос с кнопкой на другой лист и все 🙂
30 июня 2005 года
985 / / 19.09.2004
Короче говоря, Вы просто оставили самый первый вариант .
04 августа 2005 года
123 / / 19.04.2005
Originally posted by pashulka
Короче говоря, Вы просто оставили самый первый вариант .
Еще один вопрос назрел, как можно скопировать несколько листов, т.е. чтобы новая книга состояла не из одного листа отдельного а из 3 скажем.
04 августа 2005 года
985 / / 19.09.2004
Worksheets(Array(1, 2, 3)).Copy
Worksheets(Array(«Отчёт», «Список», «Мусор»)).Copy
05 августа 2005 года
123 / / 19.04.2005
Если так делать то копируется весь лист (так и нужно было раньше), но теперь там есть код завязанный на другие листы книги и поэтому выскакивает ошибка. Т.е. надо копировать лист без кода. Вы предлагали как сделать это раньше. Но есть еще один момент, формулы с такого листа обращаются к файлу источнику. Т.е. там в каждой ячейке вместе с формулой появляется путь к файлу. Было бы идеально копировать именно значения из ячеек. Заранее спасибо.
05 августа 2005 года
985 / / 19.09.2004
Вот пример копирования, где формулы будут заменены на значения, которые они возвращают. Пример для двух рабочих листов, расположенных в одной рабочей книге, Вам нужно только изменить ссылки на об’екты.
Worksheets(1).Range(«B1:E10»).Copy
Worksheets(2).Range(«G10:J19»).PasteSpecial xlPasteValues
05 августа 2005 года
123 / / 19.04.2005
В том-то и проблема я не знаю как это сделать для другой книги.
Private Sub CommandButton1_Click()
FileName: iFileName = InputBox(iPrompt, iTitle)
сделал что-то врде этого. Но так не работает.
Надо сразу чтобы в новой книге появлялись ячейки со значениями, а так муть какая-то происходит 🙁
05 августа 2005 года
985 / / 19.09.2004
Пример именно с копированием.
iCopyList = Array(«Отчёт», «Список», «Мусор»)
iOldCountList = Application.SheetsInNewWorkbook
With Workbooks.Add
For Each iList In ThisWorkbook.Worksheets(iCopyList)
iList.Cells.Copy
iCount = iCount + 1
With .Worksheets(iCount)
.Name = iList.Name
.Cells.PasteSpecial xlPasteValues
End With
Next
End With
05 августа 2005 года
123 / / 19.04.2005
Originally posted by pashulka
Пример именно с копированием.
iCopyList = Array(«Отчёт», «Список», «Мусор»)
iOldCountList = Application.SheetsInNewWorkbook
With Workbooks.Add
For Each iList In ThisWorkbook.Worksheets(iCopyList)
iList.Cells.Copy
iCount = iCount + 1
With .Worksheets(iCount)
.Name = iList.Name
.Cells.PasteSpecial xlPasteValues
End With
Next
End With
БОЖЕСТВЕННО — ТО что нужно 🙂
08 августа 2005 года
123 / / 19.04.2005
Новый вопрос, как сделать чтобы рисунок находящийся на листе тоже кпировался, и область печати тоже.
Т.е. на новом листе нет никакой области печати. а хотелось бы оставить ту которая задана на исходнике.
08 августа 2005 года
985 / / 19.09.2004
Для того, чтобы скопировать рисунок можно использовать один из первых вариантов ***, а затем заменить формулы на значения, которые эти формулы возвращают.
***
Worksheets(1).Cells.Copy Destination:=Worksheets(2).Cells
Для того, чтобы установить нужную область печати :
Worksheets(2).PageSetup.PrintArea = Worksheets(1).PageSetup.PrintArea
10 августа 2005 года
985 / / 19.09.2004
Вот один из возможных вариантов решения Вашей задачи :
iCopyList = Array(«Отчёт», «Список», «Мусор»)
iOldCountList = Application.SheetsInNewWorkbook
With Workbooks.Add
For Each iList In ThisWorkbook.Worksheets(iCopyList)
iCount = iCount + 1
iList.Cells.Copy Destination:=.Worksheets(iCount).Cells
With .Worksheets(iCount)
.Name = iList.Name
.UsedRange.Value = iList.UsedRange.Value
.PageSetup.PrintArea = iList.PageSetup.PrintArea
End With
Next
End With
12 мая 2011 года
2 / / 12.05.2011
С областью печати понятно , а как быть с ориентацией и масштабом листа?
12 мая 2011 года
985 / / 19.09.2004
With ActiveSheet.PageSetup
.Orientation = xlLandscape ‘xlPortrait ‘Ориентация
.Zoom = 75 ‘Масштаб
End With
13 мая 2011 года
2 / / 12.05.2011
Спасибо, но столкнулся с другой проблемой:
При закрытии основной книги выскакивает сначала 2 раза — Рисунок слишком велик и будет усечен, после — Недостаточно ресурсов. Выберите меньше или закройте приложения. Как бы это обойти.
И еще вопрос как будет выглядеть код если нужно сохранить один лист в отдельный файл, а не массив листов, возможно это поможет решить эту проблему.
P.S. Книги пробывал пересоздавать заново без рисунков книгу, должного результата не получил, как я понимаю проблема в самом методе копирования.
Заранее спасибо за помощь.
13 мая 2011 года
985 / / 19.09.2004
С проблемой усечения рисунка, лично я, никогда не сталкивался, а что касается сохранения одного единственного листа, то смотрите этот топик, только с самого начала.
26 апреля 2012 года
1 / / 26.04.2012
вопрос по этому коду
Sub CommandButton1_Click()
iPrompt = «Введите имя файла»: iTitle = «Диалоговое окно»
FileName: iFileName = InputBox(iPrompt, iTitle)
If iFileName = «» Then
iPrompt = «Пора вводить имя файла»
iTitle = «Хватит дурачиться»
GoTo FileName
Else
iFullName = Application.DefaultFilePath & «\» & iFileName & «.xls»
If Dir(iFullName) <> «» Then
iPrompt = «Введите новое имя файла»
iTitle = «Подберите уникальное имя»
GoTo FileName
End If
End If
подскажите пожалуйста как сделать чтоб лист сохранялся не по умолчанию а в определённую папку. заранее спасибо
