Автор Тема: Требуется помощь в решении задачи на VBA  (Прочитано 2201 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Digger

  • Старожил
  • ****
  • Сообщений: 384
  • Карма: -30
  • Пол: Мужской
  • Нарушение п.1.15. ППФ
    • Просмотр профиля
Ребят помогите пожалуйста! Надавали в универе задач на 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
Вообщем всё что красным работает. то есть массив ввожу и он выводится. Далее я не понимаю как индексу второго массива присвоить индекс первого. То есть в зелёных строках ошибка. И как потом вывести на результат другие два массива????????????????????
Нарушение п.1.15. правил форума.


Оффлайн LEND

  • Пользователь
  • **
  • Сообщений: 95
  • Карма: 155
  • Истина как всегда где-то рядом
    • Просмотр профиля
А Вы как, для 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
В мире временном, сущность которого - тлен,
Не сдавайся вещам несущественным в плен. © О.Х.

Оффлайн Digger

  • Старожил
  • ****
  • Сообщений: 384
  • Карма: -30
  • Пол: Мужской
  • Нарушение п.1.15. ППФ
    • Просмотр профиля
А Вы как, для 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:
Нарушение п.1.15. правил форума.

Оффлайн Pavv

  • Ветеран
  • *****
  • Сообщений: 4645
  • Карма: 354
  • Пол: Мужской
  • 007
    • Просмотр профиля
Чтоб не плодить похожие темы спрошу тут.

Как оптимизировать вот такой код (может в цикле как) ?

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 штук
« Последнее редактирование: 06.04.10, 09:29:48 от Pavv »

Оффлайн LEO

  • Ветеран
  • *****
  • Сообщений: 4417
  • Карма: 310
  • Пол: Мужской
    • Просмотр профиля
1. создать массив опшнов. (задаешь одинаковое имя и свойство index)
2. задать свойство Tag опшнов нужным образом. Перебирать циклом дочерние контролы (свойство Controls формы или другого элемента-контейнера) и проверять их сначала на типа опшн-батна, потом смотреть тег (скажем, можешь сделать тег 2 буквы - соответствующие ячейки для i и j)
http://is.gd/fpTeSMПродам книжки про Ajax и ASP.NET, http://is.gd/lDL64HПриглашаю в Dropbox

Оффлайн Pavv

  • Ветеран
  • *****
  • Сообщений: 4645
  • Карма: 354
  • Пол: Мужской
  • 007
    • Просмотр профиля
Спасибо попробую.