Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426

Файлы mht сохранить как docx

06.06.2015, 13:01. Показов 3638. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте !
Очень нужны такие вот 2 макроса (Word 2007):

1. В Word-e открыты несколько документов формата mht. Нужен макрос, который сохранит эти документы с тем же названием в формате docx в те же директории, в которых находятся оригинальные mht файлы и закроет документ(ы).

2. В Word-e открыт документ формата mht. Нужен макрос, который сохранит выделеную мышкой часть документа с тем же названием в формате docx в ту же директорию, в которой находится оригинальный mht файл и закроет документ(ы).

Скачал с форумов несколько макросов связанных с сохранением, пытался скомбинировать что-то работающее, но безуспешно. Не могли бы вы помочь? Спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.06.2015, 13:01
Ответы с готовыми решениями:

Конвертация MHT в DOCX - пакетно не получается
Здравствуйте! За годы у меня на компе накопилось почти 15 тысяч файлов в формате mht. После конвертации в Вордовский docx файлы...

Макрос на сохранение двух листов эксель в отдельные файлы mht
Здравствуйте, как сделать что бы эксель 2003 сохранял выбранные листы (Лист1 и Лист2) в отдельные файлы mht при нажатии Command Button? ...

Как во все doc и docx файлы текущего каталога добавить свою строку в начало файла?
Требуется в несколько тысяч документов Word добавить строку в начало файла. В идеале, чтобы опционально можно было добавлять не только в...

11
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
10.06.2015, 20:01  [ТС]
Удалось самому решить 2ю задачу. Вот макрос, уродливый конечно, но работает:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub CopyFromMhtAndSaveSelectionAsDocx()
' сохраняет как Word-документ выделеный в открытом .mht-файле блок (включая рисунки), 
' папка сохранения и название те же что у MHT файла
 
docpath = ActiveDocument.Path ' путь MHT файла
docname = Left(ActiveDocument.Name, Len(ActiveDocument.Name) - 3)' название MHT файла без расширения (точка остаётся)
 
Selection.Copy ' копируем нужное из MHT файла
ActiveWindow.Close ' закрываем  MHT файл, так как Word не допускает сохранение с названием открытого файла (у меня так)
 
Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0 ' создаём новый Word-документ
Selection.PasteAndFormat (wdPasteDefault) ' вставка скопированного в новый документ
 
ChangeFileOpenDirectory docpath ' задаём путь для сохранения
' сохраняем с именем docname и прибавлением расширения "docx":
ActiveDocument.SaveAs FileName:=docname & "docx", FileFormat:= _
wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
:=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False
    
ActiveWindow.Close ' закрываем  "docx" файл
   
End Sub
С первой задачкой пока никак не могу справиться - так что просьба о помощи остаётся актуальной
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
10.06.2015, 21:07
Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub SaveHTMLtoDoc()
    Dim iCount%, objDoc As Word.Document
    For iCount = Documents.Count To 1 Step -1
        Set objDoc = Documents(iCount)
        If LCase(objDoc.Name) Like "*.mht" Then
           objDoc.SaveAs Replace(objDoc.FullName, ".mht", ".docx")
           objDoc.Close 'False
        End If
    Next
End Sub
P.S. Если существует вероятность, что текст ".mht" может встречаться более одного раза, то можно просто отбросить последние три символа в имени файла и полученный результат об'единить (& или +) с "docx"
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
11.06.2015, 11:13  [ТС]
Спасибо за помощь, pashulka!
Файлы создаются в той же папке с тем же названием, но не открываются:

"Не удаётся открыть файл из-за ошибок его содержимого"

Как я понимаю ваш код прост меняет расширение файла и реальной конвертации не происходит. Видимо при "Save As" Word именно конвертирует файл. Когда я делаю для .mht файла "Save As" как .docx - размер файла уменьшается от 2 до 6 раз! Файлы, полученные вашим кодом, точно такого размера, как исходный .mht файл. Жаль... Нет ли других идей?
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
11.06.2015, 18:26
Цитата Сообщение от giaber Посмотреть сообщение
Когда я делаю для .mht файла "Save As" как .docx ...
Так запишите свои действия макрорекордером и используйте полученный результат в моём макросе.
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
11.06.2015, 19:47  [ТС]
Вы может не поверите - но я пол-дня колдовал с макрорекордом и ничего не получалось! Собственно, только после этого я обратился за помощью. А прочитав ваш призыв решил ещё раз попробовать и вдруг всё вышло с первого же раза! Спасибо за пендель в нужном направлении Я рад-это первые мои ворд-макросы.

Конечно, коряво, но в итоге работает:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub SaveAllOpenedMhtAsDocx()
 
