![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 27.11.2012
Сообщений: 84
|
![]()
Всем доброго дня!
Подскажите, пожалуйста, как стоит поправить макрос, чтобы он работал корректно. Макрос записан в PERSONAL.XSLB, чтобы его вызов был доступен из любого файла excel. Суть макроса - пользователь нажимает кнопку, появляется диалоговое окно выбора файла, открывается файл, далее макрос предлагает выбрать диапазон, пользователь выбирает его, макрос продолжает дальше работать - добавлять столбцы справа от выбранного диапазона, вычислять и т.п. Проблема в том, что не получается наладить выбор диапазона во время работы макроса. Range(Выбор_диапазона()).Select - все ломается здесь! Вылетает ошибка method range of object _global failed Вот текст кнопки: Код HTML:
Sub Analysis() ' ' Analysis Макрос ' ВПР субсчетов справочников с МСФО Workbooks.Open Filename:=GetFileName() Range(Выбор_диапазона()).Select Selection.Insert Shift:=xlToRight Selection.Insert Shift:=xlToRight Columns("D:E").Select Selection.NumberFormat = "General" Range("D2").Select ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],8)" Range("E2").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],[Книга3.xlsm]Общий!C4:C5,2,0)" Range("D2:E2").Select Selection.AutoFill Destination:=Range("D2:E15") Range("D2:E15").Select End Sub Вот коды работающих функций: Код HTML:
Function GetFileName(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath, _ Optional ByVal MyFilter As String = "Книги Excel (*.xls*),") As String ' функция выводит диалоговое окно выбора папки с заголовком Title, ' начиная обзор диска с папки InitialPath ' возвращает полный путь к выбранной папке, или пустую строку в случае отказа от выбора If Not IsMissing(InitialPath) Then On Error Resume Next: ChDrive Left(InitialPath, 1) ChDir InitialPath ' выбираем стартовую папку End If res = Application.GetOpenFilename(MyFilter, , Title, "Открыть") ' вывод диалогового окна GetFileName = IIf(VarType(res) = vbBoolean, "", res) ' пустая строка при отказе от выбора End Function Код HTML:
Function Выбор_диапазона() Dim myNum As Range Set myNum = Application.InputBox("Выбери диапазон", Type:=8) If myNum Is Nothing Then Exit Function End Function |
![]() |
![]() |
![]() |
#2 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]() Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 27.11.2012
Сообщений: 84
|
![]()
Я так понимаю, что myNum необходимо использовать в коде кнопки?
|
![]() |
![]() |
![]() |
#4 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
а вообще можно так:
Код:
и кроме того, это Код:
Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
#5 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]() Код:
1. в коде какой кнопки??? 2. нет такой необходимости 3. но если хочется - можете использовать
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 27.11.2012
Сообщений: 84
|
![]()
Игорь, взял вот этот код
Dim SelRg as Range set SelRg = Application.InputBox("Выбери диапазон", Type:=8) if SelRg is Nothing then Exit Sub else SelRg.select Все заработало, большое вам спасибо! Прошу прощения за тот мой комментарий про кнопку, от неудачи тупанул! |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 27.11.2012
Сообщений: 84
|
![]()
Подскажите, пожалуйста, еще, если не сложно
вот этот кусок кода: Код HTML:
Range("D2").Select ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],8)" Я взял то, что вы предложили, получилось вот так - Код HTML:
Set SelRg = Application.InputBox("Выбери диапазон для вставки формулы ЛЕВСИМВ", Type:=8) If SelRg Is Nothing Then Exit Sub Else SelRg.Select ActiveCell.FormulaR1C1 = "=LEFT(" & SelRg & ",8)" Также потом докручу таким образом, чтобы, когда выбирался диапазон, допустим D2, то в формулу подставлялась бы C2, т.е. ячейка слева. Возможно будет выглядеть вот так внутри формулы: [" & SelRg & "].Offset(, -1) |
![]() |
![]() |
![]() |
#8 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
SelRg - это обьект типа Range, а в формулу нужен его адрес (насколько я понял: в стиле R1C1, относительно активной ячейки)
Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 27.11.2012
Сообщений: 84
|
![]()
Код работает! Большое спасибо!
А как сделать сдвиг влево адреса диапазона? ActiveCell.FormulaR1C1 = "=LEFT(" & SelRg.address(false, false, xlr1c1, relativeto:=ActiveCell) & ",8)" Возможно ли вставить сюда Offset(, -1)? Или будет правильней вычесть единицу, чтобы произошло смещение |
![]() |
![]() |
![]() |
#10 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]() Код:
Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Последний раз редактировалось IgorGO; 08.06.2016 в 14:57. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Выбор уникальных значений из диапазона | Zzema | Microsoft Office Excel | 5 | 01.10.2013 12:56 |
выбор диапазона в другой книге | blackarrow | Microsoft Office Excel | 3 | 19.01.2013 14:37 |
Выбор именованного диапазона | Verano naranjo | Microsoft Office Excel | 2 | 02.12.2010 15:13 |
Ручной выбор диапазона данных | J_i_m_m_y | Microsoft Office Excel | 6 | 02.06.2010 18:32 |
Выбор Диапазона Дат | Chepa | БД в Delphi | 2 | 02.02.2007 10:25 |