Игорь, попробовал вручную сохранить в Word файл mht как html - на выходе Word-овский html, весьма своеобразный, в общем Word, как конвертер, не годится.
Нагуглил примерно такой скрипт (20-23 строки - то, что сам добавил - часть отвечающую за сохранение в htm)..., но проблема в том, что после открытия файла mht в окне IE, окно IE видимо перестает быть активным (хотя и остается на экране) и команды-клавишы по сохранению файла летят в другие окна (в проводник, например). Подскажите, как сделать снова активным окно IE и те ли команды я ему передаю?...
Код
Set sh = CreateObject("WScript.Shell")
Set ie = CreateObject("InternetExplorer.Application")
ie.visible=True
Set fso = CreateObject("Scripting.FileSystemObject")
Set outf = fso.CreateTextFile("convert.log")
Set fld = fso.GetFolder(".")
For Each fi In fld.Files
If UCase(Right(fi, 4)) = ".MHT" Then
ie.navigate(fi)
i1=InStrRev(fi, ".")
i2=InStrRev(fi, " ", i1)
nfi = Mid(fi, i2+1, i1 - i2 - 1)
Do While ie.busy
WScript.Sleep 100
Loop
sh.SendKeys("{F10}{Down 5}{Enter}" & nfi & "{Enter}")
Do While ie.busy
WScript.Sleep 100
Loop
sh.SendKeys("{F10}{Down 8}{Enter}" & nfi & "{Tab}{Down 2}{Enter 2}")
Do While ie.busy
WScript.Sleep 100
Loop
outf.WriteLine(fi & " saved as " & nfi & ".htm")
End If
Next
Set fld = Nothing
outf.close
Set outf = Nothing
Set fso = Nothing
ie.quit
Set ie = Nothing
Set sh = Nothing
Уважаемые форумчане, возникла необходимость пересохранить тучу файлов *.mht в формате *.html. Есть макрос, считывающий построчно содержимое файлов и, в зависимости от начинки строки, собирающий ФИО клиентов в таблицу. Не было проблем, пока файлы были небольшие и вне зависимости от расширения (*.mht или *.html) имели текстовое содержимое. Теперь же, файлы *.mht выросли и, будучи веб-архивами, содержат в себе архив и считывание их построчно теряет смысл (в строках - абра-кадабра)). Как выход - пересохранять все файлы *.mht в формате *.html, вызывая в макросе IE. Буду благодарен за вариант решения этой задачи (возможно, будут другие идеи...).
Спасибо за помощь! Сделал тестовый макрос в 3 строки: 1-я - Application.DisplayAlerts = False, затем 2-я - Workbooks.Open <кривой файл>, 3-я - Application.DisplayAlerts = True, но при выполнении все равно выскакивает та же ошибка - error '1004' - method Open of object Workbooks failed. Макрос прерывается на строке Открытия файла (подсвечивается желтым), но при наведении курсора мыши на 1-ю строку с командой Application.DisplayAlerts = False, подсвечивается значение True, непонятно..., вроде как должно остаться False, ведь макрос до конца не доработал... Возможно, заблудился в трех соснах..., буду признателен, если поможете найти дорогу
Добрый день знатокам! Есть макрос, запускаемый из файла Итог, собирающий отчеты (несколько строк) из нескольких файлов Excel (известна папка куда они складываются, макрос по очереди открывает файлы из папки и добавляет их содержимое в один список). С некоторых пор возникла следующая проблема - некоторые исходные файлы-отчеты кривые и при открытии такого файла командой Workbook.Open макрос вываливается с ошибкой - Method Open of object Workbooks failed. Приходится вручную открывать кривой файл (при открытии - сообщение что содержимое файла повреждено и предложение исправить ситуацию - Да/Нет), и согласившись с исправлениями пересохранять. Почему файлы кривые пока не разобрался, какой-либо закономерности на первый взгляд не обнаружил. Возможно ли как-то выправить положение?... Может у команды Workbook.Open есть хитрые параметры, позволяющие обойти эту ошибку? и принудительно согласиться с предложенными исправлениями и все же открыть кривой файл? Буду очень благодарен за помощь в решении/обсуждении этого вопроса.
Напрашивается вариант с двумя сводными - в одной вычисляемое поле считает План/Факт, в другой Факт/План, но начальству надо, чтобы строки с показателями шли в определенном порядке, а показатели перемешаны, поэтому этот вариант не подходит - сводная должна быть одна. Так же не подходит вариант с заполнением ячеек листа сбоку от сводной. Один раз это сделать можно, но учитывая, что сводная будет раскрываться до 3-х уровней вложения, писать макрос, пересчитывающий эти ячейки, пока рука не поднимается..., хочется это повесить на саму сводную. Подобная задача возникает, когда в одной таблице надо отразить выполнение показателей двух типов - привычного Факт/План (доходы и пр.) и менее распространенного, когда Плановое значение отражает некий предел (например, доля неисправных автомобилей в автопарке) и чем меньше Факт, тем лучше, а выполнение показателей данного типа считается как План/Факт. Может кто-то уже сталкивался с подобным?...
Вновь вопрос к уважаемым знатокам... Во вложенном файле пример сводной, требуется чтобы по одному показателю (1) % выполнения считался как Факт/План, а по другому (2) как План/Факт. Приведена формула вычисляемого поля. Проблема в том, что для Явных строк исходной таблицы условие в вычисляемом поле выполняется, а для строк формируемых самой сводной (агрегирование по полю Код) условие не выполняется, в результате чего возникает абсурдная картина - вложенные строки считаются по одной формуле, а агрегация по другой. Видимо, для строк формируемых сводной Нельзя использовать подобные условия в вычисляемых полях, тогда как быть, к чему зацепиться?...
Подытожим... Насколько понял принявших участие в обсуждении, для скрытия нужного поля-столбца сводной, единственным выходом будет скрывать, содержащий это поле, столбец листа. Возможен вариант и с удалением/повторным добавлением поля, но он требует восстановления форматирования ячеек поля. Если других вариантов все же нет, то всем спасибо, а Биллу Гейтсу пожелание, все же реализовать в сводных скрытие/отображение полей без потери форматирования ячеек..., Ау-у-у, Билл!...
Спасибо, Sanja, но, как я уже писал выше, хочется узнать есть ли другой способ?... Этот - не скрытие столбца сводной как таковое, а удаление..., и повторное отображение через добавление, с потерей форматирования ячеек, заголовка и т.д... Конечно это лучше, чем ничего (можно и форматирование каждый раз восстанавливать), но, повторюсь - Неужели нет ничего изящнее?... вроде бы Скрыть/Отобразить, что проще ?...
Что-то этот способ не очень... По факту это не скрытие столбца сводной, а удаление..., если надо вновь отобразить столбец, то только через добавление столбца, а это нарушение форматирования ячеек, заголовка и т.д... Неужели нет ничего изящнее этого?... вроде бы Скрыть/Отобразить, что проще ?...
Обращаюсь к уважаемым знатокам, в сводной таблице требуется периодически из макроса скрывать какой-либо из столцов Канал_N (желтым шрифтом), подскажите, пожалуйста, каким образом это реализовать? Пока сделал скрытие ВСЕХ Каналов по "+" через группировку столбцов, но хочется чтобы отрабатывал макрос, например, по значению ячейки А1: если А1=1, то пропадает Канал1, если равно 2 - канал 1 появляется, но пропадает Канал2 и т.д. Просто скрывать столбцы листа через макрос не подходит, так как столбцы Каналы отображаются в каждом месяце и придется еще учитывать за сколько месяцев данные в сводной, чтобы скрыть необходимые столбцы на листе. Возможно ли просто скрывать/отображать нужный столбец самой сводной? К сожалению не получается загрузить файл с примером, пишет - Ошибка сохранения файла...