kursov_text (Разработка приложений на языке VBA в среде MS EXCEL по обработке данных для заданных объектов), страница 2
Описание файла
Документ из архива "Разработка приложений на языке VBA в среде MS EXCEL по обработке данных для заданных объектов", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "kursov_text"
Текст 2 страницы из документа "kursov_text"
:=wdOrganizerObjectProjectItems
Вставка новых строк в модуль проекта
ИмяПроекта.VBProject.VBComponents.Item("Имя модуля").CodeModule.InsertLines №, S
Где
№ - Номер строки в модуле, с которой будут вставляться новые строки
S – Вставляемая строка символов
Примечание:
В переменной S могут содержаться коды символов конца строк , которые можно получить следующей функцией со следующим аргументом: CHR(13). Таким образом, переменная S может содержать в себе сразу несколько строк:
S = “Первая строка”+ chr(13)+”Вторая строка” + chr(13)+”Третья строка” ‘и т.д.
Удаление строк из модуля
ИмяПроекта..VBProject.VBComponents.Item("Имя модуля").CodeModule.DeleteLines(№,Количество)
Где
№ - Номер строки в модуле с которой будут удаляться строки
Количество – количество удаляемых строк
Чтение строк из модуля
ИмяПроекта.VBProject.VBComponents.Item("Имя модуля").CodeModule.Lines(№,Количество)
Где
№ - Номер строки, в модуле с которой будут начинаться чтение строк
Количество – количество читаемых строк
Определение количества строк в модуле
ИмяПроекта.VBProject.VBComponents.Item("Имя модуля").CodeModule.CountOfLines
Переименование модулей проекта
ИмяПроекта.VBProject.VBComponents.Item(“ИмяМодуля”).Name =”Новое имя модуля”
Удаление модулей проекта
ИмяПроекта.VBProject.VBComponents.Remove _
ИмяПроекта.VBProject.VBComponents.Item("ИмяМодуля")
Определение количества модулей в проекте
ИмяПроекта.VBProject.VBComponents.Count
Создание нового модуля проекта
‘Создаем новый модуль макросов и подпрограмм
ИмяПроекта.VBProject.VBComponents.Add vbext_ct_StdModule
‘Определяем индекс созданного модуля
k = ИмяПроекта.VBProject.VBComponents.Count
‘даем свое имя модулю
ИмяПроекта.VBProject.VBComponents.Item(k).Name = "Новое имя модуля"
Постановка задачи и ее решение
Вид объекта – Числовая прямоугольная матрица.
Параметры объекта – Размерности матрицы
Входные формы – Ввод элементов матрицы со столбцом (Клавиатура, Файл, Тест-формула), Выбор вида обработки.
Виды обработки – Построение диаграмм
-
Средние значения по строкам и столбцам
-
Максимальные значения по строкам и столбцам
-
Минимальные значения по строкам и столбцам
Option Explicit
Const m = 15
Dim i, j, k As Integer
Public Obr As Byte
Dim n, A(m, m), L(m) As Double
Public inp, NameF, Path As String
Dim Bukva As Variant
Dim det, s, x As Double
Public объявляет глобальную переменную. Объявлённая таким способом переменная становится доступной из всех модулей и форм проекта. Если переменная объявлена в разделе глобальных объявлений, то доступ к ней осуществляется просто по её имени. Если же она объявлена в коде формы, то доступ к ней из других форм и модулей осуществляется так: ИмяФормы. ИмяПеременной.
Sub ButtonCancel_Click()
Sheet1.OptionButton1.Select
Cng_List (False)
End Sub
Sub объявляет процедуру с именем name и параметрами arglist.
Public Sub Obrabotka()
Obr = Sheet1.ListBox1.ListIndex + 1
n = Sheet2.Range("R2")
If Obr > 0 Then
Select Case Obr
Case 1 ' Среднее значение по строкам
Call rab1(n)
Case 2 ' среднее значение по столбцам
Call rab2(n)
Case 3 ' min по строкам
Call rab3(n)
Case 4 ' min по столбцам
Call rab4(n)
Case 5 ' max по строкам
Call rab5(n)
Case 6 ' max по столбцам
Call rab6(n)
End Select
End If
End Sub
Здесь мы, соответственно, объявляем глобальную процедуру вида обработки. В данном случае это подсчет средних, максимальных, и минимальных элементов матрицы по столбцам и строкам
Call - Вызывает процедуру или функцию. Оператор Call может быть опущен.
Далее…
Sub ButtonOK_Click()
If Sheet1.OptionButton1.Value = True Then
'Ввод матрицы с клавиатуры в файл
Met1:
inp = InputBox "Введите размерность матрицы А", "Ввод размерности", "testfile" - выводит окно с запросом на ввод значения. Параметры такие же, как и у функции MsgBox.
n = Val(inp)- Превращает строку в число
If (n > 0) And (n <= 15) And (n - Int(n) = 0) Then
Sheet2.Visible = xlSheetVisible
Sheet2.Activate
Sheet2.Range("L2") = Str(n) + "*" + Str(n)
Sheet2.Range("R2") = n
InitS
Sheet2.Range("H3") = "Введите элементы матрицы, начиная с активной ячейки A4"
Else
If inp <> "" Then
MsgBox "Ошибка ввода размерности"-- Выводит на экран окно сообщения (Message Box) которое будет ждать клика на одной из кнопок. Возвращает число Integer, по которому можно определить какую кнопку нажал пользователь.
GoTo Met1- оператор для перехода на определённую метку
End If
End If
End If
If Sheet1.OptionButton2.Value = True Then
' Ввод матрицы из файла
Open "C:\file1" For Input As #2 - открывает файл для чтения, записи или для произвольного доступа.
Input #2, n
Sheet3.Visible = xlSheetVisible
Sheet3.Activate
' Sheet3.Range("M2") = Str(n) + "*" + Str(n)
Sheet3.Range("R2") = n
Call InitS – вызов функции InitS
For i = 1 To n
For j = 1 To n
Input #2, A(i, j)
Sheet3.Cells(i + 3, j) = A(i, j)
Next j
Next i
Close #2 - Закрывает файл, открытый оператором Open под номером 2.
MsgBox ("Матрица А прочитана из файла ")
End If
If Sheet1.OptionButton3.Value = True Then
'Заполнение тестового значения
Randomize - Инициализирует генератор случайных чисел. Если этот оператор не поместить перед функцией Rnd, то при каждом запуске приложения будут генерироваться одни и те же случайные числа.
For i = 1 To n
For j = 1 To n
A(i, j) = 20 * Rnd() - 10 - Возвращает Single значение, содержащее случайное число от 0 до 1.
Next j
Next i
Sheet3.Cells(3, 2) = " Матрица заполнена случайными тестовыми значениями "
For i = 1 To n
For j = 1 To n
Sheet3.Cells(i + 3, j) = A(i, j)
Next j
Next i
MsgBox ("Матрица А заполнена тестовыми значения (случайными числами)")
End If
If Sheet1.OptionButton4.Value = True Then
'Выбор обработки
Call Obrabotka – вызываем функцию «обработка».
End If
End Sub
В этой конструкции некоторые операторы выполняются только при условии, содержащееся в конструкции логическое выражение имеет значение True (истинно):
If Логическое_выражение Then Оператор
или сложнее
If Логическое_выражение Then
Группа_операторов
End If
В первом случает оператор может быть только один. Во втором сколько угодно (в том числе и один).
Далее…
Sub Cng_List(par As Boolean)
If par Then 'Активное
Sheet1.ListBox1.ForeColor = &H80000007
Sheet1.ListBox1.Enabled = True
Else 'Неактивное
Sheet1.ListBox1.ForeColor = &H80000013
Sheet1.ListBox1.Enabled = False
End If
End Sub
ListBox1 – элемент управления, префикс lst (При именовании элементов управления рекомендуется следовать стандартным соглашениям именования пользовательского интерфейса и элементов управления. Это позволяет упростить чтение и отладку программного кода. В именах элементов управления удобно проставлять префикс, однозначно указывающий на тип (класс) этого объекта.)
Sub Init()
Cng_List (False)
n = 0
For i = 1 To m
For j = 1 To m
A(i, j) = 0
Next j
Next i
Sheet2.Visible = xlSheetHidden
Sheet3.Visible = xlSheetHidden
End Sub
Sub InitS()
For i = 1 To m + 2
For j = 1 To m
ActiveSheet.Cells(i + 2, j) = ""
Next j
Next i
End Sub
Sub Button3_Click() ' ОК
n = Sheet2.Range("R2")
Open "C:\file1" For Output As #1
Write #1, n
For i = 1 To n
For j = 1 To n
If Sheet2.Cells(i + 3, j) = "" Then
A(i, j) = 0
Else
A(i, j) = Sheet2.Cells(i + 3, j)
End If
Write #1, A(i, j)
Next j
Close #1
MsgBox ("Матрица A записана в файл file1")
Call InitS
Sheet2.Visible = xlSheetVisible
Sheet1.Activate
Call Init
End Sub
Sub Button4_Click() ' Отмена
Sheet2.Visible = xlSheetVisible
Call InitS
Sheet1.Activate
Call Init
End Sub
Sub Button5_Click()
Call InitS
Sheet3.Visible = xlSheetVisible
Sheet1.Activate
Call Init
End Sub
Sub OutA() ' Вывод результата на экран
For i = 1 To n
For j = 1 To n
Sheet4.Cells(i + 3, j) = A(i, j)
Next j
Next i
MsgBox
End Sub
Sub getA() ' ввод матрицы из файла
For i = 1 To n
For j = 1 To n
If Sheet3.Visible = xlSheetHidden Then
MsgBox ("Введите матрицу А из файла")
Else
If Sheet3.Cells(i + 3, j) = "" Then
A(i, j) = 0 ' заполнение матрицы с клавиатуры
Else
A(i, j) = Sheet3.Cells(i + 3, j)
End If
End If
Next j
Next i
End Sub
Создание кнопок ОК, ОТМЕНА, заполнение матрицы в файл, а также вывод результатов на экран.
И, наконец, с помощью функции rab, мы проделываем все виды обработки.
Sub rab1(n As Variant)
Call getA
Sheet4.Activate
Call InitS
Sheet4.Range("H3") = "Среднее значение элементов по строкам"
Sheet4.Range("G4") = "Строка"
Sheet4.Range("I4") = "Xcp"
For i = 1 To n
s = 0
Sheet4.Cells(i + 4, 7) = i
For j = 1 To n
s = s + A(i, j)
Next j
s = s / n
Sheet4.Cells(i + 4, 9) = s
Next i
End Sub
Sub rab2(n As Variant)
Call getA
Sheet4.Activate
Call InitS
Sheet4.Range("H3") = "Среднее значение элементов по столбцу"
Sheet4.Range("G4") = "Столбец"
Sheet4.Range("I4") = "Xcp"
For j = 1 To n
s = 0
Sheet4.Cells(j + 4, 7) = j
For i = 1 To n
s = s + A(i, j)
Next i
s = s / n
Sheet4.Cells(j + 4, 9) = s
Next j
End Sub
Sub rab3(n As Variant)
Call getA
Sheet4.Activate
Call InitS
Sheet4.Range("H3") = " Min элементы в строках"
Sheet4.Range("G4") = "Строка"
Sheet4.Range("I4") = "Min"
For i = 1 To n
x = A(i, 1) 'min
Sheet4.Cells(i + 4, 7) = i
For j = 2 To n
If x > A(i, j) Then
x = A(i, j)
End If
Next j
Sheet4.Cells(i + 4, 9) = x
Next i
End Sub
Sub rab4(n As Variant)
Call getA
Sheet4.Activate
Call InitS
Sheet4.Range("H3") = "Min элементы по столбцам"
Sheet4.Range("G4") = "Столбец"
Sheet4.Range("I4") = "Min"
For j = 1 To n
x = A(1, j) 'min
Sheet4.Cells(j + 4, 7) = j
For i = 2 To n
If x > A(i, j) Then
x = A(i, j)
End If
Next i
Sheet4.Cells(j + 4, 9) = x
Next j
End Sub
Sub rab5(n As Variant)
Call getA
Sheet4.Activate
Call InitS
Sheet4.Range("H3") = "Max элементы по строкам"
Sheet4.Range("G4") = "Строка"
Sheet4.Range("H4") = "Max"
For i = 1 To n
s = A(i, 1) 'max
Sheet4.Cells(i + 4, 7) = i
For j = 2 To n
If s < A(i, j) Then
s = A(i, j)
End If
Next j
Sheet4.Cells(i + 4, 9) = s
Next i
End Sub
Sub rab6(n As Variant)
Call getA
Sheet4.Activate
Call InitS
Sheet4.Range("H3") = "Max элементы по
столбцам"
Sheet4.Range("G4") = "Столбец"
Sheet4.Range("H4") = "Max"
For j = 1 To n
s = A(1, j) 'max
Sheet4.Cells(j + 4, 7) = j
For i = 2 To n
If s < A(i, j) Then
s = A(i, j)
End If
Next i
Sheet4.Cells(j + 4, 9) = s
Next j
End Sub
Список использованной литературы
-
А.Васильев, А.Андреев. VBA в Office 2000. Учебный курс. С-Пб.: "Питер", 2001
-
Биллиг В.А. Средства разработки VBA-программиста. Офисное программирование. Том 1. М.: Издательско-торговый дом "Русская Редакция", 2001.
-
Биллиг В.А. Мир объектов Excel 2000. М.: Издательско-торговый дом "Русская Редакция", 2001.
-
В.И.Король. Visual Basic 6.0, Visual Basic for Applications 6.0. Язык программирования. Справочник с примерами. М.: Издательство КУДИЦ, 2000.
22