Проблема с отменой выбора txt файла - PullRequest
0 голосов
/ 29 мая 2020

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

Если пользователь выбирает отмену, возникает ошибка из-за несоответствия типа. Я объявил переменные как VARIANT

Взгляните на код:

Sub ImportTXTFiles()
    Dim fso As Object
    Dim xlsheet As Worksheet
    Dim qt As QueryTable
    Dim txtfilesToOpen As Variant, txtfile As Variant

    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")

    txtfilesToOpen = Application.GetOpenFilename(FileFilter:="Text Files (*.txt), *.txt", _
                  MultiSelect:=True, Title:="Text Files to Open")
    If txtfilesToOpen = "False" Then
            Exit Sub
    End If
        For Each txtfile In txtfilesToOpen
                ' FINDS EXISTING WORKSHEET
                For Each xlsheet In ThisWorkbook.Worksheets
                    If xlsheet.Name = Replace(fso.GetFileName(txtfile), ".txt", "") Then
                        xlsheet.Activate
                        GoTo ImportData
                    End If
                Next xlsheet

                ' CREATES NEW WORKSHEET IF NOT FOUND
                Set xlsheet = ThisWorkbook.Worksheets.Add( _
                                     After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
                xlsheet.Name = Replace(fso.GetFileName(txtfile), ".txt", "")
                xlsheet.Activate
                GoTo ImportData

Мой вопрос в том, как я могу здесь обработать это исключение

If txtfilesToOpen = "False" Then
            Exit Sub
    End If

, если пользователь отменяет выбор, а переменные объявлены как варианты.

Заранее спасибо.

1 Ответ

2 голосов
/ 29 мая 2020

Возможно, использование этой вспомогательной функции поможет вам:

Option Explicit
Sub Test()

    Dim txtfilesToOpen As String
    txtfilesToOpen = GetFile

End Sub
Private Function GetFile() As String
    Dim fldr As FileDialog
    Set fldr = Application.FileDialog(msoFileDialogFilePicker)
    With fldr
        .Title = "Text Files to Open"
        .AllowMultiSelect = False
        If .Show <> -1 Then
            MsgBox "No file was picked. Please run the macro again."
            End
        End If
        GetFile = .SelectedItems(1)
    End With
End Function

Если пользователь не выберет файл, появится всплывающее окно MsgBox, предупреждающее пользователя, а затем завершение всей процедуры. Обратите внимание, что эта процедура работает только для одного выбранного элемента за раз. Если вам нужно выбрать более одного, рассмотрите возможность использования средства выбора папок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...