Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Excel. Получить Selection из неактивного листа? Добавлено: 25.01.09 10:33  

Автор вопроса:  fAndOrIn
Макрос работает с большим к-вом листов. На каждом из них есть выделенный пользователем диапазон (Range). Как их получить без Worksheet.Activate, а то в глазах рябит от мелькающих листов, а минимизировать или отключать окно не хотелось бы.

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #1 Добавлено: 25.01.09 11:05
Sub Main()
Dim Rn As Range, WS As Worksheet, I As Long, J As Long
For I = 0 To 9
  For Each WS In ThisWorkbook.Worksheets
    WS.Activate
    Set Rn = Selection
    'Работа с выделением
    For J = 0 To 9999999: Next J
  Next WS
Next I
End Sub
Если листы не пустые и выделения в разных углах, то "достанет" довольно быстро. Циклы вставлены для примера.

Ответить

Номер ответа: 2
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #2 Добавлено: 25.01.09 11:11
Блин, не той кнопкой выделил. Ну, думаю, все поняли...

Ответить

Номер ответа: 3
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #3 Добавлено: 25.01.09 18:59
Ау-у-у! Есть тут хто?
Ведь хранит же где-то ёксель инфу об этом. Может, в каких Hidden Members или ещё где?

Ответить

Номер ответа: 4
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #4 Добавлено: 25.01.09 19:48
Ну, чё орем по воскресеньям.:)
Прежде чем искать в Hidden Members стоит поискать в открытых.
Set Rn = WS.UsedRange

Selection - это совсем не обязательно range, а вообще любой выделенный объект относящийся к окну или всему приложению Excel. Set Rn = Selection не корректно.

Ответить

Номер ответа: 5
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #5 Добавлено: 25.01.09 20:08
Простите, что разбудил!
Но это не то, что хотелось бы.
Попробую еще раз объяснить.
  1. 'перед пробой проверьте, что на первом листе нет нужной информации!!!
  2. Sub GetUsedRange()
  3. Dim Rn As Range, WS1 As Worksheet, WS2 As Worksheet
  4. Set WS1 = ThisWorkbook.Worksheets(1)
  5. WS1.Activate
  6. Cells.Clear
  7. Cells(1, 1) = 11
  8. Cells(9, 9) = 99
  9. Range(Cells(10, 10), Cells(20, 12)).Select
  10. Set WS2 = ThisWorkbook.Worksheets(2)
  11. WS2.Activate
  12. Set Rn = WS1.UsedRange
  13. Debug.Print Rn.Row, Rn.Column '1 1 - а я хочу 10 10
  14. End Sub

Ответить

Номер ответа: 6
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #6 Добавлено: 25.01.09 21:17
Sorry, не проснулся.
Как насчет Application.ScreenUpdating = False перед циклом?

Ответить

Номер ответа: 7
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #7 Добавлено: 25.01.09 21:56
Спасибо! Как вариант в большинстве случаев покатит.
Но! Вкратце общий смысл задачи, когда не очень (покатит).
Из разных подразделений приносят заказы на материалы в виде таблиц,
которые почти везде лепятся своими спецами (переучивать которых себе дороже). Удалось лишь уговорить их выделять нужные данные и таблицу держать на первом листе.
Сделал програмку для сбора всех этих таблиц в один файл, выборки(даже с учетом того, что "XC 25";(латынь)="XC25";(кириллица)), сложения, сортировки... Короче, общая потребность в этом же файле.
Так вот, хотелось бы заказчику наблюдать за заполнением этой таблицы и все тут! Т.е. не "замораживать" и не мелькать...
А ведь хранит же где то ёксель инфу о выделенных диапазонах.

Ответить

Номер ответа: 8
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #8 Добавлено: 25.01.09 22:35
заказчик хочет видеть, пусть смотрит:
  1. Function GetActiveRange(WS As Worksheet) As Range
  2. Dim currws As Worksheet
  3.     Set currws = ActiveSheet
  4.     Application.ScreenUpdating = False
  5.     WS.Activate
  6.     Set GetRemoteActiveRange = ActiveWindow.RangeSelection
  7.     currws.Activate
  8.     Application.ScreenUpdating = True
  9. End Function


А где реально хранит, поищем..

Ответить

Номер ответа: 9
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #9 Добавлено: 25.01.09 22:49
СССПАСИБО!!! Пробовать буду уже на работе! Вырубаюсь...

Ответить

Номер ответа: 10
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #10 Добавлено: 26.01.09 08:09
Ну вот так. Заказчик этим пунктом доволен! Я тоже...почти! Father, еще раз спасибо!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам