Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 |

 

  Вопрос: Сравнение данных Добавлено: 17.03.09 21:01  

Автор вопроса:  Владимир | Web-сайт: нет
Здравствуйте помогите, если не затруднит мне данно 9 числовых окон для ввода (пример Val(Text.Text)), как сделать так что бы программа прежде чем переходить на другую форму(эти данные я ввожу в кнопку далее) проверяла эти действия (приведенные ниже) и выводила ошибки не через Label1.а через MsgBox и пока не введешь правильно данные что бы не переходила на другую форму. Заранее благодарен!!!


Private Sub Command4_Click()
If Val(Text1.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
If Val(Text2.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
If Val(Text3.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
If Val(Text4.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
If Val(Text5.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
If Val(Text6.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
If Val(Text7.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
If Val(Text8.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
If Val(Text9.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else

If Val(Text1.Text) < Val(Text2.Text) Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
If Val(Text2.Text) < Val(Text3.Text) Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
If Val(Text5.Text) < Val(Text4.Text) Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
If Val(Text6.Text) < Val(Text5.Text) Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
If Val(Text7.Text) < Val(Text8.Text) Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
If Val(Text8.Text) < Val(Text9.Text) Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else

Form2.Hide
Form4.Show
End Sub

Ответить

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

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



Вопросов: 5
Ответов: 344
 Профиль | | #1 Добавлено: 17.03.09 21:49
Private Sub Command4_Click()
If Val(Text1.Text) < 0 Then msgbox "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!": exit sub
'и т.д.

Form2.Hide
Form4.Show
End Sub

Ответить

Номер ответа: 2
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #2
Добавлено: 17.03.09 22:46
Может текстовые поля сделать массивом текстбоксов? Тогда будет смотреться красивее.

Ответить

Номер ответа: 3
Автор ответа:
 Владимир



Вопросов: 2
Ответов: 8
 Web-сайт: нет
 Профиль | | #3
Добавлено: 18.03.09 08:56
Спасибо!Отличный сайт!!!Быстрая помощь и в нужном направлении без всякой воды!!!!!

Ответить

Номер ответа: 4
Автор ответа:
 Владимир



Вопросов: 2
Ответов: 8
 Web-сайт: нет
 Профиль | | #4
Добавлено: 18.03.09 08:57
А что придадут эти массивы с текстбоксами???

Ответить

Номер ответа: 5
Автор ответа:
 Владимир



Вопросов: 2
Ответов: 8
 Web-сайт: нет
 Профиль | | #5
Добавлено: 18.03.09 09:00
У меня просто последующие формы связаны с этими текстами куда вводятся данные,если сделать эти массивы как вы говорите что бы было красивее это не повлияет на те расчеты с которыми связаны эти текста для ввода???

Ответить

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



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #6 Добавлено: 18.03.09 09:30
Владимир пишет:
Спасибо!Отличный сайт!!!Быстрая помощь и в нужном направлении без всякой воды!!!!!

ыыы... тебе просто повезло...

mc-black пишет:
Может текстовые поля сделать массивом текстбоксов? Тогда будет смотреться красивее.

в вба вроде не сделать массив контролов...

Ответить

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



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #7 Добавлено: 18.03.09 14:54
Вот тебе типичный варварский код )

  1. Option Explicit
  2.  
  3. Private Sub CommandButton1_Click()
  4.     Dim Item As Object
  5.     Dim Error As Boolean
  6.  
  7.     For Each Item In Controls
  8.         If InStr(Item.Name, "TextBox") Then If Val(Item.Text) = 0 Then Error = True: Exit For
  9.     Next
  10.     If Error Then
  11.         MsgBox "Ошибка в данных. ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!"
  12.     Else
  13.         Form1.Hide
  14.         Form2.Show
  15.     End If
  16. End Sub

Ответить

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



Вопросов: 5
Ответов: 344
 Профиль | | #8 Добавлено: 18.03.09 15:08
  1. Dim cnt_TB As Integer
  2. Dim a_tb() As MSForms.TextBox
  3.  
  4. Private Sub UserForm_Initialize()
  5. Dim C As MSForms.Control
  6. For Each C In Me.Controls
  7.     If TypeName(C) = "TextBox" Then
  8.         If VBA.Left(C.Name, 4) = "Text" And Val(Mid(C.Name, 5)) > 0 Then
  9.             cnt_TB = cnt_TB + 1
  10.             ReDim Preserve a_tb(1 To cnt_TB)
  11.             Set a_tb(cnt_TB) = C
  12.             'возможны коллизии следующего плана: a_tb(1)=me.controls("Text9")и т.п.
  13.             'их можно избежать, предварительно подсчитав к-во TextBox-ов, один раз определить массив a_tb и далее
  14.             'Set a_tb(Val(Mid(C.Name, 5))) = C
  15.         End If
  16.     End If
  17. Next C
  18. End Sub
  19.  
  20. Private Sub Command4_Click()
  21. Dim I As Integer
  22. For I = 1 To cnt_TB
  23.     If Val(a_tb(I).Text) < 0 Then a_tb(I).SetFocus: MsgBox "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!": Exit Sub
  24. Next I
  25.  
  26. 'If Val(Text1.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
  27. 'If Val(Text2.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
  28. 'If Val(Text3.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
  29. 'If Val(Text4.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
  30. 'If Val(Text5.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
  31. 'If Val(Text6.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
  32. 'If Val(Text7.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
  33. 'If Val(Text8.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
  34. 'If Val(Text9.Text) < 0 Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
  35.  
  36. 'а вот эти строки придется оставить, т.к. закономерности для укладки их в цикл я с ходу не вижу.
  37. If Val(Text1.Text) < Val(Text2.Text) Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
  38. If Val(Text2.Text) < Val(Text3.Text) Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
  39. If Val(Text5.Text) < Val(Text4.Text) Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
  40. If Val(Text6.Text) < Val(Text5.Text) Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
  41. If Val(Text7.Text) < Val(Text8.Text) Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
  42. If Val(Text8.Text) < Val(Text9.Text) Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!" Else
  43.  
  44. Form2.Hide
  45. Form4.Show
  46. End Sub

Ответить

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



Вопросов: 23
Ответов: 417
 Профиль | | #9 Добавлено: 18.03.09 16:43
:-) Ну "с ходу" можно что-то вроде такого попробовать:
  1. If I < cnt_TB then
  2.   If Val(a_tb(I).Text) < Val(a_tb(I+1).Text) Then Label15 = "Вы ошиблись при вводе данных.ПРОВЕРЬТЕ ЕЩЕ РАЗ!!!"
  3. end if

Ответить

Номер ответа: 10
Автор ответа:
 Владимир



Вопросов: 2
Ответов: 8
 Web-сайт: нет
 Профиль | | #10
Добавлено: 18.03.09 18:43
Ага ты прав он выдал ошибку в 23 строке и выделил a_tb напиши пожалусто по точнее где и как задавать этот массив.Всего у меня 9(TextBox) окон для ввода,на этой форме(Form2).

Ответить

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



Вопросов: 5
Ответов: 344
 Профиль | | #11 Добавлено: 18.03.09 19:41
Jasmin, обрати внимание - условий 6, а не 8.
И к тому же в 3-м и 4-м условии знак < следует менять на >!

Владимир, уточни - ты действительно работаешь в VBA?
Приведенный тобой код (судя по именам) явно из VB6. Возможно, ошибка именно из-за этого.

Ответить

Номер ответа: 12
Автор ответа:
 Владимир



Вопросов: 2
Ответов: 8
 Web-сайт: нет
 Профиль | | #12
Добавлено: 18.03.09 19:57
fAndOrInДа VB6.0 русская,не нету в именах ошибки,когда же ты подсказал как через MsgBox все прекрасно работает!!!Просто мне стало интересно,в чем отличие если через массив красивее!!!

Ответить

Номер ответа: 13
Автор ответа:
 Владимир



Вопросов: 2
Ответов: 8
 Web-сайт: нет
 Профиль | | #13
Добавлено: 18.03.09 20:19
fAndOrInИ еще если не затруднит подскажи как можно Frame сделать прозрачным,вроде уже все в свойствах перепробывал!

Ответить

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



Вопросов: 5
Ответов: 344
 Профиль | | #14 Добавлено: 18.03.09 21:03
Вариант для VB6! Аффтар, ты влез не в ту ветку форума и заставил меня потеть!
  1. Option Explicit
  2. Dim a_tb(1 To 9) As VB.TextBox
  3.  
  4. Private Sub Form_Load()
  5. Dim I As Integer
  6. For I = 1 To 9
  7.   Set a_tb(I) = Me.Controls("Text" & I)
  8.   a_tb(I) = I
  9. Next I
  10. End Sub
  11.  
  12. Private Sub Command4_Click()
  13. Dim I As Integer
  14. For I = 1 To 9
  15.   If Val(a_tb(I).Text) < 0 Then Exit For
  16.   If (I Mod 3) <> 0 Then 'Jasmin, проверка последних шести условий вряд ли стоила таких усилий воспаленного мозга!
  17.     If (I \ 3) = 1 Then
  18.       If Val(a_tb(I).Text) > Val(a_tb(I + 1).Text) Then Exit For
  19.     Else
  20.       If Val(a_tb(I).Text) < Val(a_tb(I + 1).Text) Then Exit For
  21.     End If
  22.   End If
  23. Next I
  24. If I <= 9 Then
  25.   a_tb(I).SetFocus: MsgBox "Вы ошиблись при вводе данных в указанный (или следущий) TextBox!!!"
  26. Else
  27.   Form2.Hide
  28.   Form4.Show
  29. End If
  30. End Sub


А насчет Frame - без API наверно не получится, может кто другой подскажет?

Ответить

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



Вопросов: 5
Ответов: 344
 Профиль | | #15 Добавлено: 18.03.09 21:08

Offtop:
Оказывается, на форуме нет VB6-ветки

Ответить

Страница: 1 | 2 |

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



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