Страница 1 из 1

Помогите новичку

Добавлено: 17 ноя 2009, 14:00
Pol
Как создать макрос, чтобы он сохранял таблицу Exel в двух разных каталогах (не требуя потверждения, если файл с таким именем уже существует) и затем закрывал программу.
Буду благодарен за любую подсказку.

Re: Помогите новичку

Добавлено: 17 ноя 2009, 15:27
Хыиуду
ActiveWorkbook.PublishObjects.Add(xlSourceSheet, "C:\temp\777.xls", "Лист1").Publish
ActiveWorkbook.PublishObjects.Add(xlSourceSheet, "C:\temp1\888.xls", "Лист1").Publish
Application.Quit

Для сохранения можно еще использовать Application.GetSaveAsFilename

Re: Помогите новичку

Добавлено: 22 ноя 2009, 17:25
Pol
Работает. Но сохраняются файлы с расширением .mht.
А если требуется сохранить весь файл Exel (10 рабочих листов) c теми же условиями?

Re: Помогите новичку

Добавлено: 22 ноя 2009, 18:13
VictorM

Код: Выделить всё

Sub Сохранить()
    Dim wb As Workbook, wbName As String
    iSheets = Sheets.Count
    Set wb = Excel.Application.ActiveWorkbook
    For i = 1 To iSheets
        wbName = "Лист_" & i
        wb.SaveCopyAs ("C:\Temp\" + wbName + ".xls")
    Next i
    Application.Quit
End Sub
Подсчитает листы в книге, сохранит каждый поотдельности с именем "Лист_1" и.т.д., по количеству листов и закроет рабочую книгу.

Re: Помогите новичку

Добавлено: 22 ноя 2009, 23:10
Teslenko_EA
Здравствуйте Pol.
если речь о текущей рабочей книге, подобный код будет без проблем и "вопросов" выполнять Вашу задачу

Код: Выделить всё

Sub savSheet()
Const sDir1 = "C:\Temp\", sDir2 = "C:\Temp\TWO\", sSheet = "Лист1"
    If toWB(sDir1 + sSheet + ".xls", sSheet) And toWB(sDir2 + sSheet + ".xls", sSheet) Then
        'файлы скопированы
    Else
        'ошибки при создании файлов
    End If
End Sub
Function toWB(sPath$, sName) As Boolean
On Error Resume Next
    If Len(Dir(sPath)) > 0 Then Kill sPath
    If Err.Number = 0 Then
        Sheets(sName).Copy
        ActiveWorkbook.SaveAs sPath, FileFormat:=xlNormal
        ActiveWindow.Close False
    End If
If Err.Number = 0 Then toWB = True Else Err.Clear
End Function
Евгений.

Re: Помогите новичку

Добавлено: 23 ноя 2009, 15:14
Pol
VictorM писал(а):

Код: Выделить всё

Sub Сохранить()
    Dim wb As Workbook, wbName As String
    iSheets = Sheets.Count
    Set wb = Excel.Application.ActiveWorkbook
    For i = 1 To iSheets
        wbName = "Лист_" & i
        wb.SaveCopyAs ("C:\Temp\" + wbName + ".xls")
    Next i
    Application.Quit
End Sub
Подсчитает листы в книге, сохранит каждый поотдельности с именем "Лист_1" и.т.д., по количеству листов и закроет рабочую книгу.
Действительно, сохраняет файлы "Лист_1", "Лист_2" и т.д., но все файлы одинаковые и каждый содержит все рабочие листы. Достаточно сохранить один из файлов. Возможно ли упростить?

Re: Помогите новичку

Добавлено: 23 ноя 2009, 21:04
VictorM
Как создать макрос, чтобы он сохранял таблицу Exel в двух разных каталогах
Каков вопрос - таков ответ...
Видимо я не так Вас понял, что Вы подразумеваете под словом "таблица".
Действительно, вышеопубликованный макрос сохраняет все листы рабочей книги в отдельный файл. Если же Вам нужно сохранить рабочую книгу в двух разных каталогах, то процедура будет выглядеть таким образом:

Код: Выделить всё

Private Sub My_MkDir(iPath$)
    iStart& = 1
    iPathSeparator$ = Application.PathSeparator
    iPath$ = iPath$ & _
             IIf(Right(iPath$, 1) = iPathSeparator$, "", iPathSeparator$)
    Do
        iStart& = InStr(iStart& + 1, iPath$, iPathSeparator$)
        iTempPath$ = Mid(iPath$, 1, iStart&)
        If Dir(iTempPath$, vbDirectory) = "" Then _
           MkDir iTempPath$
    Loop While iStart& <> 0
End Sub
Private Sub Call_My_MkDir()
    My_MkDir "C:\\Temp\Каталог_1\"
    My_MkDir "C:\\Temp\Каталог_2\"
End Sub
Sub СохранитьКнигу2()
    Dim wb As Workbook, wbName As String
    wbName = ActiveWorkbook.Name
    Set wb = Excel.Application.ActiveWorkbook
    Call Call_My_MkDir
    wb.SaveCopyAs ("C:\Temp\Каталог_1\" + wbName)
    wb.SaveCopyAs ("C:\Temp\Каталог_2\" + wbName)
    ActiveWorkbook.Save
    Application.Quit
End Sub
Запустите СохранитьКнигу2.
***
Процедуры My_MkDir(iPath$) и Call_My_MkDir взяты ОТСЮДА, посмотрите, там вообще много интересного и поучительного.

Re: Помогите новичку

Добавлено: 23 ноя 2009, 21:43
Teslenko_EA
Здравствуйте VictorM.
мне кажется Вы ошиблись "чтобы он сохранял таблицу Exel в двух разных каталогах" похоже в этом контексте, таблицей автор называл Лист документа Excel. А может я ошибаюсь, угадать тяжело. :confused:
Евгений.

Re: Помогите новичку

Добавлено: 23 ноя 2009, 22:06
VictorM
Здравствуйте Евгений.
Вы правы
угадать тяжело
В любом случае сейчас у автора топика есть всевозможные варианты сохранения, пусть выбирает)
Виктор.