Тема: Как сделать, чтобы при отмене открытия файла его имя не присваивалось в .FileName ?

Здравствуйте, все!
Не могу понять - это баг или фича:  вызываю CommonDialod с помощью ShowOpen, а дальше имя файла считывается в любом случае, даже если в диалоговом окошке нажать кнопку "отмена". Как сделать, чтобы при отмене открытия файла его имя не присваивалось в .FileName?

Re: Как сделать, чтобы при отмене открытия файла его имя не присваивалось в .FileName ?

Здравствуйте, masha!
Похоже, вы чего-то не договариваете в своем описании ситуации... Вот прекрасно работающий код:

Sub CommonDialog_Test()
    Dim fileName As String
    UserForm1.CommonDialog1.ShowOpen
    fileName = UserForm1.CommonDialog1.fileName
    MsgBox fileName
End Sub

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

Re: Как сделать, чтобы при отмене открытия файла его имя не присваивалось в .FileName ?

И еще. Не уверен, что поможет, но проверьте на всякий случай:  CancelError = False

Re: Как сделать, чтобы при отмене открытия файла его имя не присваивалось в .FileName ?

Вот мой код:

With InputFilenameDialog
    .FileName = s & "_tree" & ".txt"
    .DialogTitle = "Выберете файл "
    .Filter = "Excel WorkBook|*.xls|Text Files|*.txt|"
    .FilterIndex = 2 'which filter is default
    .ShowOpen
End With
fname = InputFilenameDialog.FileName

Получается, что в fname по любому присвоится InputFilenameDialog.FileName, даже если нажать отмену... Я вижу только один выход - не задавать имя по умолчанию, но очень хочется задать. Наверно, я чего-то не так понимаю...

Re: Как сделать, чтобы при отмене открытия файла его имя не присваивалось в .FileName ?

> masha

Sub CommonDialog_Test()
    Err.Clear
    On Error GoTo NoFile
    With UserForm1.InputFilenameDialog
        .CancelError = True
        .fileName = "s" & "_tree" & ".txt"
        .DialogTitle = "Select file"
        .Filter = "Excel WorkBook|*.xls|Text Files|*.txt|"
        .FilterIndex = 2 'which filter is default
        .ShowOpen
    End With
    Dim fname As String
    If Err = 0 Then
        fname = UserForm1.InputFilenameDialog.fileName
        MsgBox fname
    End If
NoFile:
    If Err.Number = 32755 Then
        fname = ""
        MsgBox fname
        Exit Sub
    End If
End Sub

Самое правильное, при создании темы сразу же выкладывать проблемный код и не дожидаться упражнений в остроумии со стороны участников обсуждения.

Re: Как сделать, чтобы при отмене открытия файла его имя не присваивалось в .FileName ?

Сделала всё, как вы написали. Только оно всё равно не работает. Прошла это дело в Debuger-e, там Err = 0 после .ShowOpen, даже если нажать Отмену, и имя спокойно присваивается в fname. Может, при Отмене происходит не Err, a что-нибудь другое?...

Re: Как сделать, чтобы при отмене открытия файла его имя не присваивалось в .FileName ?

> masha
Вы обратили внимание на эту строчку?
.CancelError = True

Re: Как сделать, чтобы при отмене открытия файла его имя не присваивалось в .FileName ?

Теперь обратила. :) Спасибо, LeonidSN, за проявленное терпение! Вы очень добры!!!