Электростальский форум
Hi-Tech => Компьютеры, периферия, мультимедиа и ПО => Тема начата: Digger от 13.12.09, 16:36:58
-
Ребят помогите пожалуйста! Надавали в универе задач на VBA, но имел дело ток с QBasic и Delphi, поэтому решаю задачу по аналогии, но что-то не догоняю как на этом языке написать некоторые вещи. Сообщения типа читай мануал или делай сам писать не надо, ибо я тут не халявы ищу а помощи.
Задача такая:
Вообщем нужно ввести одномерный массив, вывести его. Затем из положительных элементов сформировать другой массив и вывести; из отрицательных сформировать третий и вывести.
Вообщем на форме я создал TextBox для ввода размерности массива, кнопку вычислить, textbox для вывода результата.
Вообщем код такой:
Private Sub cmdVich_Click()
Dim A() As Integer
Dim B() As Integer
Dim C() As Integer
Dim k As Integer
Dim q As Integer
Dim i As Integer
Dim n As Integer
n = Val(txtN.Text)
Dim rez As String
ReDim A(n) As Integer
txtRez = ""
rez = rez & " ИСХОДНЫЕ ДАННЫЕ" & vbCrLf & vbCrLf
For i = 1 To n
A(i) = InputBox("Введите элемент A(" & i & _
")", "Ввод массива A(" & n & ")")
rez = rez & "A(" & i & ")= " & A(i) & Space(4)
Next i
rez = rez & vbCrLf & vbCrLf
txtRez = rez
k = 0
q = 0
For i = 1 To n
If A(i) >= 0 Then k = k + 1: B(k) = A(i)
If A(i) < 0 Then q = q + 1: C(q) = A(i)
Next i
For i = 1 To k
rez = rez & k & vbTab
Next i
rez = rez & vbCrLf
txtRez = rez
For i = 1 To q
rez = rez & q & vbTab
Next i
txtRez = rez
End Sub
Private Sub cmdVihod_Click()
Unload Me
End Sub
Вообщем всё что красным работает. то есть массив ввожу и он выводится. Далее я не понимаю как индексу второго массива присвоить индекс первого. То есть в зелёных строках ошибка. И как потом вывести на результат другие два массива????????????????????
-
А Вы как, для B и C массив открыть не хотите?
Естественно, без этих массивов будет ошибка.
Значит так:
После строки
ReDim A(n) As Integer
вставьте еще две строки
ReDim B(n) As Integer
ReDim C(n) As Integer
Также измените код:
For i = 1 To k
rez = rez & k & vbTab
Next i
rez = rez & vbCrLf
txtRez = rez
For i = 1 To q
rez = rez & q & vbTab
Next i
на
For i = 1 To k
rez = rez & B(i) & vbTab
Next i
rez = rez & vbCrLf
txtRez = rez
For i = 1 To q
rez = rez & C(i) & vbTab
Next i
Тогда все получится.
Успехов.
LEND
-
А Вы как, для B и C массив открыть не хотите?
Естественно, без этих массивов будет ошибка.
Значит так:
После строки
ReDim A(n) As Integer
вставьте еще две строки
ReDim B(n) As Integer
ReDim C(n) As Integer
Также измените код:
For i = 1 To k
rez = rez & k & vbTab
Next i
rez = rez & vbCrLf
txtRez = rez
For i = 1 To q
rez = rez & q & vbTab
Next i
на
For i = 1 To k
rez = rez & B(i) & vbTab
Next i
rez = rez & vbCrLf
txtRez = rez
For i = 1 To q
rez = rez & C(i) & vbTab
Next i
Тогда все получится.
Успехов.
LEND
Спасибо большое! Всё таки есть в мире добрые люди)) Насчет открытия массивов... До ужаса не внимателен :bh:
-
Чтоб не плодить похожие темы спрошу тут.
Как оптимизировать вот такой код (может в цикле как) ?
Sub GroupCheckBox()
Dim i, j As Integer
If OptionButton1.Value = True Then
i = Worksheets("Work").Range("B1")
j = Worksheets("Work").Range("F1")
End If
If OptionButton2.Value = True Then
i = Worksheets("Work").Range("C1")
j = Worksheets("Work").Range("G1")
End If
If OptionButton3.Value = True Then
i = Worksheets("Work").Range("D1")
j = Worksheets("Work").Range("H1")
End If
If OptionButton4.Value = True Then
i = Worksheets("Work").Range("E1")
j = Worksheets("Work").Range("I1")
End If
If OptionButton5.Value = True Then
i = Worksheets("Work").Range("B2")
j = Worksheets("Work").Range("F2")
End If
If OptionButton6.Value = True Then
i = Worksheets("Work").Range("C2")
j = Worksheets("Work").Range("G2")
End If
If OptionButton7.Value = True Then
i = Worksheets("Work").Range("D2")
j = Worksheets("Work").Range("H2")
End If
If OptionButton8.Value = True Then
i = Worksheets("Work").Range("E2")
j = Worksheets("Work").Range("I2")
End If
If OptionButton9.Value = True Then
i = Worksheets("Work").Range("B3")
j = Worksheets("Work").Range("F3")
End If
If OptionButton10.Value = True Then
i = Worksheets("Work").Range("C3")
j = Worksheets("Work").Range("G3")
End If
If OptionButton11.Value = True Then
i = Worksheets("Work").Range("D3")
j = Worksheets("Work").Range("H3")
End If
If OptionButton12.Value = True Then
i = Worksheets("Work").Range("E3")
j = Worksheets("Work").Range("I3")
End If
i = i + j
Worksheets("Work").Range("N1").FormulaR1C1 = "=" & i
End Sub
OptionButton-он планируется 30 штук
-
1. создать массив опшнов. (задаешь одинаковое имя и свойство index)
2. задать свойство Tag опшнов нужным образом. Перебирать циклом дочерние контролы (свойство Controls формы или другого элемента-контейнера) и проверять их сначала на типа опшн-батна, потом смотреть тег (скажем, можешь сделать тег 2 буквы - соответствующие ячейки для i и j)
-
Спасибо попробую.