Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
giaber
7 / 2 / 0
Регистрация: 16.09.2014
Сообщений: 187
1

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

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

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

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

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

Скачал с форумов несколько макросов связанных с сохранением, пытался скомбинировать что-то работающее, но безуспешно. Не могли бы вы помочь? Спасибо!
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2015, 13:01
Ответы с готовыми решениями:

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

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

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

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

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

11
giaber
7 / 2 / 0
Регистрация: 16.09.2014
Сообщений: 187
10.06.2015, 20:01  [ТС] 2
Удалось самому решить 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
3229 / 1728 / 726
Регистрация: 01.12.2010
Сообщений: 3,454
10.06.2015, 21:07 3
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
giaber
7 / 2 / 0
Регистрация: 16.09.2014
Сообщений: 187
11.06.2015, 11:13  [ТС] 4
Спасибо за помощь, pashulka!
Файлы создаются в той же папке с тем же названием, но не открываются:

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

Как я понимаю ваш код прост меняет расширение файла и реальной конвертации не происходит. Видимо при "Save As" Word именно конвертирует файл. Когда я делаю для .mht файла "Save As" как .docx - размер файла уменьшается от 2 до 6 раз! Файлы, полученные вашим кодом, точно такого размера, как исходный .mht файл. Жаль... Нет ли других идей?
0
11.06.2015, 11:13
pashulka
3229 / 1728 / 726
Регистрация: 01.12.2010
Сообщений: 3,454
11.06.2015, 18:26 5
Цитата Сообщение от giaber Посмотреть сообщение
Когда я делаю для .mht файла "Save As" как .docx ...
Так запишите свои действия макрорекордером и используйте полученный результат в моём макросе.
0
giaber
7 / 2 / 0
Регистрация: 16.09.2014
Сообщений: 187
11.06.2015, 19:47  [ТС] 6
Вы может не поверите - но я пол-дня колдовал с макрорекордом и ничего не получалось! Собственно, только после этого я обратился за помощью. А прочитав ваш призыв решил ещё раз попробовать и вдруг всё вышло с первого же раза! Спасибо за пендель в нужном направлении Я рад-это первые мои ворд-макросы.

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

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
3229 / 1728 / 726
Регистрация: 01.12.2010
Сообщений: 3,454
11.06.2015, 19:47 7
Я призывал Вас не копировать весь мусор, а посмотреть какие из необязательных аргументов используются при конвертации (метод .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
giaber
7 / 2 / 0
Регистрация: 16.09.2014
Сообщений: 187
11.06.2015, 20:21  [ТС] 8
Стыдно, конечно, но я не понимаю что вы имеете ввиду и тем более не понимаю связь вашего предложения с вашим кодом. не поленитесь, прошу вас, объясните чуть подробней

Добавлено через 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
3229 / 1728 / 726
Регистрация: 01.12.2010
Сообщений: 3,454
11.06.2015, 22:41 9
1) Рекомендую всё-таки обратить внимание на мой второй вариант (пост #7), где конвертация должна происходить только с документами с расширением .mht, а не со всеми, как в Вашем варианте
2) Если отказаться от использования ChangeFileOpenDirectory, то нужно использовать не свойство .Name, а .FullName
3) У нас разные версии Word, поэтому тестировать сохранение доков с расширением .docx в более ранних версиях, не имеет смысла.
0
giaber
7 / 2 / 0
Регистрация: 16.09.2014
Сообщений: 187
12.06.2015, 05:54  [ТС] 10
Да, ваш 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
Pro_grammer
12.06.2015, 08:09
  #11

Не по теме:

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

0
giaber
7 / 2 / 0
Регистрация: 16.09.2014
Сообщений: 187
12.06.2015, 12:59  [ТС] 12
Да не, я с древних времён упёртый мозилльщик, пользуюсь приблудой UnMHT. Вчера, кстати, решил уточнить-оказывается у меня на компе 14299 mht-файлов, так что придётся дорабатывать эти макросы в макрос массовой конвертации в docx
0
12.06.2015, 12:59
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2015, 12:59

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.