Откройте книгу с помощью FileDialog и управляйте ею в Excel VBA.

Я изучаю, как использовать макросы Excel, и я нашел этот код:

Dim fd As Office.FileDialog

Set fd = Application.FileDialog(msoFileDialogFilePicker)

With fd

    .AllowMultiSelect = False
    .Title = "Please select the file to kill his non colored cells"
    .Filters.Add "Excel", "*.xls"
    .Filters.Add "All", "*.*"

    If .Show = True Then
        txtFileName = .SelectedItems(1)
    End If

End With

Этот код открывает FileDialog. Как я могу открыть выбранный файл Excel, не перезаписывая ранее открытый?


person user3576866    schedule 06.08.2014    source источник
comment
Что вы подразумеваете под без перезаписи ранее открытого? Этот код сохраняет только путь к выбранному файлу. В любом случае, если вы открываете файл с помощью CTRL + O, вы не перезаписываете файл. Пожалуйста, уточните свой вопрос.   -  person lowak    schedule 06.08.2014
comment
да, этот код просто сохраняет путь, но я хочу открыть выбранный файл. И если я снова запущу макрос, он должен открыть файл excel в новой книге.   -  person user3576866    schedule 06.08.2014


Ответы (2)


Спасибо, Фрэнк. Я понял идею. Вот рабочий код.

Option Explicit
Private Sub CommandButton1_Click()

  Dim directory As String, fileName As String, sheet As Worksheet, total As Integer
  Dim fd As Office.FileDialog

  Set fd = Application.FileDialog(msoFileDialogFilePicker)

  With fd
    .AllowMultiSelect = False
    .Title = "Please select the file."
    .Filters.Clear
    .Filters.Add "Excel 2003", "*.xls?"

    If .Show = True Then
      fileName = Dir(.SelectedItems(1))

    End If
  End With

  Application.ScreenUpdating = False
  Application.DisplayAlerts = False

  Workbooks.Open (fileName)

  For Each sheet In Workbooks(fileName).Worksheets
    total = Workbooks("import-sheets.xlsm").Worksheets.Count
    Workbooks(fileName).Worksheets(sheet.Name).Copy _
        after:=Workbooks("import-sheets.xlsm").Worksheets(total)
  Next sheet

  Workbooks(fileName).Close

  Application.ScreenUpdating = True
  Application.DisplayAlerts = True

End Sub
person user3576866    schedule 07.08.2014

Если я неправильно понял ваш вопрос, вы можете просто открыть файл только для чтения. Вот простой пример, без всяких проверок.

Чтобы получить путь к файлу от пользователя, используйте эту функцию:

Private Function get_user_specified_filepath() As String
    'or use the other code example here.
    Dim fd As Office.FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    fd.AllowMultiSelect = False
    fd.Title = "Please select the file."
    get_user_specified_filepath = fd.SelectedItems(1)
End Function

Затем просто откройте файл только для чтения и назначьте его переменной:

dim wb as workbook
set wb = Workbooks.Open(get_user_specified_filepath(), ReadOnly:=True)
person Frank    schedule 06.08.2014
comment
Отсутствует инструкция для отображения FileDialog: fd.Show - person Alex; 21.02.2018
comment
Не забудьте уничтожить переменную fd, используя: Установите fd = Nothing в последней строке функции, а также wb. - person Marcus Poli; 06.05.2021