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

Вход

Регистрация

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

 

= Мир MS Excel/If ...и ...Then - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
If ...и ...Then
Мур Дата: Четверг, 11.10.2012, 16:04 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 436
Репутация: 19 ±
Замечаний: 0% ±

Добрый день участникам форума!
Пытаюсь написать код, который выдавал бы окошко с надписью, при наступлении
определенного условия, например, заданного значения в ячейке "A1".
Вот, что я написал
Quote
Sub На_условие()
Dim x
x = Sheets(1).Cells("A1")
If (x > 0) Then MsgBox "Внимание"
End If
End Sub

Не работает. Где и в чём ошибка?
 
Ответить
СообщениеДобрый день участникам форума!
Пытаюсь написать код, который выдавал бы окошко с надписью, при наступлении
определенного условия, например, заданного значения в ячейке "A1".
Вот, что я написал
Quote
Sub На_условие()
Dim x
x = Sheets(1).Cells("A1")
If (x > 0) Then MsgBox "Внимание"
End If
End Sub

Не работает. Где и в чём ошибка?

Автор - Мур
Дата добавления - 11.10.2012 в 16:04
Jhonson Дата: Четверг, 11.10.2012, 16:16 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 514
Репутация: 169 ±
Замечаний: 0% ±

В модуль листа:
[vba]
Code
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim x
  x = Sheets(1).Range("A1")
  If (x > 0) Then MsgBox "Внимание"
End Sub
[/vba]


"Ничто не приносит людям столько неприятностей, как разум."
 
Ответить
СообщениеВ модуль листа:
[vba]
Code
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim x
  x = Sheets(1).Range("A1")
  If (x > 0) Then MsgBox "Внимание"
End Sub
[/vba]

Автор - Jhonson
Дата добавления - 11.10.2012 в 16:16
Jhonson Дата: Четверг, 11.10.2012, 16:26 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 514
Репутация: 169 ±
Замечаний: 0% ±

Quote (_Boroda_)
а почему на SelectionChange, а не просто на Change?
biggrin ну здесь ТС пусть сам решает как ему надо.


"Ничто не приносит людям столько неприятностей, как разум."
 
Ответить
Сообщение
Quote (_Boroda_)
а почему на SelectionChange, а не просто на Change?
biggrin ну здесь ТС пусть сам решает как ему надо.

Автор - Jhonson
Дата добавления - 11.10.2012 в 16:26
Мур Дата: Четверг, 11.10.2012, 16:33 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 436
Репутация: 19 ±
Замечаний: 0% ±

1.
Quote
В модуль листа
я понял, что отдельно создавать новый модуль не надо.
Если правильно, то почему? И в каких случаях надо в модуль листа, а вкаких отдельный модуль?
2.
Code
Range("A1")
я вроде пробовал, не получалось почему-то.
3.Почему
Code
Private Sub
а не
Code
Sub
?
4.Зачем
Code
(ByVal Target As Range)
и что это?
Прошу прощения за невежество и кучу вопросов.
 
Ответить
Сообщение1.
Quote
В модуль листа
я понял, что отдельно создавать новый модуль не надо.
Если правильно, то почему? И в каких случаях надо в модуль листа, а вкаких отдельный модуль?
2.
Code
Range("A1")
я вроде пробовал, не получалось почему-то.
3.Почему
Code
Private Sub
а не
Code
Sub
?
4.Зачем
Code
(ByVal Target As Range)
и что это?
Прошу прощения за невежество и кучу вопросов.

Автор - Мур
Дата добавления - 11.10.2012 в 16:33
Serge_007 Дата: Четверг, 11.10.2012, 17:04 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
1. Событие происходит на этом листе
2. Хз, мы же не знаем как Вы пробовали smile
3, 4 При выборе объекта Worksheet в VBE в окне Object, по умолчанию прописывается шаблон процедуры SelectionChange:
[vba]
Code
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub
[/vba]

Private можете убрать, в данном случае это ни на что не влияет


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение1. Событие происходит на этом листе
2. Хз, мы же не знаем как Вы пробовали smile
3, 4 При выборе объекта Worksheet в VBE в окне Object, по умолчанию прописывается шаблон процедуры SelectionChange:
[vba]
Code
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub
[/vba]

Private можете убрать, в данном случае это ни на что не влияет

Автор - Serge_007
Дата добавления - 11.10.2012 в 17:04
Мур Дата: Четверг, 11.10.2012, 17:17 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 436
Репутация: 19 ±
Замечаний: 0% ±

Сейчас все работает.
Serge_007, я понял так:
1. Коды завязанные на событии, записываются в модуль листа.
2.с
Code
Range("A1")
не получалось потому что не в том модуле.
3.4. Еще почитаю где-нибудь.

Большое спасибо.
 
Ответить
СообщениеСейчас все работает.
Serge_007, я понял так:
1. Коды завязанные на событии, записываются в модуль листа.
2.с
Code
Range("A1")
не получалось потому что не в том модуле.
3.4. Еще почитаю где-нибудь.

Большое спасибо.

Автор - Мур
Дата добавления - 11.10.2012 в 17:17
Serge_007 Дата: Четверг, 11.10.2012, 17:20 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Мур)
Еще почитаю где-нибудь

Советую:
Профессиональное программирование на VBA в Excel 2003


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Мур)
Еще почитаю где-нибудь

Советую:
Профессиональное программирование на VBA в Excel 2003

Автор - Serge_007
Дата добавления - 11.10.2012 в 17:20
Мур Дата: Четверг, 11.10.2012, 17:33 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 436
Репутация: 19 ±
Замечаний: 0% ±

Спасибо!
Уже скачал.
 
Ответить
СообщениеСпасибо!
Уже скачал.

Автор - Мур
Дата добавления - 11.10.2012 в 17:33
Мур Дата: Пятница, 12.10.2012, 10:01 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 436
Репутация: 19 ±
Замечаний: 0% ±

Доброе утро(или другое) всем!
В продолжение темы пытаюсь написать что-то путное не выходит.
Не знаю в чем дело, по отдельности все работает, собрал в кучу и опять на выходит.
Может опять с модулями заморочка?
Code
Sub Worksheet_SelectionChange(ByVal Target As Range)
     Dim x, Ans
     x = Sheets("Рабочий лист").Range("AB5")
     Ans = MsgBox("Есть вариант все исправить", 4, "Талантливому ......")
     If (x > 4000) Then Ans
     Select Case Ans
     Case vbYes
         Sheets("Архив").Cells(Rows.Count, 1).End(xlUp).EntireRow.ClearContents
         MsgBox "Последняя запись в архиве очищена"
     Case vbNo
          
         End Select
End Sub
 
Ответить
СообщениеДоброе утро(или другое) всем!
В продолжение темы пытаюсь написать что-то путное не выходит.
Не знаю в чем дело, по отдельности все работает, собрал в кучу и опять на выходит.
Может опять с модулями заморочка?
Code
Sub Worksheet_SelectionChange(ByVal Target As Range)
     Dim x, Ans
     x = Sheets("Рабочий лист").Range("AB5")
     Ans = MsgBox("Есть вариант все исправить", 4, "Талантливому ......")
     If (x > 4000) Then Ans
     Select Case Ans
     Case vbYes
         Sheets("Архив").Cells(Rows.Count, 1).End(xlUp).EntireRow.ClearContents
         MsgBox "Последняя запись в архиве очищена"
     Case vbNo
          
         End Select
End Sub

Автор - Мур
Дата добавления - 12.10.2012 в 10:01
Jhonson Дата: Пятница, 12.10.2012, 10:06 | Сообщение № 10
Группа: Друзья
Ранг: Ветеран
Сообщений: 514
Репутация: 169 ±
Замечаний: 0% ±

Что Вы ждете от этой строчки?
Code
If (x > 4000) Then Ans


"Ничто не приносит людям столько неприятностей, как разум."
 
Ответить
СообщениеЧто Вы ждете от этой строчки?
Code
If (x > 4000) Then Ans

Автор - Jhonson
Дата добавления - 12.10.2012 в 10:06
Jhonson Дата: Пятница, 12.10.2012, 10:15 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 514
Репутация: 169 ±
Замечаний: 0% ±

Подозреваю, что нужно как-то так:
[vba]
Code
Sub Worksheet_Change(ByVal Target As Range)
      Dim x, Ans
      x = Sheets("Рабочий лист").Range("AB5")
      If x <= 4000 Then
         Ans = MsgBox("Есть вариант все исправить", 4, "Талантливому ......")
      End If
      Select Case Ans
      Case vbYes
          Sheets("Архив").Cells(Rows.Count, 1).End(xlUp).EntireRow.ClearContents
          MsgBox "Последняя запись в архиве очищена"
      Case Else           
      End Select
  End Sub
[/vba]


"Ничто не приносит людям столько неприятностей, как разум."
 
Ответить
СообщениеПодозреваю, что нужно как-то так:
[vba]
Code
Sub Worksheet_Change(ByVal Target As Range)
      Dim x, Ans
      x = Sheets("Рабочий лист").Range("AB5")
      If x <= 4000 Then
         Ans = MsgBox("Есть вариант все исправить", 4, "Талантливому ......")
      End If
      Select Case Ans
      Case vbYes
          Sheets("Архив").Cells(Rows.Count, 1).End(xlUp).EntireRow.ClearContents
          MsgBox "Последняя запись в архиве очищена"
      Case Else           
      End Select
  End Sub
[/vba]

Автор - Jhonson
Дата добавления - 12.10.2012 в 10:15
_Boroda_ Дата: Пятница, 12.10.2012, 10:15 | Сообщение № 12
Группа: Админы
Ранг: Местный житель
Сообщений: 16715
Репутация: 6504 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Посмотрите так:
[vba]
Code
Sub Worksheet_Change(ByVal Target As Range)
     Dim x
     x = Sheets("Рабочий лист").Range("AB5")
     If x > 4000 Then
         If MsgBox("Есть вариант все исправить", 4, "Талантливому ......") = vbYes Then
                 Sheets("Архив").Cells(Rows.Count, 1).End(xlUp).EntireRow.ClearContents
                 MsgBox "Последняя запись в архиве очищена"
         End If
     End If
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПосмотрите так:
[vba]
Code
Sub Worksheet_Change(ByVal Target As Range)
     Dim x
     x = Sheets("Рабочий лист").Range("AB5")
     If x > 4000 Then
         If MsgBox("Есть вариант все исправить", 4, "Талантливому ......") = vbYes Then
                 Sheets("Архив").Cells(Rows.Count, 1).End(xlUp).EntireRow.ClearContents
                 MsgBox "Последняя запись в архиве очищена"
         End If
     End If
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 12.10.2012 в 10:15
Мур Дата: Пятница, 12.10.2012, 10:46 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 436
Репутация: 19 ±
Замечаний: 0% ±

Jhonson, приветствую,
Quote
Что Вы ждете от этой строчки?

Code
If (x > 4000) Then Ans

Я думал так:Если x>4000, то выполняется Ans
Я и сейчас бы так думал, если не Вы с _Boroda_.

Ваш код работает не так как мне надо.
MsgBox срабатывает каждый раз, и при любом изменении значений на листе "рабочий лист",
а надо, чтобы только по условию x > 4000.
Все равно, большое спасибо.
 
Ответить
СообщениеJhonson, приветствую,
Quote
Что Вы ждете от этой строчки?

Code
If (x > 4000) Then Ans

Я думал так:Если x>4000, то выполняется Ans
Я и сейчас бы так думал, если не Вы с _Boroda_.

Ваш код работает не так как мне надо.
MsgBox срабатывает каждый раз, и при любом изменении значений на листе "рабочий лист",
а надо, чтобы только по условию x > 4000.
Все равно, большое спасибо.

Автор - Мур
Дата добавления - 12.10.2012 в 10:46
Мур Дата: Пятница, 12.10.2012, 10:47 | Сообщение № 14
Группа: Проверенные
Ранг: Обитатель
Сообщений: 436
Репутация: 19 ±
Замечаний: 0% ±

_Boroda_, благодарю за помощь, вроде все идет как надо.
 
Ответить
Сообщение_Boroda_, благодарю за помощь, вроде все идет как надо.

Автор - Мур
Дата добавления - 12.10.2012 в 10:47
  • Страница 1 из 1
  • 1
Поиск:

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