Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Лист Excel в отдельный файл

482
29 июня 2005 года
crazytrain
123 / / 19.04.2005
Есть одна кнопка. По нажатию на нее надо чтобы этот лист со всеми форматами ( собственно областью печати) сохранялся в отдельный файл. Желательно чтобы имя нового файла можно было бы ввести.

Заранее спасибо.
275
29 июня 2005 года
pashulka
985 / / 19.09.2004
Если под кнопкой Вы подразумеваете элемент ActiveX, то Вы можете использовать что-то типа :

Код:
Private Sub CommandButton1_Click()

Me.Copy

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

ActiveWorkbook.SaveAs FileName:=iFullName

End Sub


Примечание :
При использовании данного метода существует вероятность, что данные в ячейках, содержимое которых превышает 255 символов, будут усечены.
482
30 июня 2005 года
crazytrain
123 / / 19.04.2005
Спасибо, это здорово, но все же немного не то.

Надо чтобы в той-же папке появлялся отдельный файл Эксель, в котором будет только один лист (нужный). А файл в котором работают так и оставался как есть.

Сейчас же получается что просто переименовываетс файл (книга) в которой сейчас работают, причем сохраняется непонятно где или надо сохранять именно вручную (т.е. перименовывается только текущий файл и все)
275
30 июня 2005 года
pashulka
985 / / 19.09.2004
При нажатии кнопки (которая представляет собой элемент управления ActiveX и располагается на ячейках рабочего листа) создаётся отдельная рабочая книга, состоящая всего из одного листа, того самого в котором Вы нажали на кнопку.

Далее, после ввода имени файла, эта рабочая книга сохраняется не неизвестно куда, а в папку по умолчанию, как правило \Мои документы\

Так что всё совпадает с Вами требованиями, за исключением папки сохранения, где я имел право свободу выбора, так как в первоначальном вопросе эта часть не обсуждалась.
482
30 июня 2005 года
crazytrain
123 / / 19.04.2005
Извините, возможно я не совсем точно сформулировал вопрос. Но нужно чтобы сохранялся только один лист( можно сказать область печати этого листа), а сохраняется вся книга. ПРичем и с макросом и с кнопокой, короче вся. Куда помещается действительно не важно :-) упор не на место расположения, а на содержание листа.
482
30 июня 2005 года
crazytrain
123 / / 19.04.2005
А все понял, я сам накосячил, извините :-)
275
30 июня 2005 года
pashulka
985 / / 19.09.2004
Лист действительно копируется вместе с кнопкой и макросом, который находится в модуле этого же листа, но это не противоречило Вашим первоначальным требованиям. Если этого нужно избежать, то можно использовать что-то вроде :

 
Код:
Private Sub CommandButton1_Click()

With Workbooks.Add(xlWBATWorksheet)
    Me.Cells.Copy Destination:=.Worksheets(1).Cells
End With

End Sub


Можно даже так, но первый пример, в основном был с прицелом на дальнейшее продолжение кода.

 
Код:
Private Sub CommandButton1_Click()

Me.Cells.Copy Destination:=Workbooks.Add(xlWBATWorksheet).Worksheets(1).Cells

End Sub
482
30 июня 2005 года
crazytrain
123 / / 19.04.2005
Ценные сведения, учту. Я решил избежать этого еще проще :-) я порсто перенес весь макрос с кнопкой на другой лист и все :-)
275
30 июня 2005 года
pashulka
985 / / 19.09.2004
Короче говоря, Вы просто оставили самый первый вариант ...
482
04 августа 2005 года
crazytrain
123 / / 19.04.2005
Цитата:
Originally posted by pashulka
Короче говоря, Вы просто оставили самый первый вариант ...



Еще один вопрос назрел, как можно скопировать несколько листов, т.е. чтобы новая книга состояла не из одного листа отдельного а из 3 скажем.

275
04 августа 2005 года
pashulka
985 / / 19.09.2004
Вариант I.
 
Код:
Worksheets(Array(1, 2, 3)).Copy


Вариант II.
 
Код:
Worksheets(Array("Отчёт", "Список", "Мусор")).Copy
482
05 августа 2005 года
crazytrain
123 / / 19.04.2005
Если так делать то копируется весь лист (так и нужно было раньше), но теперь там есть код завязанный на другие листы книги и поэтому выскакивает ошибка. Т.е. надо копировать лист без кода. Вы предлагали как сделать это раньше. Но есть еще один момент, формулы с такого листа обращаются к файлу источнику. Т.е. там в каждой ячейке вместе с формулой появляется путь к файлу. Было бы идеально копировать именно значения из ячеек. Заранее спасибо.
275
05 августа 2005 года
pashulka
985 / / 19.09.2004
Вот пример копирования, где формулы будут заменены на значения, которые они возвращают. Пример для двух рабочих листов, расположенных в одной рабочей книге, Вам нужно только изменить ссылки на об'екты.
 
Код:
Worksheets(1).Range("B1:E10").Copy
Worksheets(2).Range("G10:J19").PasteSpecial xlPasteValues
482
05 августа 2005 года
crazytrain
123 / / 19.04.2005
В том-то и проблема я не знаю как это сделать для другой книги.

Private Sub CommandButton1_Click()

Worksheets(Array("&#196;&#224;&#237;&#237;&#251;&#229;", "&#195;&#240;&#224;&#244;&#232;&#234;")).Copy
iPrompt = "&#194;&#226;&#229;&#228;&#232;&#242;&#229; &#232;&#236;&#255; &#244;&#224;&#233;&#235;&#224;": iTitle = "&#196;&#232;&#224;&#235;&#238;&#227;&#238;&#226;&#238;&#229; &#238;&#234;&#237;&#238;"

FileName: iFileName = InputBox(iPrompt, iTitle)

If iFileName = "" Then
iPrompt = "&#207;&#238;&#240;&#224; &#226;&#226;&#238;&#228;&#232;&#242;&#252; &#232;&#236;&#255; &#244;&#224;&#233;&#235;&#224;"
iTitle = "&#213;&#226;&#224;&#242;&#232;&#242; &#228;&#243;&#240;&#224;&#247;&#232;&#242;&#252;&#241;&#255;"
GoTo FileName
Else
iFullName = Application.DefaultFilePath & "\" & iFileName & ".xls"
If Dir(iFullName) <> "" Then
iPrompt = "&#194;&#226;&#229;&#228;&#232;&#242;&#229; &#237;&#238;&#226;&#238;&#229; &#232;&#236;&#255; &#244;&#224;&#233;&#235;&#224;"
iTitle = "&#207;&#238;&#228;&#225;&#229;&#240;&#232;&#242;&#229; &#243;&#237;&#232;&#234;&#224;&#235;&#252;&#237;&#238;&#229; &#232;&#236;&#255;"
GoTo FileName
End If
End If
ActiveWorkbook.SaveAs FileName:=iFullName
ActiveWorkbook.Worksheets("&#196;&#224;&#237;&#237;&#251;&#229;").Range("a1:f53").Copy
ActiveWorkbook.Worksheets("&#196;&#224;&#237;&#237;&#251;&#229;").Range("a1:f53").PasteSpecial xlPasteValues
ActiveWorkbook.Worksheets("&#195;&#240;&#224;&#244;&#232;&#234;").Range("a1:f53").Copy
ActiveWorkbook.Worksheets("&#195;&#240;&#224;&#244;&#232;&#234;").Range("a1:f53").PasteSpecial xlPasteValues

ActiveWorkbook.SaveAs FileName:=iFullName

End Sub

сделал что-то врде этого. Но так не работает.
Надо сразу чтобы в новой книге появлялись ячейки со значениями, а так муть какая-то происходит :-(
275
05 августа 2005 года
pashulka
985 / / 19.09.2004
Пример именно с копированием.
Код:
iCopyList = Array("Отчёт", "Список", "Мусор")
iOldCountList = Application.SheetsInNewWorkbook

Application.SheetsInNewWorkbook = 3

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

Application.SheetsInNewWorkbook = iOldCountList
482
05 августа 2005 года
crazytrain
123 / / 19.04.2005
Цитата:
Originally posted by pashulka
Пример именно с копированием.
Код:
iCopyList = Array("Отчёт", "Список", "Мусор")
iOldCountList = Application.SheetsInNewWorkbook

Application.SheetsInNewWorkbook = 3

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

Application.SheetsInNewWorkbook = iOldCountList




БОЖЕСТВЕННО - ТО что нужно :-)

482
08 августа 2005 года
crazytrain
123 / / 19.04.2005
Новый вопрос, как сделать чтобы рисунок находящийся на листе тоже кпировался, и область печати тоже.
Т.е. на новом листе нет никакой области печати. а хотелось бы оставить ту которая задана на исходнике.
275
08 августа 2005 года
pashulka
985 / / 19.09.2004
Для того, чтобы скопировать рисунок можно использовать один из первых вариантов ***, а затем заменить формулы на значения, которые эти формулы возвращают.
***
 
Код:
Worksheets(1).Cells.Copy Destination:=Worksheets(2).Cells


Для того, чтобы установить нужную область печати :
 
Код:
Worksheets(2).PageSetup.PrintArea = Worksheets(1).PageSetup.PrintArea
275
10 августа 2005 года
pashulka
985 / / 19.09.2004
Вот один из возможных вариантов решения Вашей задачи :

Код:
iCopyList = Array("Отчёт", "Список", "Мусор")
iOldCountList = Application.SheetsInNewWorkbook

Application.SheetsInNewWorkbook = 3

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

Application.SheetsInNewWorkbook = iOldCountList
72K
12 мая 2011 года
xnscripter
2 / / 12.05.2011
С областью печати понятно , а как быть с ориентацией и масштабом листа?
275
12 мая 2011 года
pashulka
985 / / 19.09.2004
 
Код:
With ActiveSheet.PageSetup
     .Orientation = xlLandscape 'xlPortrait 'Ориентация
     .Zoom = 75 'Масштаб
End With
72K
13 мая 2011 года
xnscripter
2 / / 12.05.2011
Спасибо, но столкнулся с другой проблемой:
При закрытии основной книги выскакивает сначала 2 раза - Рисунок слишком велик и будет усечен, после - Недостаточно ресурсов. Выберите меньше или закройте приложения. Как бы это обойти.
И еще вопрос как будет выглядеть код если нужно сохранить один лист в отдельный файл, а не массив листов, возможно это поможет решить эту проблему.

P.S. Книги пробывал пересоздавать заново без рисунков книгу, должного результата не получил, как я понимаю проблема в самом методе копирования.

Заранее спасибо за помощь.
275
13 мая 2011 года
pashulka
985 / / 19.09.2004
С проблемой усечения рисунка, лично я, никогда не сталкивался, а что касается сохранения одного единственного листа, то смотрите этот топик, только с самого начала.
82K
26 апреля 2012 года
Serval
1 / / 26.04.2012
вопрос по этому коду
Sub CommandButton1_Click()

Me.Copy

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

ActiveWorkbook.SaveAs FileName:=iFullName

End Sub

подскажите пожалуйста как сделать чтоб лист сохранялся не по умолчанию а в определённую папку.....заранее спасибо
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог