Срочно, пожалуйста, помогите по Vba

Тема в разделе "Другие", создана пользователем stap, 4 дек 2005.

Статус темы:
Закрыта.
  1. stap

    stap Гость

    У меня есть код

    Sub EntRand(n As Integer, m As Integer)
    For i = 1 To n
    For j = 1 To m
    Cells(i, j) = Int(100 * Rnd)
    Next j
    Next i
    MsgBox ("Matrix generated")
    End Sub

    Sub EntSelf(n As Integer, m As Integer)
    For i = 1 To n
    For j = 1 To m
    Cells(i, j) = InputBox("Element " & i & "," & j & ":")
    Next j
    Next i
    MsgBox ("Matrix generated")
    End Sub

    Sub Diag(n As Integer, m As Integer)
    For i = 1 To n
    Cells(i, i).Font.Color = RGB("0.255.255")
    Next i
    End Sub

    Sub Otr()
    End Sub

    Sub Summ()
    End Sub

    Sub Razd(k As Integer)
    k = InputBox("Введите число, на которое следует поделить все элементы матрицы")
    For i = 1 To n
    For j = 1 To m
    End Sub

    Sub main()
    Dim n As Integer, m As Integer
    While 1
    resp = InputBox("1 - Ввод размера, 2 - Ввод матрицы, 3 - Диагональ, 4 - Вывести все строки матрицы, в которых есть хотя бы один отрицательный элемент, 5 - Просуммировать элементы матрицы по главной диагонали, 6 - Поделить все элементы матрицы на число, вводимое с экрана по запросу пользователем, Другая - Выход")
    Select Case resp

    Case 1
    n = InputBox("N=")
    m = InputBox("M=")

    Case 2
    resp = InputBox("1 - Автоматически, 2 - Вручную, Другая - Главное меню")
    Select Case resp

    Case 1
    Call EntRand(n, m)
    Case 2
    Call EntSelf(n, m)
    Case Else
    Call main
    End Select

    Case 3
    Call Diag(n, m)

    Case 4
    Call Otr

    Case 5
    Call Summ

    Case 6
    Call Razd

    Case Else
    Range(Cells(1, 1), Cells(n, m)).Clear
    Exit Sub

    End Select
    Wend
    End Sub


    Задание явно не сложное. :)
    Надо чтобы работали Case 3, 4, 5, 6.

    Case 3 (Sub Diag) - ошибка Argument not optional. (Там возможно Cells (i,j) вместо Cells (i,i)

    Пытался сделать Case 6, но не смог. :(

    Case 4,5,6 (Subs: Otr, Summ, Razd) не сделаны (они по сути только намечены).
    Case 4 - Вывести все строки матрицы, в которых есть хотя бы один отрицательный элемент.
    Case 5 - Просуммировать элементы матрицы по главной диагонали.
    Case 6 - Поделить все элементы матрицы на число, вводимое с экрана по запросу пользователем.

    Для меня важно, чтобы было не перегружено неизвестным новичку кодом. Если не трудно - с пояснениями, потому что мне важно понять где что происходит. :)

    Заранее преогромное спасибо! B)
     
  2. Guest

    Guest Гость

    Полныйкод модуля(там где макросы):

    Код (Text):
    Option Explicit
    Public sn As Integer, sm As Integer

    Sub Макрос1()
    '
    ' Макрос1 Макрос
    ' Макрос записан 17/12/2005 (GL)
    '
    ' Сочетание клавиш: Ctrl+b
    '
    main
    End Sub
    Sub EntRand(n As Integer, m As Integer)
    Dim i As Integer, j As Integer
    For i = 1 To n
    For j = 1 To m
    Cells(i, j) = Int(Rnd * 100) - 20
    Next j
    Next i
    MsgBox ("Matrix generated")
    End Sub

    Sub EntSelf(n As Integer, m As Integer)
    For i = 1 To n
    For j = 1 To m
    Cells(i, j) = InputBox("Element " & i & "," & j & ":")
    Next j
    Next i
    MsgBox ("Matrix generated")
    End Sub

    Sub Diag(n As Integer, m As Integer)
    Dim i As Integer
    For i = 1 To n
    Cells(i, i).Font.Color = RGB(0, 255, 255)
    Next i
    End Sub

    Sub Otr()
    Dim x As Integer, y As Integer, stn As Integer
    For y = 1 To sn
    For x = 1 To sm
    If Val(Cells(y, x)) < 0 Then Range(Cells(y, 1), Cells(y, sm)).Copy Cells(sn + 2 + stn, 1): stn = stn + 1: GoTo nexty
    Next x
    nexty:
    Next y
    End Sub

    Sub Summ()
    Dim i As Integer, sum As Single
    For i = 1 To sn
    sum = sum + Val(Cells(i, i))
    Next i
    MsgBox sum
    End Sub

    Sub Razd()
    Dim k As Single, i As Integer, j As Integer
    k = InputBox("Введите число, на которое следует поделить все элементы матрицы")
    For i = 1 To sn
    For j = 1 To sm
    Cells(i, j) = Val(Cells(i, j)) / k
    Next j
    Next i
    End Sub

    Sub main()
    Dim n As Integer, m As Integer, resp As Integer
    While 1
    resp = InputBox("1 - Ввод размера, 2 - Ввод матрицы, 3 - Диагональ, 4 - Вывести все строки матрицы, в которых есть хотя бы один отрицательный элемент, 5 - Просуммировать элементы матрицы по главной диагонали, 6 - Поделить все элементы матрицы на число, вводимое с экрана по запросу пользователем, Другая - Выход")
    Select Case resp

    Case 1
    n = InputBox("N=")
    m = InputBox("M=")
    sn = n
    sm = m
    Case 2
    resp = InputBox("1 - Автоматически, 2 - Вручную, Другая - Главное меню")
    Select Case resp

    Case 1
    Call EntRand(n, m)
    Case 2
    Call EntSelf(n, m)
    Case Else
    Call main
    End Select

    Case 3
    Call Diag(n, m)

    Case 4
    Call Otr

    Case 5
    Call Summ

    Case 6
    Call Razd

    Case Else
    Range(Cells(1, 1), Cells(n, m)).Clear
    Exit Sub

    End Select
    Wend
    End Sub
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей