Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структурные особенности Visual Basic.docx
Скачиваний:
44
Добавлен:
17.11.2019
Размер:
2.86 Mб
Скачать

52. Пример динамического способа формирования объектов на форме vba Excel.

На самом деле механизм позднего связывания необходим для реализации объектно-ориентированных технологий, которые, в частности, используют динамического определение объектов в ходе выполнения программы.

Достаточно типичной задачей является использование в приложении неких внешних ActiveX-объектов (приложений или объектов). Например, вы хотите обратиться к приложению Excel.

Sub Late() ' Пример позднего связывания с внешним объектом Excel

Dim ObjExcel As Object 'Описываем переменную типа Object

Set ObjExcel = CreateObject("Excel.Application") 'и создаем объект на базе класса Excel.Application

'задаем свойства книги и листа

With ObjExcel

.WorkBooks.Add

.ActiveSheet.Name = "37 вопрос"

.Visible = True

MsgBox(“Имя активного листа “) & ActiveSheet.Name

End With

ObjExcel.Quit

Set ObjExcel = Nothing

End Sub

Достоинство раннего связывания: работают подсказки и синтаксический контроль при создании исполняемого модуля. Но этот вариант (точнее вся программа, независимо от того было или не было обращение к EarlyBinding) будет работать только в случае наличия ссылки (Project|References) на реально существующее приложение.

Достоинство второго варианта — в возможности динамической настройки на используемый объект в ходе выполнения программы. Причем ссылку на него не нужно устанавливать заранее, поэтому при физическом отсутствии Excel на компьютере, ошибка произойдет только в момент выполнения данной процедуры (не говоря о том, что эту ошибку можно программно обработать и продолжить работу в другом режиме).

51. Пример решения системы нелинейных уравнений с использованием объектной модели ms Excel.

Пример. Используя объектную модель MS Excel, решить систему нелинейных уравнений при начальных условиях x(0)=0 и y(0)=0.

Dim ObjExcel As Object, s As String, sF As String

Private Sub Command1_Click()

Const xlDoNotSaveChanges = 0

Set ObjExcel = CreateObject("Excel.Application")

With ObjExcel

.WorkBooks.Add

.ActiveSheet.Name = "Solver"

.Visible = True

.DisplayAlerts = False

End With

ObjExcel.Range("A1").Name = "x"

ObjExcel.Range("A1").Value = Text3

ObjExcel.Range("A2").Name = "y"

ObjExcel.Range("A2").Value = Text4

Func$ = "$A$3" 'Целевая функция

XY$ = "$A$1:$A$2" 'Изменяемые ячейки

sF = "=(" & Text1 & ")^2+(" & Text2 & ")^2"

'Введение формулы в ячейку

ObjExcel.Range("A3").Formula = sF

'Полный путь к файлу Solver.xla заключен в дополнительные апострофы

s = "'C:\Program Files\Microsoft Office\OFFICE11\Library\SOLVER\Solver.xla'"

'Параметры Поиска Решения

ObjExcel.Run s & "!Solver.SolverOptions", 100, 100, 0.000001, False, False, 1, 1, 1, 5, False, 0.0001, False ' Поиск.Решения

ObjExcel.Run s & "!Solver.SolverOK", Func, 3, 0, XY

ObjExcel.Run s & "!Solver.SolverSolve" 'Выполнить Поиск

Text3 = ObjExcel.Cells(1, 1) 'Вывод решения системы в поля

Text4 = ObjExcel.Cells(2, 1)

ObjExcel.ActiveWindow.Close SaveChanges:=xlDoNotSaveChanges

ObjExcel.Quit

End Sub

Private Sub Command2_Click()

End

End Sub

Private Sub Form_Load()

Caption = "Решение системы НУ с помощью программы 'Поиск решения'"

Command1.Caption = "Поиск решения"

Command2.Caption = "Выход"

Text3 = ""

Text4 = ""

Text1 = "x^2+y^2-1"

Text2 = "2*x+3*y-0.9"

End Sub

Private Sub Form_Unload(Cancel As Integer)

Set ObjExcel = Nothing

End Sub