For i = Documents.Count To 1 Step -1
 docpath = ActiveDocument.Path
 docname = Left(ActiveDocument.Name, Len(ActiveDocument.Name) - 3) & "docx"
 
 ChangeFileOpenDirectory docpath
 ActiveDocument.SaveAs FileName:=docname, FileFormat:= _
 wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
 :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
 :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
 SaveAsAOCELetter:=False
 ActiveWindow.Close
Next
 
End Sub
Добавлено через 11 минут
А что, видимо я один сохраняю сайты в .mht файлах? Ну, судя по отсутствию коментов в топике. у меня их больше тысячи скопилось
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
11.06.2015, 19:47
Я призывал Вас не копировать весь мусор, а посмотреть какие из необязательных аргументов используются при конвертации (метод .SaveAs)

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub SaveHTMLtoDoc()
    Dim iCount%, objDoc As Word.Document
    For iCount = Documents.Count To 1 Step -1
        Set objDoc = Documents(iCount)
        If LCase(objDoc.Name) Like "*.mht" Then
           objDoc.SaveAs Replace(objDoc.FullName, ".mht", ".docx"), wdFormatXMLDocument
           objDoc.Close 'False
        End If
    Next
End Sub
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
11.06.2015, 20:21  [ТС]
Стыдно, конечно, но я не понимаю что вы имеете ввиду и тем более не понимаю связь вашего предложения с вашим кодом. не поленитесь, прошу вас, объясните чуть подробней

Добавлено через 22 минуты
Вот что-то в этом роде вы имели ввиду?
Visual Basic
1
2
3
4
5
6
7
Sub SaveAllOpenedMhtAsDocx2()
 For i = Documents.Count To 1 Step -1
      docname = Left(ActiveDocument.Name, Len(ActiveDocument.Name) - 3) & "docx"
      ActiveDocument.SaveAs docname, wdFormatXMLDocument
      ActiveWindow.Close
 Next
End Sub
такое работает, но я не понимаю почему у меня не работает ваш код - ведь вроде по сути одно и то же. Или нет? А у вас ваш код работает?
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
11.06.2015, 22:41
1) Рекомендую всё-таки обратить внимание на мой второй вариант (пост #7), где конвертация должна происходить только с документами с расширением .mht, а не со всеми, как в Вашем варианте
2) Если отказаться от использования ChangeFileOpenDirectory, то нужно использовать не свойство .Name, а .FullName
3) У нас разные версии Word, поэтому тестировать сохранение доков с расширением .docx в более ранних версиях, не имеет смысла.
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
12.06.2015, 05:54  [ТС]
Да, ваш 2й вариант прекрасно работает! Я был невнимателен-не заметил добавления "wdFormatXMLDocument"

Возьму его на вооружение. Спасибо большое!

PS
Мой вариант недоделан-без указания путей накладки выходят. Вроде вот так работает нормально:
Visual Basic
1
2
3
4
5
6
7
8
9
Sub SaveAllOpenedMhtAsDocx()
For i = Documents.Count To 1 Step -1
    docpath = ActiveDocument.Path ' путь MHT файла
    docname = Left(ActiveDocument.Name, Len(ActiveDocument.Name) - 3) & "docx"
    ChangeFileOpenDirectory docpath
    ActiveDocument.SaveAs docname, wdFormatXMLDocument
    ActiveWindow.Close
Next i
End Sub
0
12.06.2015, 08:09

Не по теме:

Цитата Сообщение от giaber Посмотреть сообщение
А что, видимо я один сохраняю сайты в .mht файлах?
Тут всё ещё сложнее. Вы видимо из тех, кто не смотря ни на что, используют Internet Explorer или наоборот, из 1% бунтарей, использующих Оперу

0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
12.06.2015, 12:59  [ТС]
Да не, я с древних времён упёртый мозилльщик, пользуюсь приблудой UnMHT. Вчера, кстати, решил уточнить-оказывается у меня на компе 14299 mht-файлов, так что придётся дорабатывать эти макросы в макрос массовой конвертации в docx
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.06.2015, 12:59
Помогаю со студенческими работами здесь

VBA word не удается сохранить файл в docx
здравствуйте. office 2016, но по-умолчанию из vba сохраняет в doc, если не дай бог задать имя в docx, при попытке открыть файл руками пишет...

Как сохранить *.htm в *.mht из VB?
В процессе выполнения создается HTML с картинками - как программно сохранить его в виде *.MHT ?

как сделать MHT файлы?
Здравствуйте! Делаю электронный учебник через html. Прописывать теги в таком большом количестве дико долго, вот слышала что можно делать...

Как сохранить Word файл (docx) в БД SQL Server
Делаю БД для хранения docx файлов БД SQL MS SERVER 2005 Как вставить в таблицу docx Помогите пожалуйста!!!

Как сохранить текст из RichTextBox в файл doc или docx?
Всем привет! Как сохранить текст из RichTextBox в файл doc или docx?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru