Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 493

Раздел: Basic
/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!

Я упростил вопрос, который был задан в предыдущей теме.

Есть код:

Private Sub CommandButton1_Click()
Dim i, j As Integer
For i = 1 To 1000
If Cells(i, 27).Text = ComboBox1.Text Then
For j = 1 To 31
‘??????
End Sub

в этот код необходимо вставить два сообщение с условиями.
Код первого сообщения:

MsgBox "????????", 16, "Запрет ввода"
Оно срабатывает кода в Cells(j, 26).Value нет значение, и не дает выполнению последующих действий.

Код второго сообщения:

If MsgBox("???????", _
vbYesNo Or 48, "Ввод данных разрешен") = vbNo Then Exit Sub
Оно срабатывает когда в Cells(j, 26).Value есть значения. При нажатии кнопки “Да” выполняется код Cells(i + 35, 21).Value = CDbl(TextBox1.Text)При нажатии кнопки “Нет” сообщение закрывается действия ни какие не выполняются.

Примечание #1 (5 декабря 2009, 15:07):
Код, в который необходимо вставить сообщения с условиями.


Private Sub CommandButton1_Click()

Dim i, j As Integer

For i = 1 To 1000
If Cells(i, 27).Text = ComboBox1.Text Then

'Необходимо вставить сообщения с условиями

Next
End If
Next
End Sub
Примечание #2 (5 декабря 2009, 15:24):
Немного изменил код.
Private Sub CommandButton1_Click()

Dim i, j As Integer

For i = 1 To 1000
If Cells(i, 27).Text = ComboBox1.Text Then
For j = 1 To 31

'Необходимо вставить сообщения с условиями

Next
End If
Next
End Sub

resseg Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: resseg (статус: Посетитель)
Вопрос отправлен: 5 декабря 2009, 14:55
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Егор

Здравствуйте, resseg!
Вот код:

Private Sub CommandButton1_Click()
Dim i As Integer, j As Integer
 
For i = 1 To 1000
  If Cells(i, 27).Text = "декабрь" Then
    For j = 1 To 31
      If Cells(i - 1, 26).Value <> "" Then GoTo DopUslov
    Next j
    MsgBox "????????", 16, "Запрет ввода"
    Exit Sub
DopUslov:
    'Дополнительное сообщение
    If MsgBox("ВНИМАНИЕ" & vbCrLf & vbCrLf & "????????", _
              vbYesNo Or 48, "Ввод данных разрешен") = vbNo Then Exit Sub
    Cells(i + 35, 21).Value = CDbl(TextBox1.Text)
  End If
Next
End Sub

Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 6 декабря 2009, 20:58
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 39; последнее сообщение — 6 декабря 2009, 23:03; участников в обсуждении: 2.

Страницы: [« Предыдущая] [1] [2]

resseg

resseg (статус: Посетитель), 6 декабря 2009, 19:50 [#21]:

Егор продолжаем, или что не ясно?
Егор

Егор (статус: 10-ый класс), 6 декабря 2009, 19:51 [#22]:

да, продолжаем
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
resseg

resseg (статус: Посетитель), 6 декабря 2009, 19:53 [#23]:

6.При нажатие кнопки ДА числовое значение TextBox1 вводится в столбец 21 строки 35 Cells(i + 35, 21), от ориентира ячейки месяц. При нажатие кнопки НЕТ происходи просто выход и закрытие сообщения.
Если тут ясно и я иду в правильном направлении, то мне пока сказать нечего…
resseg

resseg (статус: Посетитель), 6 декабря 2009, 19:54 [#24]:

p/s

Данный код у меня получился таким

Private Sub CommandButton1_Click()
Dim i, j As Integer

For i = 1 To 1000
If Cells(i, 27).Text = ComboBox1.Text Then
For j = 1 To 31
If Cells(i + j - 1, 26).Value = "" Then
MsgBox "????????", 16, "Запрет ввода"
Exit Sub
Else
'Дополнительное сообщение
If MsgBox("ВНИМАНИЕ" & vbCrLf & vbCrLf & "????????", _
vbYesNo Or 48, "Ввод данных разрешен") = vbNo Then Exit Sub
Cells(i + 35, 21).Value = CDbl(TextBox1.Text)
End If
Next
End If
Next
End Sub

Он всегда при клике выводит сообщение о запрете ввода???
Егор

Егор (статус: 10-ый класс), 6 декабря 2009, 20:01 [#25]:

Цитата (resseg):

...в столбец 21 строки 35 от ориентира ячейки месяц...

не понял
пусть у нас "декабрь" записано, скажем, в ячейку (строчка=100, столбец=27), то мы должны записать значение из TextBox1 в ячейку:
* (строчка=35, столбец=21)
* (строчка=100+35, столбец=27+21)
* (строчка=100+35, столбец=21)
* или ещё куда?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
resseg

resseg (статус: Посетитель), 6 декабря 2009, 20:04 [#26]:

момент
resseg

resseg (статус: Посетитель), 6 декабря 2009, 20:12 [#27]:

Как у меня
декабрь записан строка=413 столбец=27 то мы должны записать значение из TextBox1 в ячейку строка=448 столбец=21
значит строка=413+35 столбец=27-6

Должно по идеи быть так * (строчка=413+35, столбец=21)

У меня выглядит это так Cells(i + 35, 21).Value = CDbl(TextBox1.Text)
resseg

resseg (статус: Посетитель), 6 декабря 2009, 20:42 [#28]:

Все месяца в 27 столбце разделены друг от друга равным количеством строк,для удобства написания кода
resseg

resseg (статус: Посетитель), 6 декабря 2009, 21:04 [#29]:

Cells(i, 27).Text = "декабрь" ???
В место декабря можно поставить ComboBox1.Text где прописаны двенадцать месяцев, или это только на один месяц?
resseg

resseg (статус: Посетитель), 6 декабря 2009, 21:15 [#30]:

Тоже самое как и у меня. Постоянно выходит сообщение о запрете ввода ???
Егор

Егор (статус: 10-ый класс), 6 декабря 2009, 21:18 [#31]:

так...
сейчас проверю...
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 6 декабря 2009, 21:54 [#32]:

а так:

Private Sub CommandButton1_Click()
Dim i As Integer, j As Integer, ccc
 
For i = 1 To 1000
  If Cells(i, 27).Text = ComboBox1.Text Then
    For j = 1 To 31
      If Cells(i + j - 1, 26).Value <> "" Then GoTo DopUslov
    Next j
    MsgBox "????????", 16, "Запрет ввода"
    Exit Sub
DopUslov:
    'Дополнительное сообщение
    If MsgBox("ВНИМАНИЕ" & vbCrLf & vbCrLf & "????????", _
              vbYesNo Or 48, "Ввод данных разрешен") = vbNo Then Exit Sub
    Cells(i + 35, 21).Value = CDbl(TextBox1.Text)
  End If
Next
End Sub
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
resseg

resseg (статус: Посетитель), 6 декабря 2009, 22:09 [#33]:

Я так понял Вы добавили , ccc Что это обозначает если не секрет? Код заработал.
Егор

Егор (статус: 10-ый класс), 6 декабря 2009, 22:18 [#34]:

О!
я тут использовал суперпатентованную технологию, использование которой возможно только с моего письменного согласия, получить которое вы сможете, купив персональную лицензию
:)))))

а если серьёзнее, то я просто ошибся в первом случае :) забыл сделать перебор ячеек и цикл крутился, проверяя 31 раз одну и ту же ячейку :)

упс... а вот переменную ссс надо убрать - я её для отладки использовал, а так она не нужна :)
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
resseg

resseg (статус: Посетитель), 6 декабря 2009, 22:21 [#35]:

А тогда в чем различие первого и второго кода? Честно сказать не могу найти.
resseg

resseg (статус: Посетитель), 6 декабря 2009, 22:32 [#36]:

Понял (i + j - 1, 26)
Благодарю за терпение.
Егор

Егор (статус: 10-ый класс), 6 декабря 2009, 22:34 [#37]:

в первом коде я не сделал перехода к следующей ячейке:
For j = 1 To 31
  If Cells(i - 1, 26).Value <> "" Then GoTo DopUslov
Next j
а во втором - сделал:
  If Cells(i + j - 1, 26).Value <> ...
надо было поставить ещё "+j" :)

да, забыл спросить

Цитата (resseg):

... Как у меня декабрь записан строка=413 столбец=27 ...

проверять мы должны 31 пустую ячейку, начиная (в этом случае) со строки 413 или начиная со строки 414? если со строки 414, то в коде надо исправить:
  If Cells(i + j, 26).Value <> ...
т.е. убрать "- 1"
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
resseg

resseg (статус: Посетитель), 6 декабря 2009, 22:51 [#38]:

Месяц находится на строке 413 столбец 27 и первая ячейка проверки тоже на 413 строке столбца 26 код проверки (i + j - 1, 26) Вроде работает значение ставил и вконец месяца и в начало 26 столбца, сообщение выходит.
resseg

resseg (статус: Посетитель), 6 декабря 2009, 23:03 [#39]:

Завтра вставлю код в рабочий файл, проверю, если что сообщу.
А пока удачи Вам Егор в борьбе за лидерство.

Страницы: [« Предыдущая] [1] [2]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 апреля 2026, 22:05
Выполнено за 0.04 сек.