У меня есть рабочий лист, который отслеживает результаты тестов учащихся и информацию о gpa. Макет рабочего листа выглядит следующим образом:
Идентификатор студента, Имя, Балл теста 1, Балл теста 2, Итоговый балл за экзамен, средний балл и итоговый балл. Есть 20 рядов.
Мне нужно получить студенческий билет, независимо от того, сдавали ли они итоговый экзамен, gpa и итоговый балл, и сохранить их в массиве нестандартного типа. Затем будет форма, в которой студент вводит свой идентификатор и извлекает соответствующие данные из массива.
Я поместил образец таблицы из двух строк и код VBA, который у меня есть.
Мой вопрос: как мне получить эти данные в массив?
Я совершенно сбит с толку ...
<div id="good_5932" align=center x:publishsource="Excel">
<table border=0 cellpadding=0 cellspacing=0 width=611 class=xl635932
style='border-collapse:collapse;table-layout:fixed;width:458pt'>
<col class=xl635932 width=74 style='mso-width-source:userset;mso-width-
alt:
2645;width:56pt'>
<col class=xl635932 width=100 style='mso-width-source:userset;mso-width-
alt:
3555;width:75pt'>
<col class=xl635932 width=76 style='mso-width-source:userset;mso-width-
alt:
2702;width:57pt'>
<col class=xl635932 width=77 style='mso-width-source:userset;mso-width-
alt:
2730;width:58pt'>
<col class=xl635932 width=152 style='mso-width-source:userset;mso-width-
alt:
5404;width:114pt'>
<col class=xl635932 width=66 style='width:49pt'>
<col class=xl695932 width=66 style='width:49pt'>
<tr height=37 style='height:27.6pt'>
<td height=37 class=xl655932 width=74
style='height:27.6pt;width:56pt'>Student
ID</td>
<td class=xl655932 width=100 style='border-left:none;width:75pt'>Student
Name</td>
<td class=xl665932 width=76 style='border-left:none;width:57pt'>Test 1
Score</td>
<td class=xl665932 width=77 style='border-left:none;width:58pt'>Test 2
Score</td>
<td class=xl665932 width=152 style='border-
left:none;width:114pt'>Comprehensive
Final</td>
<td class=xl665932 width=66 style='border-left:none;width:49pt'>Student
GPA</td>
<td class=xl685932 width=66 style='border-left:none;width:49pt'>Final
Score</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>5</td>
<td class=xl645932 style='border-top:none;border-left:none'>Joe<span
style='mso-spacerun:yes'> </span></td>
<td class=xl645932 style='border-top:none;border-left:none'>78</td>
<td class=xl675932 style='border-top:none;border-left:none'>12</td>
<td class=xl645932 style='border-top:none;border-left:none'>87</td>
<td class=xl645932 style='border-top:none;border-left:none'>3.5</td>
<td class=xl675932 style='border-top:none;border-left:none'>96</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>7</td>
<td class=xl645932 style='border-top:none;border-left:none'>Hans</td>
<td class=xl645932 style='border-top:none;border-left:none'>80</td>
<td class=xl675932 style='border-top:none;border-left:none'>98</td>
<td class=xl645932 style='border-top:none;border-left:none'>98</td>
<td class=xl645932 style='border-top:none;border-left:none'>3.7</td>
<td class=xl675932 style='border-top:none;border-left:none'>98</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>8</td>
<td class=xl645932 style='border-top:none;border-left:none'>Ferris</td>
<td class=xl645932 style='border-top:none;border-left:none'>92</td>
<td class=xl675932 style='border-top:none;border-left:none'>56</td>
<td class=xl645932 style='border-top:none;border-left:none'>51</td>
<td class=xl645932 style='border-top:none;border-left:none'>3</td>
<td class=xl675932 style='border-top:none;border-left:none'>66</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>10</td>
<td class=xl645932 style='border-top:none;border-left:none'>Mike</td>
<td class=xl645932 style='border-top:none;border-left:none'>45</td>
<td class=xl675932 style='border-top:none;border-left:none'>87</td>
<td class=xl645932 style='border-top:none;border-left:none'>87</td>
<td class=xl645932 style='border-top:none;border-left:none'>2.6</td>
<td class=xl675932 style='border-top:none;border-left:none'>87</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>15</td>
<td class=xl645932 style='border-top:none;border-left:none'>Lauren</td>
<td class=xl645932 style='border-top:none;border-left:none'>98</td>
<td class=xl675932 style='border-top:none;border-left:none'>49</td>
<td class=xl645932 style='border-top:none;border-left:none'>89</td>
<td class=xl645932 style='border-top:none;border-left:none'>4</td>
<td class=xl675932 style='border-top:none;border-left:none'>92</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>62</td>
<td class=xl645932 style='border-top:none;border-left:none'>Larry</td>
<td class=xl645932 style='border-top:none;border-left:none'>75</td>
<td class=xl675932 style='border-top:none;border-left:none'>85</td>
<td class=xl645932 style='border-top:none;border-left:none'>65</td>
<td class=xl645932 style='border-top:none;border-left:none'>3.9</td>
<td class=xl675932 style='border-top:none;border-left:none'>75</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>68</td>
<td class=xl645932 style='border-top:none;border-left:none'>Tony</td>
<td class=xl645932 style='border-top:none;border-left:none'>48</td>
<td class=xl675932 style='border-top:none;border-left:none'>87</td>
<td class=xl645932 style='border-top:none;border-left:none'>89</td>
<td class=xl645932 style='border-top:none;border-left:none'>3.5</td>
<td class=xl675932 style='border-top:none;border-left:none'>96</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>85</td>
<td class=xl645932 style='border-top:none;border-left:none'>Kevin</td>
<td class=xl645932 style='border-top:none;border-left:none'>68</td>
<td class=xl675932 style='border-top:none;border-left:none'>83</td>
<td class=xl645932 style='border-top:none;border-left:none'>79</td>
<td class=xl645932 style='border-top:none;border-left:none'>3.2</td>
<td class=xl675932 style='border-top:none;border-left:none'>80</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>98</td>
<td class=xl645932 style='border-top:none;border-left:none'>Sam</td>
<td class=xl645932 style='border-top:none;border-left:none'>59</td>
<td class=xl675932 style='border-top:none;border-left:none'>62</td>
<td class=xl645932 style='border-top:none;border-left:none'>98</td>
<td class=xl645932 style='border-top:none;border-left:none'>3.6</td>
<td class=xl675932 style='border-top:none;border-left:none'>87</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>101</td>
<td class=xl645932 style='border-top:none;border-left:none'>Zibin</td>
<td class=xl645932 style='border-top:none;border-left:none'>63</td>
<td class=xl675932 style='border-top:none;border-left:none'>68</td>
<td class=xl645932 style='border-top:none;border-left:none'>95</td>
<td class=xl645932 style='border-top:none;border-left:none'>3.5</td>
<td class=xl675932 style='border-top:none;border-left:none'>88</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>105</td>
<td class=xl645932 style='border-top:none;border-left:none'>Ran</td>
<td class=xl645932 style='border-top:none;border-left:none'>49</td>
<td class=xl675932 style='border-top:none;border-left:none'>59</td>
<td class=xl645932 style='border-top:none;border-left:none'>94</td>
<td class=xl645932 style='border-top:none;border-left:none'>3.8</td>
<td class=xl675932 style='border-top:none;border-left:none'>85</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>108</td>
<td class=xl645932 style='border-top:none;border-left:none'>Donia</td>
<td class=xl645932 style='border-top:none;border-left:none'>87</td>
<td class=xl675932 style='border-top:none;border-left:none'>12</td>
<td class=xl645932 style='border-top:none;border-left:none'>92</td>
<td class=xl645932 style='border-top:none;border-left:none'>2.9</td>
<td class=xl675932 style='border-top:none;border-left:none'>104</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>109</td>
<td class=xl645932 style='border-top:none;border-left:none'>Kate</td>
<td class=xl645932 style='border-top:none;border-left:none'>85</td>
<td class=xl675932 style='border-top:none;border-left:none'>57</td>
<td class=xl645932 style='border-top:none;border-left:none'>49</td>
<td class=xl645932 style='border-top:none;border-left:none'>2.6</td>
<td class=xl675932 style='border-top:none;border-left:none'>64</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>110</td>
<td class=xl645932 style='border-top:none;border-left:none'>Sahar</td>
<td class=xl645932 style='border-top:none;border-left:none'>45</td>
<td class=xl675932 style='border-top:none;border-left:none'>59</td>
<td class=xl645932 style='border-top:none;border-left:none'>87</td>
<td class=xl645932 style='border-top:none;border-left:none'>2.7</td>
<td class=xl675932 style='border-top:none;border-left:none'>81</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>115</td>
<td class=xl645932 style='border-top:none;border-left:none'>Milos</td>
<td class=xl645932 style='border-top:none;border-left:none'>21</td>
<td class=xl675932 style='border-top:none;border-left:none'>49</td>
<td class=xl645932 style='border-top:none;border-left:none'> </td>
<td class=xl645932 style='border-top:none;border-left:none'>3.8</td>
<td class=xl675932 style='border-top:none;border-left:none'>35</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>125</td>
<td class=xl645932 style='border-top:none;border-left:none'>Brian</td>
<td class=xl645932 style='border-top:none;border-left:none'>49</td>
<td class=xl675932 style='border-top:none;border-left:none'>98</td>
<td class=xl645932 style='border-top:none;border-left:none'> </td>
<td class=xl645932 style='border-top:none;border-left:none'>3.9</td>
<td class=xl675932 style='border-top:none;border-left:none'>74</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>130</td>
<td class=xl645932 style='border-top:none;border-left:none'>Zane</td>
<td class=xl645932 style='border-top:none;border-left:none'>34</td>
<td class=xl675932 style='border-top:none;border-left:none'>38</td>
<td class=xl645932 style='border-top:none;border-left:none'> </td>
<td class=xl645932 style='border-top:none;border-left:none'>3.2</td>
<td class=xl675932 style='border-top:none;border-left:none'>36</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>145</td>
<td class=xl645932 style='border-top:none;border-left:none'>Istiak</td>
<td class=xl645932 style='border-top:none;border-left:none'>91</td>
<td class=xl675932 style='border-top:none;border-left:none'>87</td>
<td class=xl645932 style='border-top:none;border-left:none'> </td>
<td class=xl645932 style='border-top:none;border-left:none'>3.1</td>
<td class=xl675932 style='border-top:none;border-left:none'>89</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>150</td>
<td class=xl645932 style='border-top:none;border-left:none'>Kumari</td>
<td class=xl645932 style='border-top:none;border-left:none'>100</td>
<td class=xl675932 style='border-top:none;border-left:none'>78</td>
<td class=xl645932 style='border-top:none;border-left:none'> </td>
<td class=xl645932 style='border-top:none;border-left:none'>3</td>
<td class=xl675932 style='border-top:none;border-left:none'>89</td>
</tr>
<tr height=19 style='height:14.4pt'>
<td height=19 class=xl645932 style='height:14.4pt;border-
top:none'>186</td>
<td class=xl645932 style='border-top:none;border-left:none'>John</td>
<td class=xl645932 style='border-top:none;border-left:none'>19</td>
<td class=xl675932 style='border-top:none;border-left:none'>76</td>
<td class=xl645932 style='border-top:none;border-left:none'> </td>
<td class=xl645932 style='border-top:none;border-left:none'>2.9</td>
<td class=xl675932 style='border-top:none;border-left:none'>48</td>
</tr>
<![if supportMisalignedColumns]>
<tr height=0 style='display:none'>
<td width=74 style='width:56pt'></td>
<td width=100 style='width:75pt'></td>
<td width=76 style='width:57pt'></td>
<td width=77 style='width:58pt'></td>
<td width=152 style='width:114pt'></td>
<td width=66 style='width:49pt'></td>
<td width=66 style='width:49pt'></td>
</tr>
<![endif]>
</table>
</div>
Option Explicit
'***** MyType as an array
Public Type Student
StudentID As Integer ' Student ID
FinalScore As Integer ' Studnts final score
ComprehensiveTaker As Integer ' Comprehensivetaker
StudentGPA As Double ' Student's GPA
End Type
Public CEEStudent(20) As Student
Public Sub fillCEEStudent()
Dim j As Long, i As Long, CEEStudent(20) As Student
j = 0
i = 3
If j < 21 And i < 23 Then
j = j
i = i
CEEStudent(j).StudentID = Sheets("Question1").Cells(i, 3).Value
CEEStudent(j).ComprehensiveTaker = IIf(Sheets("Question1").Cells(i, 7).Value <> "", 1, 0)
CEEStudent(j).StudentGPA = Sheets("Question1").Cells(i, 8).Value
CEEStudent(j).FinalScore = Sheets("Question1").Cells(i, 9).Value
Else:
j = 0
i = 3
End If
Dim formNum As Integer, formScore As Integer, formGPA As Double, formInput As String
With VBAProject.UserForm1
formInput = 5 'VBAProject.UserForm1.TextBox1.Value
If IsNumeric(formInput) Then
formNum = formInput
Else
formNum = 0
End If
If formInput <> "" And formNum > 0 Then
If CEEStudent(j).StudentID > formNum Or CEEStudent(j).StudentID < formNum Then
VBAProject.UserForm1.TextBox2.Text = CStr(" ")
VBAProject.UserForm1.BackColor = vbRed
VBAProject.UserForm1.StudentID.BackColor = vbRed
VBAProject.UserForm1.TestScore.BackColor = vbRed
VBAProject.UserForm1.GPA.BackColor = vbRed
VBAProject.UserForm1.TextBox2.BackColor = vbRed
VBAProject.UserForm1.TextBox3.BackColor = vbRed
Else:
VBAProject.UserForm1.TextBox2.Text = CStr(CEEStudent(j).FinalScore)
VBAProject.UserForm1.TextBox3.Text = CStr(CEEStudent(j).StudentGPA)
End If
Else:
formScore = 0
End If
VBAProject.UserForm1.TextBox2.Text = CStr(formScore)
VBAProject.UserForm1.TextBox3.Text = CStr(formGPA)
If VBAProject.UserForm1.TextBox2.Text >= 95 Then
VBAProject.UserForm1.BackColor = vbGreen
VBAProject.UserForm1.TextBox2.BackColor = vbGreen
VBAProject.UserForm1.TextBox3.BackColor = vbGreen
If VBAProject.UserForm1.TextBox2.Text < 95 And VBAProject.UserForm1.TextBox3.Text > 3.5 Then
VBAProject.UserForm1.BackColor = vbBlue
VBAProject.UserForm1.TextBox2.BackColor = Gray
VBAProject.UserForm1.TextBox3.BackColor = Gray
Else:
VBAProject.UserForm1.BackColor = Gray
VBAProject.UserForm1.TextBox2.BackColor = Gray
VBAProject.UserForm1.TextBox3.BackColor = Gray
End If
End If
End With
End Sub
**** ***** EDIT 1019 *
Я добавил HTML-код для фактической таблицы в приведенном выше фрагменте ... Таблица находится на листе с именем Question1 и начинается с C2, представляющего собой «Идентификатор студента», а затем C3, являющегося первой строкой учащихся.
Приведенный выше код компилируется и запускается, но не возвращает значения. Я добавил кнопку, чтобы открыть userForm1 на листе («Question2»), нажмите на нее, и форма откроется. введите номер 5 для идентификатора студента (который соответствует моей информации о студенте в первой строке), и он возвращает 0 для оценки и средний балл, когда он должен вернуть фактические цифры.
Итак, мы куда-то добираемся ....
Массив:
CEEStudent {
(0)StudentID : 5
FinalScore : 96
ComprehensiveTaker : 1
StudentGPA : 3.6
(1)StudentID : 7
FinalScore : 88
ComprehensiveTaker : 1
StudentGPA : 3.8