Как переделать код VB6 под VBA?

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Прошу помощи. Если есть типовой короткий рабочий код для Visual Basic 6.0, то как его переделать под VBA (Excel).
Листинг программы
  1. Option Explicit
  2. Private Sub Form_Activate()
  3. Dim A(7, 8) As Single
  4. Dim S(8) As Single
  5. Dim i%, j%, N(8) As Integer
  6. Randomize Timer
  7. For i = 1 To 7
  8. For j = 1 To 8
  9. A(i, j) = 11 * Rnd - 5.5
  10. Print Format(A(i, j), "0.000");
  11. Next: Print
  12. Next: Print
  13. For j = 1 To 8
  14. For i = 1 To 7
  15. If A(i, j) > 0 Then
  16. S(j) = S(j) + A(i, j)
  17. N(j) = N(j) + 1
  18. End If
  19. Next i, j
  20. For j = 1 To 8
  21. Print Format(S(j), "0.000");
  22. Next
  23. Print
  24. For j = 1 To 8
  25. Print N(j);
  26. Next
  27. End Sub

Условия. Заполнить блок ячеек (7*8) случайными числами из диапазона [-5.5;5.5]. Для каждого столбца матрицы определить сумму и число положительных элементов. Ячейки, содержащие сумму - вывести полужирным курсивом, количество - красным цветом шрифта.

Пробовал самостоятельно, но Эксель замучил меня предупреждениями: "Run-time error ‘9’. Subscript out of range" (Ошибка выполнения '9'. Индекс вне диапазона). Привожу начало кода для VBA, где проходит гладко.
Листинг программы
  1. Sub Echs5()
  2. Dim i%, j%, n%, m%, k%, A()
  3. Dim S(8) As Single, Q(8) As Single, B() As Single
  4. Cells.Clear
  5. n = Int(InputBox("Введите количество строк", "Ввод данных", 7))
  6. m = Int(InputBox("Введите количество столцов", "Ввод данных", 8))
  7. ReDim A(1 To 7, 1 To 8)
  8. Randomize Timer
  9. For i = 1 To n
  10. For j = 1 To m
  11. Cells(i, j) = Round((11 * Rnd) + (-5.5), 3)
  12. Next j
  13. Next i
  14. End Sub

Решение задачи: «Как переделать код VB6 под VBA?»

textual
Листинг программы
  1. Sub Pudge1488()
  2.     Dim a(), b()
  3.     Dim i&, j&, n&
  4.     Dim m1#, m2#, m3#, m4#, m5#, m6#, m7#, m8#, m9#, m10#
  5. '--------------------
  6.    ActiveSheet.UsedRange.EntireRow.Delete
  7.    
  8.     'вводим данные
  9.    On Error Resume Next
  10.     n = Int(InputBox("Введите порядок матрицы", "Ввод данных", 10))
  11.     If Err Then
  12.         Err.Clear
  13.         MsgBox "Введите целое число от 1 до 10", vbInformation
  14.         Exit Sub
  15.     End If
  16.    
  17.     'наполняем массив случайными числами от 1 до 20
  18.    ReDim a(1 To n, 1 To n)
  19.     Randomize
  20.     For i = 1 To n
  21.         For j = 1 To n
  22.             a(i, j) = (20 * Rnd) + 1
  23.         Next
  24.     Next
  25.     Cells(1, 1).Resize(n, n) = a
  26.    
  27.     'находим максимум по каждой строке и возводим его в квадрат
  28.    m1 = a(1, 1): m2 = a(2, 1): m3 = a(3, 1): m4 = a(4, 1): m5 = a(5, 1)
  29.     m6 = a(6, 1): m7 = a(7, 1): m8 = a(8, 1): m9 = a(9, 1): m10 = a(10, 1)
  30.     For i = 1 To n
  31.         For j = 1 To n
  32.         If a(1, j) > m1 Then m1 = (a(1, j)) ^ 2
  33.         If a(2, j) > m2 Then m2 = (a(2, j)) ^ 2
  34.         If a(3, j) > m3 Then m3 = (a(3, j)) ^ 2
  35.         If a(4, j) > m4 Then m4 = (a(4, j)) ^ 2
  36.         If a(5, j) > m5 Then m5 = (a(5, j)) ^ 2
  37.         If a(6, j) > m6 Then m6 = (a(6, j)) ^ 2
  38.         If a(7, j) > m7 Then m7 = (a(7, j)) ^ 2
  39.         If a(8, j) > m8 Then m8 = (a(8, j)) ^ 2
  40.         If a(9, j) > m9 Then m9 = (a(9, j)) ^ 2
  41.         If a(10, j) > m10 Then m10 = (a(10, j)) ^ 2
  42.         Next
  43.      Next
  44.     Cells(1, n + 2) = m1
  45.     Cells(2, n + 2) = m2
  46.     Cells(3, n + 2) = m3
  47.     Cells(4, n + 2) = m4
  48.     Cells(5, n + 2) = m5
  49.     Cells(6, n + 2) = m6
  50.     Cells(7, n + 2) = m7
  51.     Cells(8, n + 2) = m8
  52.     Cells(9, n + 2) = m9
  53.     Cells(10, n + 2) = m10
  54.    
  55. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы