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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2011, 17:01   #1
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
Восклицание Range

Здравствуйте!

Для того что бы послать фунции WorksheetFunction.Var Range вида
Range("B4:D10") приходиться вот так вот изощрятся:

Код:
V = WorksheetFunction.Var(Range(.ActiveSheet.Cells(нач_таблица_студент, Студент_Начальные_уров_подгатовлен).Address & ":" & _
.ActiveSheet.Cells(нач_таблица_студент + Range("a1").value, Студент_Начальные_уров_подгатовлен).Address))
так как диапазон заранее не известен, можно это как по другому сделать? по красивше?
WizarD.89 вне форума Ответить с цитированием
Старый 27.04.2011, 18:11   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вариант 1:

Код:
    Dim ra As Range
    Set ra = Cells(нач_таблица_студент, Студент_Начальные_уров_подгатовлен).Resize(Range("a1").Value + 1)
    V = WorksheetFunction.Var(ra)
вариант 2 (то же самое, но короче)
Код:
V = WorksheetFunction.Var(Cells(нач_таблица_студент, Студент_Начальные_уров_подгатовлен).Resize(Range("a1").Value + 1))
PS: Можно и проще сделать, и красивее, - но без примера файла никак.
EducatedFool вне форума Ответить с цитированием
Старый 27.04.2011, 18:16   #3
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

или вот в данном случае:

Код:
Range(.ActiveSheet.Cells(нач_таблица_строка + Range("a1").value + 1, нач_таблица_столб).Address & ":" & .ActiveSheet.Cells(нач_таблица_строка + Range("a1").value + 1, нач_таблица_столб + Range("b1").value + 1).Address).NumberFormat= "0.00"
вообще не красиво как то

Последний раз редактировалось WizarD.89; 27.04.2011 в 18:33.
WizarD.89 вне форума Ответить с цитированием
Старый 27.04.2011, 18:21   #4
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

EducatedFool спасибо очень интересно! а что нужно в файле? просто у меня очень большой проект, диплом уже где то 40 листов А4 накалякал не могу его полностью выслать.
WizarD.89 вне форума Ответить с цитированием
Старый 28.04.2011, 17:26   #5
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

ошибься..................

Последний раз редактировалось WizarD.89; 28.04.2011 в 17:44.
WizarD.89 вне форума Ответить с цитированием
Старый 28.04.2011, 18:12   #6
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

EducatedFool

ваш вариант не подошел мне нужен диапазон, а не одна ячейка.

вот так я придумал:

Код:
Range(getRange(нач_таблица_студент, Студент_Начальные_уров_подгатовлен, Range("a1").value)).select
Код:
Function getRange(Optional Cell1 As Integer = нач_таблица_строка, Optional Cell2 As Integer = нач_таблица_столб, Optional resize1 As Integer, Optional resize2 As Integer) As String
getRange = Cells(Cell1, Cell2).Address & ":" & Cells(Cell1 + resize1, Cell2 + resize2).Address
End Function

еще оказывается можно было через запятую:

range(cells(1,1).address,cells(2,3) .address).select
WizarD.89 вне форума Ответить с цитированием
Старый 28.04.2011, 19:20   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

видимо так будет еще проще:
range(cells(1,1), cells(2,3)).select
или с таким же результатом:
cells(1,1).resize(1,2).select
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 28.04.2011 в 19:26.
IgorGO вне форума Ответить с цитированием
Старый 29.04.2011, 18:42   #8
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

IgorGO

спасибо

но я еще вот так придумал, еще короче:
Код:
Sub k()
R(, , 3, 3).Select
End Sub
Код:
Function R(Optional Cell1 As Integer = 1, Optional Cell2 As Integer = 1, Optional resize1 As Integer, Optional resize2 As Integer) As Range
Set R = Range(Cells(Cell1, Cell2), Cells(Cell1 + resize1, Cell2 + resize2))
End Function

P.S. для меня был шок то что можно сделать выделение используя имя функции R(, , 3, 3).Select О_О , не присвоив объект range другой переменной.
WizarD.89 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Еще о Range Trimbl Microsoft Office Excel 4 22.04.2011 15:32
Имя Range Chelius Microsoft Office Excel 5 26.05.2010 16:29
Проблема с Range miatu Microsoft Office Word 6 07.09.2009 12:06
синтаксис Range ? kievlyanin Microsoft Office Excel 2 23.04.2009 13:32
MS Word: Range kate4ka Общие вопросы Delphi 1 19.02.2008 06:14