MyTetra Share
Делитесь знаниями!
Указание на файл в процессе выполнения макроса
Время создания: 16.03.2019 23:43
Текстовые метки: Диалоги
Раздел: Разные закладки - VBA
Запись: xintrea/mytetra_db_adgaver_new/master/base/15128293749deqdesmrn/text.html на raw.githubusercontent.com

Робот еще не может заменить человека полностью, поэтому бывают ситуации, когда человеку нужно вносить какие-то корректировки прямо в процесс выполнения макроса. Как это сделать?

Представим ситуацию, когда макрос в процессе своего выполнения использует какой-то файл, который либо называется всё время по-разному, либо лежит всё время в разных папках. Что делать? Прописать заранее его в макрос в такой ситуации мы не можем, а переименовывать каждый раз или переписывать путь в теле макроса лень или просто невозможно по каким-либо причинам.

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

Чтобы вы понимали, чего от вас ожидается, сначала лучше вывести msgbox, например, такой:

   MsgBox ("Выберите нужный файл")

Затем нужно запомнить выбранный файл. Точнее в переменную помещается полное имя файла, т.е. включая весь путь:

   bfName = Application.GetOpenFilename()

И после этого нам остается только открыть его:

   Workbooks.Open(bfName)

В принципе, после того, как вы получили полное имя нужного файла, вы можете и не открывать его, а сделать что-то другое. Всё на ваше усмотрение.

По такому же принципу работает метод Application.GetSaveAsFilename(). Если в процессе работы макроса какой-то файл нужно сохранить и путь и имя файла нужно каждый раз задавать вручную, то удобно использовать этот метод. Он так же вызывает стандартное окно, записывает указанный пользователем путь в переменную, а потом под этим именем нужно сохранить файл:

   bfName = Application.GetSaveAsFilename()

   Workbooks.SaveAs(bfName)

Есть и другие способы "общения" пользователя с макросом. Например, очень полезным может оказаться окно подтверждения действия. Например, если макрос безвозвратно удаляет какие-то данные или если какое-то действие нужно делать не на всех перебираемых объектах (например, изменять не все кубы ). Особенно это полезно, когда программист и пользователь макроса - разные люди.

Итак, окно подтверждения вызывается так:

If MsgBox("Вы уверены, что хотите удалить все данные?", vbYesNo, "Confirm") = vbYes Then

    MsgBox ("ok, i will do")   ' т.е. код, выполняемый, если человек подтвердил выполнение

Else

    MsgBox ("I will sleep")   ' действие, если человек отменил выполнение. 

End If

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


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования