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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 19.06.2008, 14:23   #11
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

1) Условие в операторе If проверяется всегда. Тогда как в Select Case - по порядку, до первого True. Что гораздо быстрее. Да и запись короче.
2) Если необходимо, чтобы вызываемая процедура не изменяла переменные, полученные как аргументы, то нужно, чтобы аргументы передавались по значению, а не по ссылке. Для этого служит ключевое слово ByVal, добавляемое перед аргументом. Тогда вызываемая процедура будет управлять копией переданных данных, а не самими данными.

А Target - это адрес ячейки (диапазона), возвращаемый событием (в нашем случае - Worksheet_Change(ByVal Target As Range))
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 19.06.2008 в 14:27.
SAS888 вне форума
Старый 20.06.2008, 10:52   #12
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
2) Если необходимо, чтобы вызываемая процедура не изменяла переменные, полученные как аргументы, то нужно, чтобы аргументы передавались по значению, а не по ссылке. Для этого служит ключевое слово ByVal, добавляемое перед аргументом. Тогда вызываемая процедура будет управлять копией переданных данных, а не самими данными.
А Target - это адрес ячейки (диапазона), возвращаемый событием (в нашем случае - Worksheet_Change(ByVal Target As Range))
SAS
Кое чего понял, но при написании макроса и этой строки, навряд ли человек использовал такую цитату.
Я хочу понять, как это говорится. Примерно так:
Если производится действия в диапазоне "......", то применить макрос с именм "....."
Вот Вы, пишите макрос, какие слова, Вы бы произнесли, прежде чем вставить эту строчку?(В Ваших м-сах, то же есть ~ такие строки)
If Not Intersect(Target, Sh.Range("B3:K1489")) Is Nothing Then Macro_Change Sh
valerij вне форума
Старый 20.06.2008, 11:05   #13
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Если производится действия в диапазоне "......",
здесь ни при чем. Никаких действий для этого не нужно. Фразу "If Not Intersect(Target, Sh.Range("B3:K1489")) Is Nothing Then ..." дословно можно перевести так:
Если пересечение диапазонов Target и Sh.Range("B3:K1489") не есть "ничего" (т.е. пересекаются), тогда...
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 20.06.2008, 11:25   #14
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
здесь ни при чем. ...
Ну SAS!!
Я уже не знаю как и сказать!! Ну пример:
a = Range("H1")
b = Range("B1")
Мы говорим, присвоить ~a и b, значение яч. .....
Теперь нам надо узнать какая из них больше числа 31
Мы автоматом говорим
Если "а" больше 31 то присвоить а=0
А тут чего сказать надо:
If Not Intersect(Target, Sh.Range("B3:K1489")) Is Nothing Then Macro_Change Sh
и дальше
If Not Intersect(Target, .Cells) Is Nothing Then

САС, это я пытаюсь переделать макрос в книге, где формулы, заменяются значениями и тут стал, перед этим If Not Intersect
valerij вне форума
Старый 20.06.2008, 11:47   #15
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А я уже не знаю,что Вам не понятно.
Вот, например, для нашего случая, где Target - это одна ячейка, можно сказать так: если Target принадлежит диапазону Sh.Range("B3:K1489"), то выполнить то, что после Then.
При чем здесь сравнение a и b?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 21.06.2008, 01:29   #16
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
если Target принадлежит диапазону Sh.Range("B3:K1489"), то выполнить то, что после Then.
Теперь все стало на свое место.
САС, давайте продолжим, еще один вопросик, вот фрагмент
If Not Intersect(Target, Range("D3:D24")) Is Nothing Then
a = Target.Address
MsgBox a
b = Cell("a")
MsgBox b
End If
End Sub

Почему так ошибка?
Вроде все логично, в диапазоне "D3:D24" вводим чило, "а" -адрес ячейки, вставляем адрес в ячейку, должны получить, вводимое число.
Вроде удобно, не надо создавать цикл для диапазона "D3:D24"
valerij вне форума
Старый 21.06.2008, 01:44   #17
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

попробуйте так
Код:
'''
MsgBox a
b = Range(a)
MsgBox b
'''
а ошибка из-за того, что строку b = Cell("a") следовало бы написать так b = Cells(a)
но и в этом случае Вы получили бы ошибку №13 - "несоответствие типов", т.к.
Цитата:
Address - Адрес ячейки, в виде абсолютной ссылки (по умолчанию), т.е. $A$1
Cells - Возвращает ячейку, соответствующую конкретному адресу. Принимает один аргумент (номер ячейки), или два аргумента (номер строки и номер столбца)
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499

Последний раз редактировалось VictorM; 21.06.2008 в 09:43.
VictorM вне форума
Старый 21.06.2008, 11:53   #18
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от VictorM Посмотреть сообщение
попробуйте так
Да так я знаю, я не пойму почему, если мы просто в ячейку, любую, вставим "= $A$1", то все работает, а так
b = Cell("a")
или так
b = Cell(a)
ошибка, наверное, здесь нет такого соответствия.
valerij вне форума
Старый 21.06.2008, 12:57   #19
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

1.ошибка синтаксиса Cell - Cells
2.ошибка несоответствие типов
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять в чем проблема (код) diznt Помощь студентам 2 03.08.2008 10:20
Помогите понять как это реализовать! krasovskiy Фриланс 6 15.05.2008 14:13
Не могу понять задание amandra Помощь студентам 11 16.10.2007 10:24
Помогите понять код MaGiCeYe Помощь студентам 1 02.04.2007 19:57
не могу понять... Dutchman Паскаль, Turbo Pascal, PascalABC.NET 4 14.12.2006 07:14