Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2021, 11:38   #1
Вячеслав76
Пользователь
 
Регистрация: 30.11.2020
Сообщений: 36
По умолчанию запуск макроса при определенном имени файла

Добрый день. Есть такая проблема. Ежедневно получаем файл с названием "остатки 01.01.2021", где имя файла неизменно, а дата постоянно меняется. Есть макрос, которой называется - "загрузка остатков". Нужно, чтобы макрос перед выполнением проверил, что в названии файла есть слово -"остатки" (не обращая внимания на дату. И если в название есть слово "остатки" - запустился, а если нет, то написал - ошибка. Понимаю, что скорее всего задача не очень сложная, но своих мозгов не хватает а то что нашел в интернете, не работает
Помогите))))
Вячеслав76 вне форума Ответить с цитированием
Старый 21.01.2021, 12:34   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
...
FileName = ActiveWorkbook.Name
    If InStr(FileName, "остатки") = 0 Then
   msgbox("Error")
   exit sub
 else
...magic here
end if
...
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 21.01.2021, 15:22   #3
Вячеслав76
Пользователь
 
Регистрация: 30.11.2020
Сообщений: 36
По умолчанию

Все гениальное просто
Спасибо огромное
Вячеслав76 вне форума Ответить с цитированием
Старый 21.01.2021, 21:01   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

ровно до того момента когда кто-то решить назвать файл "Остатки 21.01.2021"
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 21.01.2021, 21:09   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Ежедневно получаем файл
скорее всего что работает выгрузка какая-то и файл создается автоматом. А не, то придется ТС учиться использованию LCase(statement)
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 22.01.2021, 12:42   #6
Вячеслав76
Пользователь
 
Регистрация: 30.11.2020
Сообщений: 36
По умолчанию

Файлы создаются руками. И конечно есть вероятность, что девочка сохранит его как "Остатки 20.01.21 или даже "Астатки". Это не страшно, если работать не будет, я разберусь. Тут проблема была, что девчонки ежедневно получают четыре файла "Деньги, остатки, товар, клиенты" и ЕЖЕДНЕВНО их редактируют руками. (удаляют лишнее, вставляют данные итд). Я работаю тут менеджером и скажу честно - макросы не мой конек, но решил немного облегчить им жизнь. Так вот они все равно могут открыть файл "остатки 21.01.2021", а запустить макрос "деньги", а потом бегают и кричат, что все сломалось. Вот и появилась идея, доработать макрос, чтобы он не запускался, если имя файла не совпадает с его названием. Возможно нужно было поступить иначе. Сделать кнопку, которая запускала бы макрос в зависимости от того, какой файл открыт. Но это пока для меня "темный лес". Но по любому, я на этом учусь, за что очень благодарен.
Вячеслав76 вне форума Ответить с цитированием
Старый 22.01.2021, 13:42   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Вячеслав76 Посмотреть сообщение
которая запускала бы макрос в зависимости от того, какой файл открыт

пишем код в отдельном модуле и вуаля
Код:
Sub SelectSubroutines()
    Dim Filename As String
    Dim macroName As String
    
    Filename = LCase(ActiveWorkbook.Name)
    
    If InStr(Filename, "остатки") = 1 Then
        macroName = "МакросОстатки"
    ElseIf InStr(Filename, "деньги") = 1 Then
        macroName = "МакросДеньги"
    ElseIf InStr(Filename, "товар") = 1 Then
        macroName = "МакросТовар"
    ElseIf InStr(Filename, "клиент") = 1 Then
        macroName = "МакросКлиент"
    End If
    Application.Run macroName
    
End Sub


Sub МакросОстатки()
    Debug.Print 1
End Sub

Sub МакросДеньги()
    Debug.Print 2
End Sub

Sub МакросТовар()
    Debug.Print 3
End Sub

Sub МакросКлиент()
    Debug.Print 4
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 22.01.2021, 14:22   #8
Вячеслав76
Пользователь
 
Регистрация: 30.11.2020
Сообщений: 36
По умолчанию

Александр, Вы меня просто спасли!!!!!!!!!!!!!!
Спасибо огромное!!!!!!!!!!!!!! В понедельник буду пробовать и если это заработает ( в чем я не сомневаюсь), буду учить своих девчонок.)
Спасибо))))))))))
Вячеслав76 вне форума Ответить с цитированием
Старый 25.01.2021, 13:08   #9
Вячеслав76
Пользователь
 
Регистрация: 30.11.2020
Сообщений: 36
По умолчанию

Александр, добрый день.
Выручайте.. Работаю с Вашим макросом. Банальная ошибка, но не понимаю откуда ноги растут. Чтобы не "ломать" свои макросы, я создал 3 файлика с именами "Слава, Петя, Дима" и написал три маленьких макроса с подобными именами. Но при запуске пишет ошибка. Скриншот во вложении. При этом, если запустить макрос из "разработчика", то проблем нет.

Sub SelectSubroutines()
Dim Filename As String
Dim macroName As String

Filename = LCase(ActiveWorkbook.Name)

If InStr(Filename, "Дима") = 1 Then
macroName = "Sub Дима"
ElseIf InStr(Filename, "Слава") = 1 Then
macroName = "Sub Слава"
ElseIf InStr(Filename, "Паша") = 1 Then
macroName = "Sub Паша"

End If
Application.Run macroName

End Sub

Sub Дима()
Debug.Print 1
End Sub

Sub Слава()
Debug.Print 2
End Sub

Sub Паша()
Debug.Print 3
End Sub



Понимаю, что туплю Не могу понять, где
Вложения
Тип файла: xlsx Пример.xlsx (103.4 Кб, 3 просмотров)
Вячеслав76 вне форума Ответить с цитированием
Старый 25.01.2021, 17:53   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

ваш макрос валится на строке
Application.Run macroName
потому что имя файла не содержало ни одно из имен и macroName после всех проверок = ""
соотв.: Application.Run "" - не знает что с этим делать
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запуск исполняемого файла из макроса caute Microsoft Office Word 4 06.03.2016 20:28
Снять привязку макроса к имени файла Lamo Microsoft Office Excel 6 02.08.2013 11:56
Выполнение макроса при определенном значении параметра vanandr91 Microsoft Office Excel 7 27.02.2012 23:10
Запуск макроса при открытии файла ПавелАлександрович Microsoft Office Excel 4 04.03.2011 10:07
Выполнения макроса(с подстановкой имени) при условии ячейки... MaxZoa Microsoft Office Excel 7 22.04.2008 11:08