Такая задача: есть файл с именем "ИМЯ_№", из него необходимо копировать данные в шаблон. Всё достаточно просто, но пока не совсем понимаю как сделать так, чтобы макрос спрашивал из какого именно файла копировать данные в шаблон, т.к. имя у файлов будет отличаться по порядковому номеру.
Есть идея сделать окошко куда надо будет вводить номер, и на основании этого номера макрос будет брать файл с нужным именем. ПРоблема в том, что на создание этого окошка я наверное убью с недельку, пока до книжки правильной доберусь.
Если кто пнёт меня в правильном направлении буду благодарен.
Добрый день!
Такая задача: есть файл с именем "ИМЯ_№", из него необходимо копировать данные в шаблон. Всё достаточно просто, но пока не совсем понимаю как сделать так, чтобы макрос спрашивал из какого именно файла копировать данные в шаблон, т.к. имя у файлов будет отличаться по порядковому номеру.
Есть идея сделать окошко куда надо будет вводить номер, и на основании этого номера макрос будет брать файл с нужным именем. ПРоблема в том, что на создание этого окошка я наверное убью с недельку, пока до книжки правильной доберусь.
Если кто пнёт меня в правильном направлении буду благодарен.Sonik81
Sub Get_TXT() Dim Filename As String Filename = Get_Filename If Filename = "False" Then Exit Sub ... ...
End Sub
Public Function Get_Filename(Optional Filter As String = "Файлы ,*.", Optional Title As String = "Выбираем файл") Dim vntFilename As Variant vntFilename = Application.GetOpenFilename(Filter, 1, Title, , False) Get_Filename = vntFilename End Function
[/vba]
Например так, стандартно:
[vba]
Code
Sub Get_TXT() Dim Filename As String Filename = Get_Filename If Filename = "False" Then Exit Sub ... ...
End Sub
Public Function Get_Filename(Optional Filter As String = "Файлы ,*.", Optional Title As String = "Выбираем файл") Dim vntFilename As Variant vntFilename = Application.GetOpenFilename(Filter, 1, Title, , False) Get_Filename = vntFilename End Function
К сожалению не совсем подходит, файл то я открою, но дальше все должно копироваться автоматом. А там используется ( в макросе) имя файлов, и если шаблон он на то и шаблон, что имя его не изменяется, то источник данных будет всегда разным.
Хотя я не отрицаю, что руки у меня кривые и моск ещё не полон знаниями по Excel. И может я чего то не понимаю или неправильно объяснил?
К сожалению не совсем подходит, файл то я открою, но дальше все должно копироваться автоматом. А там используется ( в макросе) имя файлов, и если шаблон он на то и шаблон, что имя его не изменяется, то источник данных будет всегда разным.
Хотя я не отрицаю, что руки у меня кривые и моск ещё не полон знаниями по Excel. И может я чего то не понимаю или неправильно объяснил? Sonik81
- ну а больше ничего и не нужно. Я даже не помню, когда мне было нужно имя файла в явном виде... Юзер выбрал в диалоге файл, Вы его открываете так: [vba]
Code
set wb=workbooks.open(Filename)
[/vba] и дальше обращаетесь к переменной/объекту wb. Всё. Ну или как в примере по ссылке RAN. Можно конечно собрать имя файла из известной части и того, что юзер где-то введёт - в ячейку или inputbox, но это думаю плохой выбор - так не видно, какие файлы есть, нужно обрабатывать ошибки ввода и т.д. Но в принципе делать можно.
Quote (Sonik81)
файл то я открою
- ну а больше ничего и не нужно. Я даже не помню, когда мне было нужно имя файла в явном виде... Юзер выбрал в диалоге файл, Вы его открываете так: [vba]
Code
set wb=workbooks.open(Filename)
[/vba] и дальше обращаетесь к переменной/объекту wb. Всё. Ну или как в примере по ссылке RAN. Можно конечно собрать имя файла из известной части и того, что юзер где-то введёт - в ячейку или inputbox, но это думаю плохой выбор - так не видно, какие файлы есть, нужно обрабатывать ошибки ввода и т.д. Но в принципе делать можно.Hugo
Спасибо большое! Просто я чайник совсем, в макросах почти не шурупю.
Вот ещё один вопрос родился, мне нужно копировать данные каждый день. Прикладываю два файла: "Источник" - файл из которого копируют и который может иметь разные имена, но структура данных всегда одинаковая и "Шаблон" - файл в который копируют.
Прежде всего хочется понять как пользоваться функцией "Если" в макросе. Но если сузить задачу то в зависимости от дня недели необходимо копировать из "Источника" данные расположенные в определённом диапазоне ячеек (по понедельникам они всегда на одном месте, по вторника всегда на другом и т.д.) в "Шаблон".
А то сейчас я сделал 5 почти одинаковых макросов, просто поменял диапазон ячеек. Что не совсем красиво!
Я надеюсь, что я не сильно напрягаю...
Quote (Hugo)
set wb=workbooks.open(Filename)
О так всё работает.
Спасибо большое! Просто я чайник совсем, в макросах почти не шурупю.
Вот ещё один вопрос родился, мне нужно копировать данные каждый день. Прикладываю два файла: "Источник" - файл из которого копируют и который может иметь разные имена, но структура данных всегда одинаковая и "Шаблон" - файл в который копируют.
Прежде всего хочется понять как пользоваться функцией "Если" в макросе. Но если сузить задачу то в зависимости от дня недели необходимо копировать из "Источника" данные расположенные в определённом диапазоне ячеек (по понедельникам они всегда на одном месте, по вторника всегда на другом и т.д.) в "Шаблон".
А то сейчас я сделал 5 почти одинаковых макросов, просто поменял диапазон ячеек. Что не совсем красиво!
Похоже, что Вы сильно напрягли нашу машинку по отсеву вложений не по правилам Сделать привязку к дню недели можно, но думаю на практике лучше запрашивать день у пользователя, или сделать 5 разных кнопок. Ну а в коде конечно "экономичнее" сделать ветвление выбора диапазонов.
[vba]
Code
Sub tt() Dim x&, arr arr = Array(, "A1:A2", "B1:B2", "C1:C2", "D1:D2", "E1:E2") x = InputBox("Введите номер дня недели") Range(arr(x)).Select End Sub
[/vba]
Похоже, что Вы сильно напрягли нашу машинку по отсеву вложений не по правилам Сделать привязку к дню недели можно, но думаю на практике лучше запрашивать день у пользователя, или сделать 5 разных кнопок. Ну а в коде конечно "экономичнее" сделать ветвление выбора диапазонов.
[vba]
Code
Sub tt() Dim x&, arr arr = Array(, "A1:A2", "B1:B2", "C1:C2", "D1:D2", "E1:E2") x = InputBox("Введите номер дня недели") Range(arr(x)).Select End Sub
Похоже, что Вы сильно напрягли нашу машинку по отсеву вложений не по правилам
Кхм, сорри. Заработался совсем...
Quote (Hugo)
Сделать привязку к дню недели можно, но думаю на практике лучше запрашивать день у пользователя,
Сначала хотелось бы сделать привязку к дню недели, чтобы выбора у пользователя не было. Ну и понять как с "Если" работать.
Quote (Hugo)
или сделать 5 разных кнопок.
Имеете в виду кнопок запуска макроса? Сочетания клавиш или же формы графические?
Quote (Hugo)
Ну а в коде конечно "экономичнее" сделать ветвление выбора диапазонов.
С ветвлением не совсем понял. Но там есть ячейки которые не надо копировать, ну т.е. например с A1:A10 копируем, а потом A15:A17, а потом A33:A40. Ну и вставлять их надо тоже не подряд.
Quote (Hugo)
Похоже, что Вы сильно напрягли нашу машинку по отсеву вложений не по правилам
Кхм, сорри. Заработался совсем...
Quote (Hugo)
Сделать привязку к дню недели можно, но думаю на практике лучше запрашивать день у пользователя,
Сначала хотелось бы сделать привязку к дню недели, чтобы выбора у пользователя не было. Ну и понять как с "Если" работать.
Quote (Hugo)
или сделать 5 разных кнопок.
Имеете в виду кнопок запуска макроса? Сочетания клавиш или же формы графические?
Quote (Hugo)
Ну а в коде конечно "экономичнее" сделать ветвление выбора диапазонов.
С ветвлением не совсем понял. Но там есть ячейки которые не надо копировать, ну т.е. например с A1:A10 копируем, а потом A15:A17, а потом A33:A40. Ну и вставлять их надо тоже не подряд.Sonik81
Привязываться к дню не рекомендую потому, что всегда будут случаи, что нужно что-то пересчитать за вчера или завтра Но конечно это не мне решать. 5 кнопок - это 5 графических объектов, каждый запускает один макрос, но с разными параметрами - механику правда не продумывал. Ветвление - в зависимости от значения х будет обрабатываться соотв. диапазон. В Вашем случае например можно сделать 3 параллельных массива - но конечно нужно видеть всю задачу в целом. Да, забыл - день недели: [vba]
Привязываться к дню не рекомендую потому, что всегда будут случаи, что нужно что-то пересчитать за вчера или завтра Но конечно это не мне решать. 5 кнопок - это 5 графических объектов, каждый запускает один макрос, но с разными параметрами - механику правда не продумывал. Ветвление - в зависимости от значения х будет обрабатываться соотв. диапазон. В Вашем случае например можно сделать 3 параллельных массива - но конечно нужно видеть всю задачу в целом. Да, забыл - день недели: [vba]