Обобщена информация
Когато автоматизирате продукт на Office от Visual Basic, може да е полезно да преместите част от кода в модул на Microsoft Visual Basic за приложения (VBA), който може да се изпълнява в пространството на процеса на сървъра. Това може да увеличи общата скорост на изпълнение за вашето приложение и да помогне за намаляване на проблемите, ако сървърът извършва действие само когато е направено повикване в процес.
Тази статия показва как динамично да добавите VBA модул към работещо приложение Office от Visual Basic и след това да се обадите на макроса, за да попълните работен лист в процес.Повече информация
Следващата извадка показва вмъкването на модул с код в Microsoft Excel, но можете да използвате една и съща техника за Word и PowerPoint, тъй като и двете включват един и същ VBA двигател.
Примерът използва статичен текстов файл за модула с код, който се вмъква в Excel. Може да помислите за преместване на кода във файл с ресурси, който можете да съставите във вашето приложение, и след това да извлечете във временен файл, когато е необходимо по време на изпълнение. Това ще направи проекта по-управляем за повторно разпространение. Започвайки Microsoft Office XP, потребителят трябва да даде достъп до обектния модел на VBA, преди някой код за автоматизация, написан за манипулиране на VBA, да работи. Това е нова функция за защита с Office XP. За повече информация вижте следната статия в базата знания:282830 Програмен достъп до Office НА VBA Project е отказан
Стъпки за изграждане на извадката
-
Първо, създайте нов текстов файл с име KbTest.bas (без .txt разширение). Това е модулът за код, който ще вмъкнем в Excel по време на изпълнение.
-
В текстовия файл добавете следните редове с код:
Attribute VB_Name = "KbTest"
' Your Microsoft Visual Basic for Applications macro function takes 1 ' parameter, the sheet object that you are going to fill. Public Sub DoKbTest(oSheetToFill As Object) Dim i As Integer, j As Integer Dim sMsg As String For i = 1 To 100 For j = 1 To 10 sMsg = "Cell(" & Str(i) & "," & Str(j) & ")" oSheetToFill.Cells(i, j).Value = sMsg Next j Next i End Sub -
Запишете текстовия файл в директорията C:\KbTest.bas, след което затворете файла.
-
Започнете Visual Basic и създайте стандартен проект. Формуляр1 се създава по подразбиране.
-
В менюто Project щракнете върхуРеференция и след това изберете подходящата версия на библиотеката с типове, която ви позволява да използвате ранно обвързване за Excel.
Например изберете едно от следните неща:-
За Microsoft Office Excel 2007 изберете библиотеката 12.0.
-
За Microsoft Office Excel 2003 изберете библиотеката 11.0.
-
За Microsoft Excel 2002 изберете библиотеката с 10,0.
-
За Microsoft Excel 2000 изберете библиотеката 9.0.
-
За Microsoft Excel 97 изберете библиотеката 8.0.
-
-
Добавете бутон към Form1 и поставете следния код в манипулатора за събитието Click на бутона:
Private Sub Command1_Click()
Dim oXL As Excel.Application Dim oBook As Excel.Workbook Dim oSheet As Excel.Worksheet Dim i As Integer, j As Integer Dim sMsg As String ' Create a new instance of Excel and make it visible. Set oXL = CreateObject("Excel.Application") oXL.Visible = True ' Add a new workbook and set a reference to Sheet1. Set oBook = oXL.Workbooks.Add Set oSheet = oBook.Sheets(1) ' Demo standard Automation from out-of-process, ' this routine simply fills in values of cells. sMsg = "Fill the sheet from out-of-process" MsgBox sMsg, vbInformation Or vbMsgBoxSetForeground For i = 1 To 100 For j = 1 To 10 sMsg = "Cell(" & Str(i) & "," & Str(j) & ")" oSheet.Cells(i, j).Value = sMsg Next j Next i ' You're done with the first test, now switch sheets ' and run the same routine via an inserted Microsoft Visual Basic ' for Applications macro. MsgBox "Done.", vbMsgBoxSetForeground Set oSheet = oBook.Sheets.Add oSheet.Activate sMsg = "Fill the sheet from in-process" MsgBox sMsg, vbInformation Or vbMsgBoxSetForeground ' The Import method lets you add modules to VBA at ' run time. Change the file path to match the location ' of the text file you created in step 3. oXL.VBE.ActiveVBProject.VBComponents.Import "C:\KbTest.bas" ' Now run the macro, passing oSheet as the first parameter oXL.Run "DoKbTest", oSheet ' You're done with the second test MsgBox "Done.", vbMsgBoxSetForeground ' Turn instance of Excel over to end user and release ' any outstanding object references. oXL.UserControl = True Set oSheet = Nothing Set oBook = Nothing Set oXL = Nothing End Sub -
За Excel 2002 и за по-нови версии на Excel трябва да включите достъпа до VBA проекта. За да направите това, използвайте един от следните методи:
-
В Excel 2007 щракнете върху бутона Microsoft Office и след това щракнете върху Excel Опции. Щракнете върху Център за сигурност и след това щракнете върху Център за сигурност Настройки. Щракнете върху Настройки макроси, щракнете, за да отметнете квадратчето Доверете се на Access до обектния модел на VBA проект и след това щракнете върху OK два пъти.
-
В Excel 2003 и в по-стари версии на Excel посочете Макрос в менюто Инструменти и след това щракнете върху Защита. В диалоговия прозорец Защита щракнете върху раздела Надеждни източници и след това щракнете, за да отметнете квадратчето Достъп до Visual Basic Project сигурност.
-
-
Стартирайте Visual Basic проект.
Препратки
За повече информация относно автоматизацията на Office от Visual Basic, вижте сайта Office поддръжка за развитие на следния адрес: