Рисунок слишком велик и будет усечен excel как убрать
Есть одна кнопка. По нажатию на нее надо чтобы этот лист со всеми форматами ( собственно областью печати) сохранялся в отдельный файл. Желательно чтобы имя нового файла можно было бы ввести.
23 ответа
Если под кнопкой Вы подразумеваете элемент 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 символов, будут усечены.
Спасибо, это здорово, но все же немного не то.
Надо чтобы в той-же папке появлялся отдельный файл Эксель, в котором будет только один лист (нужный). А файл в котором работают так и оставался как есть.
Сейчас же получается что просто переименовываетс файл (книга) в которой сейчас работают, причем сохраняется непонятно где или надо сохранять именно вручную (т.е. перименовывается только текущий файл и все)
При нажатии кнопки (которая представляет собой элемент управления ActiveX и располагается на ячейках рабочего листа) создаётся отдельная рабочая книга, состоящая всего из одного листа, того самого в котором Вы нажали на кнопку.
Далее, после ввода имени файла, эта рабочая книга сохраняется не неизвестно куда, а в папку по умолчанию, как правило \Мои документы\
Так что всё совпадает с Вами требованиями, за исключением папки сохранения, где я имел право свободу выбора, так как в первоначальном вопросе эта часть не обсуждалась.
Извините, возможно я не совсем точно сформулировал вопрос. Но нужно чтобы сохранялся только один лист( можно сказать область печати этого листа), а сохраняется вся книга. ПРичем и с макросом и с кнопокой, короче вся. Куда помещается действительно не важно :-) упор не на место расположения, а на содержание листа.Лист действительно копируется вместе с кнопкой и макросом, который находится в модуле этого же листа, но это не противоречило Вашим первоначальным требованиям. Если этого нужно избежать, то можно использовать что-то вроде :
Private Sub CommandButton1_Click()
With Workbooks.Add(xlWBATWorksheet)
Me.Cells.Copy Destination:=.Worksheets(1).Cells
End With
Можно даже так, но первый пример, в основном был с прицелом на дальнейшее продолжение кода.
Private Sub CommandButton1_Click()
Ценные сведения, учту. Я решил избежать этого еще проще :-) я порсто перенес весь макрос с кнопкой на другой лист и все :-) Короче говоря, Вы просто оставили самый первый вариант . Originally posted by pashulkaКороче говоря, Вы просто оставили самый первый вариант .
Еще один вопрос назрел, как можно скопировать несколько листов, т.е. чтобы новая книга состояла не из одного листа отдельного а из 3 скажем.
Если так делать то копируется весь лист (так и нужно было раньше), но теперь там есть код завязанный на другие листы книги и поэтому выскакивает ошибка. Т.е. надо копировать лист без кода. Вы предлагали как сделать это раньше. Но есть еще один момент, формулы с такого листа обращаются к файлу источнику. Т.е. там в каждой ячейке вместе с формулой появляется путь к файлу. Было бы идеально копировать именно значения из ячеек. Заранее спасибо. Вот пример копирования, где формулы будут заменены на значения, которые они возвращают. Пример для двух рабочих листов, расположенных в одной рабочей книге, Вам нужно только изменить ссылки на об'екты.Worksheets(1).Range("B1:E10").Copy
Worksheets(2).Range("G10:J19").PasteSpecial xlPasteValues
В том-то и проблема я не знаю как это сделать для другой книги.
Private Sub CommandButton1_Click()
FileName: iFileName = InputBox(iPrompt, iTitle)
сделал что-то врде этого. Но так не работает.
Надо сразу чтобы в новой книге появлялись ячейки со значениями, а так муть какая-то происходит :-(
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
Пример именно с копированием.
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
БОЖЕСТВЕННО - ТО что нужно :-)
Т.е. на новом листе нет никакой области печати. а хотелось бы оставить ту которая задана на исходнике. Для того, чтобы скопировать рисунок можно использовать один из первых вариантов ***, а затем заменить формулы на значения, которые эти формулы возвращают.
***
Для того, чтобы установить нужную область печати :
Вот один из возможных вариантов решения Вашей задачи :
iCopyList = Array("Отчёт", "Список", "Мусор")
iOldCountList = Application.SheetsInNewWorkbook
.Orientation = xlLandscape 'xlPortrait 'Ориентация
.Zoom = 75 'Масштаб
End With
Спасибо, но столкнулся с другой проблемой:
При закрытии основной книги выскакивает сначала 2 раза - Рисунок слишком велик и будет усечен, после - Недостаточно ресурсов. Выберите меньше или закройте приложения. Как бы это обойти.
И еще вопрос как будет выглядеть код если нужно сохранить один лист в отдельный файл, а не массив листов, возможно это поможет решить эту проблему.
P.S. Книги пробывал пересоздавать заново без рисунков книгу, должного результата не получил, как я понимаю проблема в самом методе копирования.
Заранее спасибо за помощь.
С проблемой усечения рисунка, лично я, никогда не сталкивался, а что касается сохранения одного единственного листа, то смотрите этот топик, только с самого начала.вопрос по этому коду
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
подскажите пожалуйста как сделать чтоб лист сохранялся не по умолчанию а в определённую папку. заранее спасибо
Читайте также: