Dinamik olarak eklemek ve bir VBA makroyu Visual Basic'ten çalıştırmak nasıl

Özet

Bir Office ürününü Visual Basic'teki otomatikleştirirken kod parçası, sunucunun işlem alanı çalıştırabilirsiniz for Applications (VBA) modülü için Microsoft Visual Basic içinde taşımak yararlı olabilir. Uygulamanız için genel yürütme hızını artırabilir ve işlem içi arama yapıldığında, sunucu yalnızca bir eylem taşıyorsa, sorunları çözmenize yardımcı olabilir.

Bu makalede, dinamik olarak VBA modülü için çalışan bir Office uygulaması Visual Basic'ten ekleyin ve sonra bir çalışma işlemde doldurmak için makroyu çağırabilirsiniz gösterilmiştir.

Daha fazla bilgi

Aşağıdaki örnek, Microsoft Excel'e bir kod modülüne ekleme gösterir, ancak her ikisi de aynı VBA Altyapısı'nı kullanan çünkü Word ve PowerPoint için aynı tekniği kullanabilirsiniz.

Örnek bir statik metin dosyasını Excel'e eklenen kod modülü için kullanır. Kodu uygulamanıza derlemek ve sonra çalışma zamanında gerektiğinde geçici bir dosyaya Ayıkla bir kaynak dosyasına taşımayı düşünün isteyebilirsiniz. Bu projeyi yeniden dağıtım için daha yönetilebilir yapacağı.

VBA işlemek için yazılmış herhangi bir Otomasyon kod çalışmadan önce Microsoft Office XP'den başlayarak, VBA nesne modeline erişim kullanıcı vermeniz gerekir. Office XP ile yeni bir güvenlik özelliği budur. Daha fazla bilgi için lütfen aşağıdaki Knowledge base makalesine bakın:

Office XP VBA projesini programlı erişim engellendi

Örneği oluşturmak için adımları

  1. İlk olarak, KbTest.bas (.txt uzantısı) adlı yeni bir metin dosyası oluşturun. Excel'e zamanında ekleyecektir kod modülüdür.

  2. Metin dosyasında, aşağıdaki kod satırlarını ekleyin:

       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
  3. Metin dosyası olarak C:\KbTest.bas dizinine kaydedin ve dosyayı kapatın.

  4. Visual Basic başlatın ve standart bir proje oluşturun. Varsayılan olarak, Form1 oluşturulur.

  5. Proje menüsündeBaşvurular' ı tıklatın ve sonra Excel erken bağlama kullanmanıza olanak sağlayan uygun bir tür kitaplığı sürümü seçin.

    Örneğin, aşağıdakilerden birini seçin:

    • Microsoft Office Excel 2007 için 12,0 kitaplığı seçin.

    • Microsoft Office Excel 2003 için 11.0 kitaplığı seçin.

    • Microsoft Excel 2002 için 10,0 kitaplığı seçin.

    • Microsoft Excel 2000'de, 9.0 kitaplığı seçin.

    • Microsoft Excel 97 için 8.0 kitaplığı seçin.

  6. Form1'e bir düğme ekleyin ve düğmesinin Click olayı için işleyici aşağıdaki kodu yerleştirin:

       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
  7. Excel 2002 ve sonraki sürümleri Excel VBA projesini erişimini etkinleştirmeniz gerekir. Bunu yapmak için aşağıdaki yöntemlerden birini kullanın:

    • Excel 2007, Microsoft Office düğmesi' ni tıklatın ve sonra da Excel Seçenekleri' ni tıklatın. Güven Merkezi'nitıklatın ve ardından Güven Merkezi Ayarları' nı tıklatın. Makro ayarları' nı tıklatın, Access VBA projesi nesne modeli güven onay kutusunu tıklatıp seçin ve ardından iki kez Tamam ' ı tıklatın.

    • Excel 2003'te ve Excel'in önceki sürümlerinde, Araçlar menüsünden makro ' nun üzerine ve sonra Güvenlik' i tıklatın. Güvenlik iletişim kutusunun Güvenilir kaynaklar sekmesini tıklatın ve sonra Visual Basic Project erişimine güven onay kutusunu seçmek için tıklatın.

  8. Visual Basic projesinin çalıştırın.

Başvurular

Visual Basic'teki Office Otomasyonu hakkında daha fazla bilgi için lütfen aşağıdaki adresten Office geliştirme destek sitesine bakın:


Daha fazla yardıma mı ihtiyacınız var?

Yeteneklerinizi geliştirin
Eğitimleri keşfedin
Yeni özellikleri ilk olarak siz edinin
Microsoft Insider 'a katılın

Bu bilgi yardımcı oldu mu?

Geri bildiriminiz için teşekkür ederiz!

Geri bildiriminiz için teşekkürler! Office destek temsilcilerimizden biriyle görüşmeniz yararlı olabilir.

×