Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 9
1

Использование нескольких циклов и нескольких условий

08.10.2010, 13:45. Показов 2738. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть компетиции (TT1, TT2, TT3 и т.д.), каждой компетенции соответствуют 3 уровня ее освоения - ML1, ML2, ML3 (TT1.ML1, TT1.ML2, TT1.ML3; TT2.ML1, TT2.ML2, TT2.ML3 и т.д.)
Есть листы excel. На одном - код компетиции (1 столбец) и ее название (2 столбец). На втором - в 4 строке подряд идут все эти уровни (TT1.ML1, TT1.ML2, TT1.ML3; TT2.ML1, TT2.ML2, TT2.ML3 и т.д.), а в всех более нижних строках должны заноситься числовые значения этих уровней.

Я создала форму , где есть 10 комбобокс (т.к. это макс число компетиций). Источником для комбобокс являются названия компетиций. И рядом с каждой комбобокс есть 3 поля текстбокс, через которые должны заноситься данные о ML1, ML2, ML3 для каждой компетиции.
Прилагаю рисунок для наглядности:
Использование нескольких циклов и нескольких условий

А вот дальше появляются проблемы.
Надо, чтобы эти данные о ML1, ML2, ML3 компетиции вводились на 2й лист именно в те ячейки, которые соответствуют выбранной в комбобокс компетиции.

Например!:
Я выбираю в комбобокс1 значение "компетиция1" и ML1 = 10% (TextBox58), ML1 = 20% (TextBox59)
, ML1 = 30% (TextBox60). На 1м листе выбирается код данной компетенции (TT1), а на втором листе в строке уровней всех компетенций (TT1.ML1, TT1.ML2, TT1.ML3; TT2.ML1, TT2.ML2, TT2.ML3 и т.д.) ищутся лишь те ячейки, где первые 3 символа уровня = коду компетенции (TT1 = первые 3 символа TT1.ML1). после этого на 2й лист в первую пустую строку заносятся 10%(под TT1.ML1), 20%(под TT1.ML2), 30%(под TT1.ML3).

И надо, чтобы во второй комбобокс я выбрала другую компетенцию (например, TT3) и значения ML занеслись через текстбокс куда надо (под TT3.ML1, TT13ML2, TT3.ML3).

Я смогла написать код, чтобы это работало для одной комбобокс, но когда я пытаюсь сделать это для всех 10 комбобокс - получается жуткая путаница. Да даже для 2х не получается!

Было бы круто, если бы знающие люди подсказали, что же тут делать надо =)))


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Private Sub CommandButton1_Click()
Dim N As Integer
Dim P As Integer
Dim Q As Integer
Dim Компетенции As Object
Dim Тестирование As Object
Dim ML As Object
 
 
For N = 5 To 10000
    
If Тестирование.Cells(N, 2) = "" Then
For P = 2 To 1000
      If Компетенции.Cells(P, 2) = ComboBox2.Value Then
      For Q = 16 To 10000
      If Компетенции .Cells(P, 1) = Left(Тестирование.Cells(4, Q), 3) Then
              Тестирование.Cells(N, Q) = TextBox58.Value
      Тестирование.Cells(N, Q + 1) = TextBox59.Value
    Тестирование.Cells(N, Q + 2) = TextBox60.Value
     Exit For
    End If
    Next
     Exit For
        End If
    Next
    
 
Exit For
End If
Next
Unload Me
End Sub
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.10.2010, 13:45
Ответы с готовыми решениями:

Использование нескольких условий в операторе if
Я решил создать что-то типо калькулятора, но есть одна проблема. У меня получилось сделать так,...

Использование циклов и условий: табулирование функции, заданной графически
Вычислить и вывести на экран в виде таблице значений функции,заданной графически , на интервале...

Проверка нескольких условий
Нужно проверить сразу несколько условий if($a == $b && $c == $d){ echo "true"; } Нужно в...

If проверка нескольких условий
Добрый день! Не знал куда написать - в раздел VBA или сюда. Пусть будет сюда. Может это только...

2
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 9
08.10.2010, 15:27  [ТС] 2
Вернее я могу добавлять еще переменные и просто клонировать весь кусок до состояния (например, для двух комбобокс), но это же явно очень корявый вариант=((((
Помогите подправить это!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Private Sub CommandButton1_Click()
Dim N As Integer
Dim P As Integer
Dim Q As Integer
Dim R As Integer
Dim U As Integer
Dim Компетенции As Object
Dim Тестирование As Object
Dim ML As Object
 
 
For N = 5 To 10000
    
If Тестирование.Cells(N, 2) = "" Then
For P = 2 To 1000
      If Компетенции.Cells(P, 2) = ComboBox2.Value Then
      For Q = 16 To 10000
      If Компетенции .Cells(P, 1) = Left(Тестирование.Cells(4, Q), 3) Then
              Тестирование.Cells(N, Q) = TextBox58.Value
      Тестирование.Cells(N, Q + 1) = TextBox59.Value
    Тестирование.Cells(N, Q + 2) = TextBox60.Value
     Exit For
    End If
    Next
     Exit For
        End If
    Next
    For U = 2 To 1000
      If Êîìïåòåíöèè.Cells(U, 2) = ComboBox3.Value Then
      For R = 16 To 10000
      If Êîìïåòåíöèè.Cells(U, 1) = Left(Òåñòèðîâàíèå.Cells(4, R), 3) Then
              Òåñòèðîâàíèå.Cells(N, R) = TextBox61.Value
      Òåñòèðîâàíèå.Cells(N, R + 1) = TextBox62.Value
    Òåñòèðîâàíèå.Cells(N, R + 2) = TextBox63.Value
     Exit For
    End If
    Next
     Exit For
        End If
    Next
 
 
Exit For
End If
Next
Unload Me
End Sub
0
496 / 130 / 19
Регистрация: 30.03.2010
Сообщений: 224
08.10.2010, 17:55 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Private Sub CommandButton1_Click()
Dim N As Integer
Dim Компетенции As Object
Dim Тестирование As Object
Dim ML As Object
For N = 5 To 10000
    If Тестирование.Cells(N, 2) = "" Then
       NN N, ComboBox2, TextBox58, TextBox59, TextBox60
       NN N, ComboBox3, TextBox61, TextBox62, TextBox63
       ....и т.д......................
       Exit For
    End If
Next
Unload Me
End Sub
Private Function NN(ByVal Iteration As Long, myComboBox As Object, myTextBox1 As Object, myTextBox2 As Object, myTextBox3 As Object)
Dim I As Long
Dim J As Long
For I = 2 To 1000
    If Компетенции.Cells(I, 2) = myComboBox.Value Then
       For J = 16 To 10000
           If Компетенции.Cells(I, 1) = Left(Тестирование.Cells(4, J), 3) Then
              Тестирование.Cells(Iteration, J) = TextBox1.Value
              Тестирование.Cells(Iteration, J + 1) = TextBox2.Value
              Тестирование.Cells(Iteration, J + 2) = TextBox3.Value
              Exit For
           End If
       Next
       Exit For
    End If
Next
End Function
Трудно сказать, насколько это работоспособно - отладиться было не на чем

Добавлено через 2 минуты
небольшая поправка:
в функции NN
строки:
Visual Basic
1
2
3
Тестирование.Cells(Iteration, J) = TextBox1.Value
Тестирование.Cells(Iteration, J + 1) = TextBox2.Value
Тестирование.Cells(Iteration, J + 2) = TextBox3.Value
заменить на:
Visual Basic
1
2
3
Тестирование.Cells(Iteration, J) = myTextBox1.Value
Тестирование.Cells(Iteration, J + 1) = myTextBox2.Value
Тестирование.Cells(Iteration, J + 2) = myTextBox3.Value
0
08.10.2010, 17:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.10.2010, 17:55
Помогаю со студенческими работами здесь

Проверка нескольких условий
Здравствуйте. Есть массив чисел А. Мне нужно проверить все ли они меньше единицы -...

Объединение нескольких условий
как написать 1<x<2, чтобы компьютеру было понятно?

Сравнение нескольких условий
Здравствуйте! Обычно стараюсь разбираться сам,но сейчас я в тупике,даже яндекс не в силах помочь и...

Задание нескольких условий if
Ребята здравствуйте, помогите пожалуйсто, немогу понять как организовать условия так, что-бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru