Предлагать сохранить как файл doalog при сохранении рабочих листов в виде файлов csv

У меня есть следующий код для сохранения моих рабочих листов в виде CSV-файлов в папку, в которой сохранена рабочая книга. Как мне изменить это, чтобы открыть диалоговое окно «Сохранить как», чтобы я мог выбрать, где я хочу сохранить?

Чтобы быть более конкретным, я хочу изменить код, чтобы можно было указать только путь, по которому можно сохранить все файлы. Я не ищу сохранения для каждого рабочего листа.

Sub SaveOnlyCSVsThatAreNeeded()
Dim ws As Worksheet, newWb As Workbook

Application.ScreenUpdating = False
For Each ws In Sheets(Array("01 - Currencies", ..."14 - User Defined Fields"))
    ws.Copy
    Set newWb = ActiveWorkbook
    With newWb
      .SaveAs ws.Name, xlCSV
      .Close (False)
    End With
Next ws
Application.ScreenUpdating = True

End Sub

Я заменил все это средством выбора папок, чтобы упростить его. Выложил обновленный код. Теперь я получаю код ошибки 9 — нижний индекс вне допустимого диапазона.

Sub SaveOnlyCSVsThatAreNeeded()
Dim ws As Worksheet, newWb As Workbook
Dim pathh As Variant

Dim FolderName As String

With Application.FileDialog(msoFileDialogFolderPicker)
    .AllowMultiSelect = False
    If .Show = -1 Then
        FolderName = .SelectedItems(1)
    End If
End With

pathh = FolderName

Application.ScreenUpdating = False
For Each ws In Sheets(Array("01 - Currencies", "02 - .....14 - User Defined Fields"))
    ws.Copy
    Set newWb = ActiveWorkbook
    With newWb
      .SaveAs pathh.path & "\" & ws.Name, xlCSV
      .Close (False)
    End With
Next ws
Application.ScreenUpdating = True

End Sub

person user1266515    schedule 25.01.2016    source источник


Ответы (2)


Используйте следующий код, чтобы отобразить диалоговое окно «Сохранить как»:

pathh = Application.GetSaveAsFilename( _
            FileFilter:="CSV Files (*.csv), *.csv", _
            Title:="Save all spreadsheets", _
            InitialFileName:=filenamestring)

Ваше здоровье

person nbayly    schedule 25.01.2016
comment
Я думаю, я должен перефразировать. Я хочу изменить код, чтобы иметь возможность указать только путь, по которому можно сохранить все файлы. Я не ищу сохранения, как каждый раз для каждого рабочего листа. - person user1266515; 25.01.2016
comment
Вам нужно будет закодировать форму выбора папки. Я уверен, что для этого уже созданы коды, которые вы можете найти. В качестве альтернативы с помощью Application.GetSaveAsFilename вы можете предоставить ему такие параметры, как InitialFilename. Затем пользователь может просто выбрать папку, как в обычном Save As диалоге, и выполнить свои требования. Может это не решение? msdn.microsoft.com/en-us/library/office/ff195734. документация по команде aspx. - person nbayly; 25.01.2016
comment
Хорошо, я разместил измененный код... но теперь мне нужно указать имя файла, а не просто выбрать путь. Что мне нужно настроить, чтобы исправить это? - person user1266515; 25.01.2016
comment
Вы должны установить значение имени файла, используя значение InitialFilename в файле Application.GetSaveAsFilename. Отредактированный ответ для дальнейшего представления. - person nbayly; 25.01.2016
comment
nbayly... Я думаю, это имеет смысл.. но это все еще заставляет меня указывать имя файла. Я не могу указать одно имя файла, так как пытаюсь сохранить несколько электронных таблиц в виде файлов CSV, сохраняя их имена за один раз. - person user1266515; 25.01.2016
comment
Да, но это имя файла не должно быть статическим значением. Вы можете использовать строковую переменную, как я показал, где вы можете определить каждое имя из предыдущего имени документа или из чего угодно. Просто заполните имя переменной перед вызовом диалогового окна «Сохранить как», и имя файла будет автоматически заполнено тем, что вы хотите. Надеюсь это поможет. - person nbayly; 25.01.2016
comment
Хорошо, я заменил все это средством выбора папок, чтобы упростить его. Выложил обновленный код. Теперь я получаю код ошибки 9 — нижний индекс вне допустимого диапазона - person user1266515; 25.01.2016

Команда для сохранения диалогового окна в VB:

Application.GetSaveAsFilename
person Rafaa    schedule 25.01.2016