Вопрос следующего плана, возможно кто то сталкивался с подобной ситуацией.
Есть 100 листов в документе формата xlsx. В каждом листе выбран определенный диапазон. Задача: сохранить каждый выбранный диапазон в каждом листе в отдельный документ Веб-страницы (проще говорю html код для заказчика). Сделать это можно выделяя каждый лист по отдельности, выбирая необходимый диапазон и сохранять. Но это очень долго, так как листов очень много. Возможно ли как нибудь одной командой сохранить каждый диапазон на каждом листе в отдельный файл блокнота с html-кодом? Единственное что я понял, можно сохранить все листы в один файл, объединив их. Но этот вариант не подходит.
Если кто нибудь знает как это технически можно провернуть буду очень признателен. И вообще возможно ли это?
Доброго времени суток!
Вопрос следующего плана, возможно кто то сталкивался с подобной ситуацией.
Есть 100 листов в документе формата xlsx. В каждом листе выбран определенный диапазон. Задача: сохранить каждый выбранный диапазон в каждом листе в отдельный документ Веб-страницы (проще говорю html код для заказчика). Сделать это можно выделяя каждый лист по отдельности, выбирая необходимый диапазон и сохранять. Но это очень долго, так как листов очень много. Возможно ли как нибудь одной командой сохранить каждый диапазон на каждом листе в отдельный файл блокнота с html-кодом? Единственное что я понял, можно сохранить все листы в один файл, объединив их. Но этот вариант не подходит.
Если кто нибудь знает как это технически можно провернуть буду очень признателен. И вообще возможно ли это?Abraham
bmv98rus, да я понял, что через обычные команды это нереально. Проблема в том что я вовсе не соображаю в программировании, возможно кто то сталкивался с ситуацией и знает как писать код...
bmv98rus, да я понял, что через обычные команды это нереально. Проблема в том что я вовсе не соображаю в программировании, возможно кто то сталкивался с ситуацией и знает как писать код...Abraham
Abraham, Не поверите, тут таких не мало, вопрос интересно им писать или нет. Так как окончательное решение не укладывается в совет "как сделать" , и требует разработки и методики работы (какие листы обрабатывать, что если не выделен диапазон ... куда сохранть и как именовать, как часто это надо делать и делать ли именно в Excel) и обрамления всего этого дополнительными провtрками и данными, то лучше обратится в ветку Работа/Фриланс. Непосредственно само сохранение одного листа- это менее 10 строк.
Хотя может кто и возьмется ради интереса. В любом случае, думайте над вопросами методик. Как их перевести в код , подумает исполнитель.
Abraham, Не поверите, тут таких не мало, вопрос интересно им писать или нет. Так как окончательное решение не укладывается в совет "как сделать" , и требует разработки и методики работы (какие листы обрабатывать, что если не выделен диапазон ... куда сохранть и как именовать, как часто это надо делать и делать ли именно в Excel) и обрамления всего этого дополнительными провtрками и данными, то лучше обратится в ветку Работа/Фриланс. Непосредственно само сохранение одного листа- это менее 10 строк.
Хотя может кто и возьмется ради интереса. В любом случае, думайте над вопросами методик. Как их перевести в код , подумает исполнитель.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Пятница, 30.12.2016, 11:29
Sub toWeb() Dim sh As Worksheet For Each sh In ThisWorkbook.Sheets With ThisWorkbook.PublishObjects.Add(xlSourceRange, _ ThisWorkbook.Path & "\" & sh.Name & ".htm", sh.Name, "A1:D10", _ xlHtmlStatic, ThisWorkbook.Name & "_" & sh.Name, "") .Publish (True) .AutoRepublish = False End With Next sh End Sub
[/vba] Вместо "A1:D10" - поставьте свой диапазон.
Abraham, здравствуйте, так пойдет? [vba]
Код
Sub toWeb() Dim sh As Worksheet For Each sh In ThisWorkbook.Sheets With ThisWorkbook.PublishObjects.Add(xlSourceRange, _ ThisWorkbook.Path & "\" & sh.Name & ".htm", sh.Name, "A1:D10", _ xlHtmlStatic, ThisWorkbook.Name & "_" & sh.Name, "") .Publish (True) .AutoRepublish = False End With Next sh End Sub
[/vba] Вместо "A1:D10" - поставьте свой диапазон.Manyasha
Manyasha, Все получилось, только один момент, как быть в случае, если диапазон на каждом листе разный? В данной вами функции на трех листах один диапазон, а у меня он отличается немного друг от друга....
Manyasha, Все получилось, только один момент, как быть в случае, если диапазон на каждом листе разный? В данной вами функции на трех листах один диапазон, а у меня он отличается немного друг от друга....Abraham
(какие листы обрабатывать, что если не выделен диапазон ...
Я именно об этом и думал. Я б порекомендовал вам выделить область на каждом листе, как область для печати. И использовать [vba]
Код
Sub toWeb() Dim sh As Worksheet For Each sh In ThisWorkbook.Sheets With ThisWorkbook.PublishObjects.Add(xlSourceRange, _ ThisWorkbook.Path & "\" & sh.Name & ".htm", sh.Name, sh.Range("Print_Area").address, _ xlHtmlStatic, ThisWorkbook.Name & "_" & sh.Name, "") .Publish (True) .AutoRepublish = False End With Next sh End Sub
(какие листы обрабатывать, что если не выделен диапазон ...
Я именно об этом и думал. Я б порекомендовал вам выделить область на каждом листе, как область для печати. И использовать [vba]
Код
Sub toWeb() Dim sh As Worksheet For Each sh In ThisWorkbook.Sheets With ThisWorkbook.PublishObjects.Add(xlSourceRange, _ ThisWorkbook.Path & "\" & sh.Name & ".htm", sh.Name, sh.Range("Print_Area").address, _ xlHtmlStatic, ThisWorkbook.Name & "_" & sh.Name, "") .Publish (True) .AutoRepublish = False End With Next sh End Sub
ох уж эта локализация, Область_печати вместо Print_Area [vba]
Код
Sub toWeb() Dim sh As Worksheet For Each sh In ThisWorkbook.Sheets With ThisWorkbook.PublishObjects.Add(xlSourceRange, _ ThisWorkbook.Path & "\" & sh.Name & ".htm", sh.Name, sh.Range("Область_печати").address, _ xlHtmlStatic, ThisWorkbook.Name & "_" & sh.Name, "") .Publish (True) .AutoRepublish = False End With Next sh End Sub
[/vba] Проверьте в диспетчере имен (ctrl+F3) что там, после определения области печати.
Если всего два диапазона, то конечно лучше программно разбить. Но трудно предположить последовательность листов при переборе, будет ли она такая как вы думаете, а так посчитать сколько вывели и сделать для первых 50 один диапазон, а для остальных другой.
Если честно, то проще прямо в файле сделать. предварительно проверив.
Abraham,
ох уж эта локализация, Область_печати вместо Print_Area [vba]
Код
Sub toWeb() Dim sh As Worksheet For Each sh In ThisWorkbook.Sheets With ThisWorkbook.PublishObjects.Add(xlSourceRange, _ ThisWorkbook.Path & "\" & sh.Name & ".htm", sh.Name, sh.Range("Область_печати").address, _ xlHtmlStatic, ThisWorkbook.Name & "_" & sh.Name, "") .Publish (True) .AutoRepublish = False End With Next sh End Sub
[/vba] Проверьте в диспетчере имен (ctrl+F3) что там, после определения области печати.
Если всего два диапазона, то конечно лучше программно разбить. Но трудно предположить последовательность листов при переборе, будет ли она такая как вы думаете, а так посчитать сколько вывели и сделать для первых 50 один диапазон, а для остальных другой.
Если честно, то проще прямо в файле сделать. предварительно проверив.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Суббота, 31.12.2016, 00:14
как быть в случае, если диапазон на каждом листе разный?
можно вот так [vba]
Код
Sub toWeb() Dim sh As Worksheet For Each sh In ThisWorkbook.Sheets With ThisWorkbook.PublishObjects.Add(xlSourceRange, _ ThisWorkbook.Path & "\" & sh.Name & ".htm", sh.Name, sh.UsedRange.address, _ xlHtmlStatic, ThisWorkbook.Name & "_" & sh.Name, "") .Publish (True) .AutoRepublish = False End With Next sh End Sub
как быть в случае, если диапазон на каждом листе разный?
можно вот так [vba]
Код
Sub toWeb() Dim sh As Worksheet For Each sh In ThisWorkbook.Sheets With ThisWorkbook.PublishObjects.Add(xlSourceRange, _ ThisWorkbook.Path & "\" & sh.Name & ".htm", sh.Name, sh.UsedRange.address, _ xlHtmlStatic, ThisWorkbook.Name & "_" & sh.Name, "") .Publish (True) .AutoRepublish = False End With Next sh End Sub
Скорее всего вы не определили области печати, что надо сделать для каждого листа и конечно это не так просто для 100 листов. Вариант toWebPrintAreas
Если нужно вывести все данные на листе и область не больше и не меньше, то ваиант от krosav4ig для вас. toWebUsedRange
Ну или проверять какой по счету обрабатываем лист и менять область, только при этом листы естесвенно должны идти в той последовательности в которой надо.
Собственно три варианта, рабочих в приложении,
Abraham,
Скорее всего вы не определили области печати, что надо сделать для каждого листа и конечно это не так просто для 100 листов. Вариант toWebPrintAreas
Если нужно вывести все данные на листе и область не больше и не меньше, то ваиант от krosav4ig для вас. toWebUsedRange
Ну или проверять какой по счету обрабатываем лист и менять область, только при этом листы естесвенно должны идти в той последовательности в которой надо.
Собственно три варианта, рабочих в приложении,bmv98rus