Добрый. Помогите доработать код VBA. Мне нужно сохранить лист Exel в .docx. Возникло несколько проблем. Выскакивает окно с вопросом сохранить ли книгу Exel сохранять ее не надо, хочется что бы окно не выскакивало. И еще в Ворде все выглядит так как на Screenshot_2.jpg а нужно что бы было как на Screenshot_3.jpg. Еще заметил что текст копируется как таблица. Хочется что бы не таблицей копировалось а просто как текст. Так же поля надо настроить лев:3 верх:2 низ:2 прав:1
Я в макросах плохо разбираюсь и этот код собрал из того что нашел в интернете если не сложно то предлагайте свои более мудрые варианты)
[vba]
Код
Sub save_As_Word_3() Application.ScreenUpdating = False Dim curWb As Workbook, newWb As Workbook, wdApp As Object, wdDoc As Object, folderName As String folderName = createFolder("Рапорт", ThisWorkbook.Path) ' Текущий файл Set curWb = ThisWorkbook ' Новая копия Workbooks.Add Set newWb = ActiveWorkbook
' Копируем все ячейки в новую книгу - значения, форматы curWb.Sheets("Рапорт").Cells.Copy With newWb.ActiveSheet.Cells .PasteSpecial xlPasteValues .PasteSpecial xlPasteFormats Range("A1").Select End With
' Имя сохранения из ячейки B1 saveName = curWb.Sheets("Информация").Range("B1")
' Создаём документ Word Set wdApp = CreateObject("Word.Application") wdApp.Documents.Add Set wdDoc = wdApp.ActiveDocument ' С копии листа Учсуд скопируем используемый диапазон ActiveSheet.UsedRange.Copy wdDoc.Range.Paste ' Word'e другая модель сохранения, сначала перейдем в папку wdApp.ChangeFileOpenDirectory folderName ' Сохраним wdDoc.SaveAs Filename:=saveName & ".docx", FileFormat:=wdFormatXMLDocument
' К закрытию все причешем Application.CutCopyMode = False wdDoc.Close wdApp.Quit newWb.Close Application.ScreenUpdating = True End Sub
' Проверить (и создать при необходимости папку, вернуть путь Function createFolder(folderName As String, Optional folderPath As String = "") As String Dim fso As Object, folderFullPath As String If folderPath = "" Then folderPath = ThisWorkbook.Path folderFullPath = folderPath & "\" & folderName & "\" Set fso = CreateObject("scripting.filesystemobject")
If Not fso.FolderExists(folderFullPath) Then fso.createFolder (folderFullPath) End If createFolder = folderFullPath End Function
[/vba]
Добрый. Помогите доработать код VBA. Мне нужно сохранить лист Exel в .docx. Возникло несколько проблем. Выскакивает окно с вопросом сохранить ли книгу Exel сохранять ее не надо, хочется что бы окно не выскакивало. И еще в Ворде все выглядит так как на Screenshot_2.jpg а нужно что бы было как на Screenshot_3.jpg. Еще заметил что текст копируется как таблица. Хочется что бы не таблицей копировалось а просто как текст. Так же поля надо настроить лев:3 верх:2 низ:2 прав:1
Я в макросах плохо разбираюсь и этот код собрал из того что нашел в интернете если не сложно то предлагайте свои более мудрые варианты)
[vba]
Код
Sub save_As_Word_3() Application.ScreenUpdating = False Dim curWb As Workbook, newWb As Workbook, wdApp As Object, wdDoc As Object, folderName As String folderName = createFolder("Рапорт", ThisWorkbook.Path) ' Текущий файл Set curWb = ThisWorkbook ' Новая копия Workbooks.Add Set newWb = ActiveWorkbook
' Копируем все ячейки в новую книгу - значения, форматы curWb.Sheets("Рапорт").Cells.Copy With newWb.ActiveSheet.Cells .PasteSpecial xlPasteValues .PasteSpecial xlPasteFormats Range("A1").Select End With
' Имя сохранения из ячейки B1 saveName = curWb.Sheets("Информация").Range("B1")
' Создаём документ Word Set wdApp = CreateObject("Word.Application") wdApp.Documents.Add Set wdDoc = wdApp.ActiveDocument ' С копии листа Учсуд скопируем используемый диапазон ActiveSheet.UsedRange.Copy wdDoc.Range.Paste ' Word'e другая модель сохранения, сначала перейдем в папку wdApp.ChangeFileOpenDirectory folderName ' Сохраним wdDoc.SaveAs Filename:=saveName & ".docx", FileFormat:=wdFormatXMLDocument
' К закрытию все причешем Application.CutCopyMode = False wdDoc.Close wdApp.Quit newWb.Close Application.ScreenUpdating = True End Sub
' Проверить (и создать при необходимости папку, вернуть путь Function createFolder(folderName As String, Optional folderPath As String = "") As String Dim fso As Object, folderFullPath As String If folderPath = "" Then folderPath = ThisWorkbook.Path folderFullPath = folderPath & "\" & folderName & "\" Set fso = CreateObject("scripting.filesystemobject")
If Not fso.FolderExists(folderFullPath) Then fso.createFolder (folderFullPath) End If createFolder = folderFullPath End Function
Otradnoe_4D, а для чего Вы создаете новую книгу Excel?
У процедуры Close есть параметры, первый из которых как раз позволяет обойтись без сохранения:
Код
newWb.Close False
Чтобы вставить не таблицей, а текстом лучше вручную формировать документ. Логично было бы попробовать PasteSpecial DataType:=2, но у Вас там объединение ячеек, и по-крайней мере у меня текст вставляется то количество раз, сколько объединенных ячеек.
Otradnoe_4D, а для чего Вы создаете новую книгу Excel?
У процедуры Close есть параметры, первый из которых как раз позволяет обойтись без сохранения:
Код
newWb.Close False
Чтобы вставить не таблицей, а текстом лучше вручную формировать документ. Логично было бы попробовать PasteSpecial DataType:=2, но у Вас там объединение ячеек, и по-крайней мере у меня текст вставляется то количество раз, сколько объединенных ячеек.iMrTidy
Вышенаписанное мной не является истиной, но лишь моя точка зрения, которая скорее всего ошибочна.
Otradnoe_4D, а для чего Вы создаете новую книгу Excel?
Не знаю))) Такой код был уже... я же без понятия что и как делать))) Если вам не трудно то исправьте так как правильно будет. В прицепе я сделал так как вы написали и окно о сохранение пропало.
Otradnoe_4D, а для чего Вы создаете новую книгу Excel?
Не знаю))) Такой код был уже... я же без понятия что и как делать))) Если вам не трудно то исправьте так как правильно будет. В прицепе я сделал так как вы написали и окно о сохранение пропало.Otradnoe_4D
Не знаю))) Такой код был уже... я же без понятия что и как делать)))
Тогда Вам лучше обратиться в раздел Работа.
А то получается: - Я на гитаре играть не умею, только вот научился за нижнюю струну дергать, но мне нужно сочинить красивую мелодию. Сделайте пожалуйста.
Не знаю))) Такой код был уже... я же без понятия что и как делать)))
Тогда Вам лучше обратиться в раздел Работа.
А то получается: - Я на гитаре играть не умею, только вот научился за нижнюю струну дергать, но мне нужно сочинить красивую мелодию. Сделайте пожалуйста.iMrTidy
Вышенаписанное мной не является истиной, но лишь моя точка зрения, которая скорее всего ошибочна.
Лично у меня на Радикал отображается всё, что угодно, только не скриншоты. Прикладывайте все файлы к сообщениям.
iMrTidy, для оформления кода используйте кнопку # ([vba][code]), а не fx ([code]) И да, не спешите посылать ТС в платный раздел, возможно, найдутся желающие потренироваться
Лично у меня на Радикал отображается всё, что угодно, только не скриншоты. Прикладывайте все файлы к сообщениям.
iMrTidy, для оформления кода используйте кнопку # ([vba][code]), а не fx ([code]) И да, не спешите посылать ТС в платный раздел, возможно, найдутся желающие потренироваться Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816