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

  • Автор темы stap
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

stap

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

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)
 
G

Guest

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

Код:
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
 
Статус
Закрыто для дальнейших ответов.