Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Работа с диапазоном (range) введёным в application.Inputbox - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Работа с диапазоном (range) введёным в application.Inputbox (Макросы/Sub)
Работа с диапазоном (range) введёным в application.Inputbox
fairylive Дата: Вторник, 14.06.2016, 20:02 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 122
Репутация: 4 ±
Замечаний: 0% ±

Excel 2016
Есть диапазон (range) который я указываю через application.Inputbox

[vba]
Код
Dim diapazon As Range
            
    Set diapazon = Application.InputBox("Укажите диапазон объединяемых ячеек." & vbLf & _
                    "Например F7:F57", "Какие ячейки объединять?", Type:=8)
[/vba]

Как дальше работать с этим диапазоном?

Конкретно надо чтобы на одном листе этот диапазон сначала очистился от тех значений которые там могут быть. А потом из нескольких файлов из указанного диапазона всё копировалось в один файл в тот же диапазон. Со второй частью проблем нет. Всё объединяется и суммируется как надо но если в коде прописывать диапазон как range("F7:F57"). Я же попытался добавить чтобы этот диапазон можно было задавать вручную так как он может меняться и чтобы не переписывать код каждый раз. Но не понимаю как дальше его обрабатывать.

Надо заменить в коде эти "F7:F57" на то что будет вводиться через данную переменную diapazon.

[vba]
Код
    Do While FileName <> ""
        ' Open a workbook in the folder
        Set WorkBk = Workbooks.Open(folderPath & FileName)
      
        SourceRange = WorkBk.Worksheets(1).Range("F7:F57").Value
                
        For i = 1 To UBound(SourceRange)
            DestRange(i, 1) = DestRange(i, 1) + SourceRange(i, 1)
        Next
        ' Close the source workbook without saving changes.
        WorkBk.Close SaveChanges:=False
        
        ' Use Dir to get the next file name.
        FileName = Dir()
    Loop
    With twb.Worksheets(1)
    
    .Range("F7:F57").Value = DestRange
[/vba]
 
Ответить
СообщениеЕсть диапазон (range) который я указываю через application.Inputbox

[vba]
Код
Dim diapazon As Range
            
    Set diapazon = Application.InputBox("Укажите диапазон объединяемых ячеек." & vbLf & _
                    "Например F7:F57", "Какие ячейки объединять?", Type:=8)
[/vba]

Как дальше работать с этим диапазоном?

Конкретно надо чтобы на одном листе этот диапазон сначала очистился от тех значений которые там могут быть. А потом из нескольких файлов из указанного диапазона всё копировалось в один файл в тот же диапазон. Со второй частью проблем нет. Всё объединяется и суммируется как надо но если в коде прописывать диапазон как range("F7:F57"). Я же попытался добавить чтобы этот диапазон можно было задавать вручную так как он может меняться и чтобы не переписывать код каждый раз. Но не понимаю как дальше его обрабатывать.

Надо заменить в коде эти "F7:F57" на то что будет вводиться через данную переменную diapazon.

[vba]
Код
    Do While FileName <> ""
        ' Open a workbook in the folder
        Set WorkBk = Workbooks.Open(folderPath & FileName)
      
        SourceRange = WorkBk.Worksheets(1).Range("F7:F57").Value
                
        For i = 1 To UBound(SourceRange)
            DestRange(i, 1) = DestRange(i, 1) + SourceRange(i, 1)
        Next
        ' Close the source workbook without saving changes.
        WorkBk.Close SaveChanges:=False
        
        ' Use Dir to get the next file name.
        FileName = Dir()
    Loop
    With twb.Worksheets(1)
    
    .Range("F7:F57").Value = DestRange
[/vba]

Автор - fairylive
Дата добавления - 14.06.2016 в 20:02
_Boroda_ Дата: Вторник, 14.06.2016, 20:16 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Диапазон без привязки к конкретному листу конкретной книги быть не может. Если книга и/или лист не указаны, то по умолчанию берется текущие (если макрос в обычном модуле, то активные на момент прохождения макроса по этой строке, если макрос в модуле книги/листа, то эти книга/лист).
А вот если указать не диапазон, а адрес, то потом этот адрес можно подставлять куда угодно. Примерно вот так
[vba]
Код
    Adr_ = InputBox("Укажите диапазон объединяемых ячеек." & vbLf & _
                    "Например F7:F57", "Какие ячейки объединять?")
    SourceRange = WorkBk.Worksheets(1).Range(Adr_).Value
[/vba]
Добавлено
У Ярослава ниже как раз то, что я и хотел написать, да что-то протормозил - не сообразил сразу, что речь идет про выделение мышой


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Вторник, 14.06.2016, 22:57
 
Ответить
СообщениеДиапазон без привязки к конкретному листу конкретной книги быть не может. Если книга и/или лист не указаны, то по умолчанию берется текущие (если макрос в обычном модуле, то активные на момент прохождения макроса по этой строке, если макрос в модуле книги/листа, то эти книга/лист).
А вот если указать не диапазон, а адрес, то потом этот адрес можно подставлять куда угодно. Примерно вот так
[vba]
Код
    Adr_ = InputBox("Укажите диапазон объединяемых ячеек." & vbLf & _
                    "Например F7:F57", "Какие ячейки объединять?")
    SourceRange = WorkBk.Worksheets(1).Range(Adr_).Value
[/vba]
Добавлено
У Ярослава ниже как раз то, что я и хотел написать, да что-то протормозил - не сообразил сразу, что речь идет про выделение мышой

Автор - _Boroda_
Дата добавления - 14.06.2016 в 20:16
SLAVICK Дата: Вторник, 14.06.2016, 22:49 | Сообщение № 3
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
А если так:
[vba]
Код
Set diapazon = Application.InputBox("Укажите диапазон объединяемых ячеек." & vbLf & _
                    "Например F7:F57", "Какие ячейки объединять?", Type:=8)
addr = diapazon.Address
SourceRange = WorkBk.Worksheets(1).Range(addr).Value
[/vba]


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеА если так:
[vba]
Код
Set diapazon = Application.InputBox("Укажите диапазон объединяемых ячеек." & vbLf & _
                    "Например F7:F57", "Какие ячейки объединять?", Type:=8)
addr = diapazon.Address
SourceRange = WorkBk.Worksheets(1).Range(addr).Value
[/vba]

Автор - SLAVICK
Дата добавления - 14.06.2016 в 22:49
fairylive Дата: Среда, 15.06.2016, 09:57 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 122
Репутация: 4 ±
Замечаний: 0% ±

Excel 2016
У Ярослава ниже как раз то, что я и хотел написать, да что-то протормозил - не сообразил сразу, что речь идет про выделение мышой

Выделение мышкой? Это вы про что?

addr = diapazon.Address
SourceRange = WorkBk.Worksheets(1).Range(addr).Value

Этого то мне и не хватало по всей видимости. Как я только не пихал эту переменную в range().
 
Ответить
Сообщение
У Ярослава ниже как раз то, что я и хотел написать, да что-то протормозил - не сообразил сразу, что речь идет про выделение мышой

Выделение мышкой? Это вы про что?

addr = diapazon.Address
SourceRange = WorkBk.Worksheets(1).Range(addr).Value

Этого то мне и не хватало по всей видимости. Как я только не пихал эту переменную в range().

Автор - fairylive
Дата добавления - 15.06.2016 в 09:57
SLAVICK Дата: Среда, 15.06.2016, 12:07 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Выделение мышкой? Это вы про что?

А вы попробуйте после вызова окна - мышой выделить несколько ячеек на листе ;)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Выделение мышкой? Это вы про что?

А вы попробуйте после вызова окна - мышой выделить несколько ячеек на листе ;)

Автор - SLAVICK
Дата добавления - 15.06.2016 в 12:07
fairylive Дата: Среда, 15.06.2016, 12:13 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 122
Репутация: 4 ±
Замечаний: 0% ±

Excel 2016
SLAVICK, не выделяется ничего.
 
Ответить
СообщениеSLAVICK, не выделяется ничего.

Автор - fairylive
Дата добавления - 15.06.2016 в 12:13
fairylive Дата: Четверг, 16.06.2016, 13:40 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 122
Репутация: 4 ±
Замечаний: 0% ±

Excel 2016
SLAVICK, разобрался почему не выделялось мышкой из-за ScreenUpdating = False. Перевёл в true и всё стало хорошо.
 
Ответить
СообщениеSLAVICK, разобрался почему не выделялось мышкой из-за ScreenUpdating = False. Перевёл в true и всё стало хорошо.

Автор - fairylive
Дата добавления - 16.06.2016 в 13:40
Roman777 Дата: Четверг, 16.06.2016, 13:47 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
fairylive, на самом деле выделение ячеек происходит, просто Вы не видели самого выделения, поскольку ScreenUpdating = False - отключает обновление окна приложения... с того момента как оно действует, в окне приложения никаких изменений не увидите. А ScreenUpdating = true - соответственно включило обновление экрана.


Много чего не знаю!!!!
 
Ответить
Сообщениеfairylive, на самом деле выделение ячеек происходит, просто Вы не видели самого выделения, поскольку ScreenUpdating = False - отключает обновление окна приложения... с того момента как оно действует, в окне приложения никаких изменений не увидите. А ScreenUpdating = true - соответственно включило обновление экрана.

Автор - Roman777
Дата добавления - 16.06.2016 в 13:47
fairylive Дата: Четверг, 16.06.2016, 13:55 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 122
Репутация: 4 ±
Замечаний: 0% ±

Excel 2016
Roman777, не только не видел, но и не выделялось. Иначе в диалоговом окне появился бы адрес выделяемых ячеек, а там ничего не появлялось. Собственно проблему решил тем что ScreenUpdating = False перенёс после Application.InputBox. Смотреть на конвульсии экселя всё-таки не очень прикольно)
 
Ответить
СообщениеRoman777, не только не видел, но и не выделялось. Иначе в диалоговом окне появился бы адрес выделяемых ячеек, а там ничего не появлялось. Собственно проблему решил тем что ScreenUpdating = False перенёс после Application.InputBox. Смотреть на конвульсии экселя всё-таки не очень прикольно)

Автор - fairylive
Дата добавления - 16.06.2016 в 13:55
Alex_ST Дата: Пятница, 17.06.2016, 12:28 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3198
Репутация: 606 ±
Замечаний: 0% ±

2003
Вообще-то Application.InputBox("...", "...", Type:=8) иногда не хочет нормально работать на других листах и на листах с УФ по вычисляемой в нём формуле.
Для этого я обычно применяю костыли, предложенные на Планете ЗДЕСЬ и ЗДЕСЬ
Вот этот макрос со стандартным использованием Application.InputBox достаточно часто даёт ошибку если указывать ячейку на другом листе, где применено УФ:
А вот этот работает ВСЕГДА (ещё ни разу не подвёл:



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Пятница, 17.06.2016, 12:35
 
Ответить
СообщениеВообще-то Application.InputBox("...", "...", Type:=8) иногда не хочет нормально работать на других листах и на листах с УФ по вычисляемой в нём формуле.
Для этого я обычно применяю костыли, предложенные на Планете ЗДЕСЬ и ЗДЕСЬ
Вот этот макрос со стандартным использованием Application.InputBox достаточно часто даёт ошибку если указывать ячейку на другом листе, где применено УФ:
А вот этот работает ВСЕГДА (ещё ни разу не подвёл:

Автор - Alex_ST
Дата добавления - 17.06.2016 в 12:28
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Работа с диапазоном (range) введёным в application.Inputbox (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!