Saya telah menulis sebuah program yang berjalan dan mengirim pesan ke Skype dengan informasi ketika selesai. Saya perlu menambahkan referensi untuk Skype4COM.dll
mengirim pesan melalui Skype. Kami memiliki selusin atau lebih komputer di jaringan dan server file bersama (antara lain). Semua komputer lain harus dapat menjalankan program ini. Saya berharap untuk menghindari pengaturan referensi dengan tangan. Saya telah merencanakan untuk meletakkan referensi di lokasi bersama, dan menambahkannya secara terprogram saat program berjalan.
Saya tidak bisa menemukan cara untuk menambahkan referensi lewat program ke Excel 2007 menggunakan VBA. Saya tahu bagaimana melakukannya secara manual: Buka VBE --> Tools --> References --> browse --_> File Location and Name
. Tapi itu tidak terlalu berguna untuk tujuan saya. Saya tahu ada cara untuk melakukannya di Access Vb.net dan kode yang mirip dengan ini terus bermunculan, tetapi saya tidak yakin saya memahaminya, atau jika relevan:
ThisWorkbook.VBProject.References.AddFromGuid _
GUID:="{0002E157-0000-0000-C000-000000000046}", _
Major:=5, Minor:=3
Sejauh ini, dalam solusi yang disajikan, untuk menambahkan referensi secara terprogram, saya perlu menambahkan referensi dengan tangan dan mengubah Pusat Kepercayaan - yang lebih dari sekadar menambahkan referensi. Meskipun saya kira jika saya menindaklanjuti solusi yang diusulkan, saya akan dapat menambahkan referensi di masa mendatang secara terprogram. Yang mungkin membuatnya sepadan dengan usaha.
Pikiran lebih jauh akan bagus.
Jawaban:
Ommit
Ada dua cara untuk menambahkan referensi melalui VBA ke proyek Anda
1) Menggunakan GUID
2) Secara langsung mereferensikan dll.
Biarkan saya membahas keduanya.
Tapi pertama-tama ini adalah 3 hal yang perlu Anda jaga
a) Makro harus diaktifkan
b) Dalam pengaturan Keamanan, pastikan bahwa "Percayai Akses ke Proyek Visual Basic" dicentang
c) Anda telah menetapkan referensi ke objek `Microsoft Visual Basic for Applications Extensibility secara manual
Cara 1 (Menggunakan GUID)
Saya biasanya menghindari cara ini karena saya harus mencari GUID di registri ... yang saya benci LOL. Lebih lanjut tentang GUID di sini .
Topik: Tambahkan Perpustakaan Referensi VBA melalui kode
Tautan : http://www.vbaexpress.com/kb/getarticle.php?kb_id=267
'Credits: Ken Puls Sub AddReference() 'Macro purpose: To add a reference to the project using the GUID for the 'reference library Dim strGUID As String, theRef As Variant, i As Long 'Update the GUID you need below. strGUID = "{00020905-0000-0000-C000-000000000046}" 'Set to continue in case of error On Error Resume Next 'Remove any missing references For i = ThisWorkbook.VBProject.References.Count To 1 Step -1 Set theRef = ThisWorkbook.VBProject.References.Item(i) If theRef.isbroken = True Then ThisWorkbook.VBProject.References.Remove theRef End If Next i 'Clear any errors so that error trapping for GUID additions can be evaluated Err.Clear 'Add the reference ThisWorkbook.VBProject.References.AddFromGuid _ GUID:=strGUID, Major:=1, Minor:=0 'If an error was encountered, inform the user Select Case Err.Number Case Is = 32813 'Reference already in use. No action necessary Case Is = vbNullString 'Reference added without issue Case Else 'An unknown error was encountered, so alert the user MsgBox "A problem was encountered trying to" & vbNewLine _ & "add or remove a reference in this file" & vbNewLine & "Please check the " _ & "references in your VBA project!", vbCritical + vbOKOnly, "Error!" End Select On Error GoTo 0 End Sub
Cara 2 (Langsung mereferensikan dll)
Kode ini menambahkan referensi ke
Microsoft VBScript Regular Expressions 5.5
Option Explicit Sub AddReference() Dim VBAEditor As VBIDE.VBE Dim vbProj As VBIDE.VBProject Dim chkRef As VBIDE.Reference Dim BoolExists As Boolean Set VBAEditor = Application.VBE Set vbProj = ActiveWorkbook.VBProject '~~> Check if "Microsoft VBScript Regular Expressions 5.5" is already added For Each chkRef In vbProj.References If chkRef.Name = "VBScript_RegExp_55" Then BoolExists = True GoTo CleanUp End If Next vbProj.References.AddFromFile "C:\WINDOWS\system32\vbscript.dll\3" CleanUp: If BoolExists = True Then MsgBox "Reference already exists" Else MsgBox "Reference Added Successfully" End If Set vbProj = Nothing Set VBAEditor = Nothing End Sub
Catatan : Saya belum menambahkan Penanganan Kesalahan. Disarankan bahwa dalam kode Anda yang sebenarnya, gunakanlah :)
EDIT Dipukuli oleh
mischab1
:)sumber
WORKBOOK_OPEN
acara mulai dijalankan. Jadi Anda tidak dapat membuat objek Word Publik dan Anda tidak dapat menentukan tipe parameter sebagai tipe Word / PPT (misalnya Anda tidak dapat melakukan sesuatu seperti ituSub CopyActiveChartToWord(FormatType as WdPasteDataType)
).{420B2830-E718-11CF-893D-00A0C9054228}
. Anda dapat mengetahui GUID lain dengan menambahkannya secara manual, kemudian mengulanginya masing-masingRef
ThisWorkbook.VBProject.References
dan menggunakanDebug.Print Ref.Name, Ref.Guid
Ada dua cara untuk menambahkan referensi menggunakan VBA.
.AddFromGuid(Guid, Major, Minor)
dan.AddFromFile(Filename)
. Mana yang terbaik tergantung pada apa yang Anda coba tambahkan referensi. Saya hampir selalu menggunakan.AddFromFile
karena hal yang saya rujuk adalah Proyek VBA Excel lainnya dan tidak ada di Windows Registry.Kode contoh yang Anda tunjukkan akan menambahkan referensi ke buku kerja tempat kode tersebut masuk. Saya biasanya tidak melihat ada gunanya melakukan itu karena 90% dari waktu, sebelum Anda dapat menambahkan referensi, kode tersebut telah gagal untuk dikompilasi karena referensinya hilang. (Dan jika tidak gagal dikompilasi, Anda mungkin menggunakan pengikatan terlambat dan Anda tidak perlu menambahkan referensi.)
Jika Anda mengalami masalah dalam menjalankan kode, ada dua kemungkinan masalah.
Selain itu, jika Anda bisa sedikit lebih jelas tentang apa pertanyaan Anda atau apa yang Anda coba lakukan yang tidak berhasil, saya dapat memberikan jawaban yang lebih spesifik.
sumber
Menjelajahi registri untuk mencari panduan atau menggunakan jalur, metode mana yang terbaik. Jika menjelajahi registri tidak lagi diperlukan, bukankah itu cara yang lebih baik untuk menggunakan guids? Office tidak selalu diinstal di direktori yang sama. Jalur instalasi dapat diubah secara manual. Juga nomor versi adalah bagian dari jalan. Saya tidak pernah bisa meramalkan bahwa Microsoft akan menambahkan '(x86)' ke 'Program Files' sebelum diperkenalkannya prosesor 64 bit. Jika memungkinkan saya akan mencoba menghindari penggunaan jalan setapak.
Kode di bawah ini diturunkan dari jawaban Siddharth Rout, dengan fungsi tambahan untuk mendaftar semua referensi yang digunakan dalam buku kerja yang aktif. Bagaimana jika saya membuka buku kerja saya di versi Excel yang lebih baru? Akankah buku kerja tetap berfungsi tanpa mengadaptasi kode VBA? Saya sudah memeriksa bahwa panduan untuk Office 2003 dan 2010 identik. Semoga Microsoft tidak mengubah panduan di versi mendatang.
Argumen 0,0 (dari .AddFromGuid) harus menggunakan versi referensi terbaru (yang belum dapat saya uji).
Apa yang kamu pikirkan Tentu saja kami tidak dapat memprediksi masa depan tetapi apa yang dapat kami lakukan untuk membuat versi kode kami terbukti?
Sub AddReferences(wbk As Workbook) ' Run DebugPrintExistingRefs in the immediate pane, to show guids of existing references AddRef wbk, "{00025E01-0000-0000-C000-000000000046}", "DAO" AddRef wbk, "{00020905-0000-0000-C000-000000000046}", "Word" AddRef wbk, "{91493440-5A91-11CF-8700-00AA0060263B}", "PowerPoint" End Sub Sub AddRef(wbk As Workbook, sGuid As String, sRefName As String) Dim i As Integer On Error GoTo EH With wbk.VBProject.References For i = 1 To .Count If .Item(i).Name = sRefName Then Exit For End If Next i If i > .Count Then .AddFromGuid sGuid, 0, 0 ' 0,0 should pick the latest version installed on the computer End If End With EX: Exit Sub EH: MsgBox "Error in 'AddRef'" & vbCrLf & vbCrLf & err.Description Resume EX Resume ' debug code End Sub Public Sub DebugPrintExistingRefs() Dim i As Integer With Application.ThisWorkbook.VBProject.References For i = 1 To .Count Debug.Print " AddRef wbk, """ & .Item(i).GUID & """, """ & .Item(i).Name & """" Next i End With End Sub
Kode di atas tidak lagi memerlukan referensi ke objek "Microsoft Visual Basic for Applications Extensibility".
sumber
Berikut adalah cara mendapatkan Panduan secara terprogram! Anda kemudian dapat menggunakan panduan / jalur file ini dengan jawaban di atas untuk menambahkan referensi!
Referensi: http://www.vbaexpress.com/kb/getarticle.php?kb_id=278
Sub ListReferencePaths() 'Lists path and GUID (Globally Unique Identifier) for each referenced library. 'Select a reference in Tools > References, then run this code to get GUID etc. Dim rw As Long, ref With ThisWorkbook.Sheets(1) .Cells.Clear rw = 1 .Range("A" & rw & ":D" & rw) = Array("Reference","Version","GUID","Path") For Each ref In ThisWorkbook.VBProject.References rw = rw + 1 .Range("A" & rw & ":D" & rw) = Array(ref.Description, _ "v." & ref.Major & "." & ref.Minor, ref.GUID, ref.FullPath) Next ref .Range("A:D").Columns.AutoFit End With End Sub
Berikut adalah kode yang sama tetapi mencetak ke terminal jika Anda tidak ingin mendedikasikan lembar kerja untuk keluaran.
Sub ListReferencePaths() 'Macro purpose: To determine full path and Globally Unique Identifier (GUID) 'to each referenced library. Select the reference in the Tools\References 'window, then run this code to get the information on the reference's library On Error Resume Next Dim i As Long Debug.Print "Reference name" & " | " & "Full path to reference" & " | " & "Reference GUID" For i = 1 To ThisWorkbook.VBProject.References.Count With ThisWorkbook.VBProject.References(i) Debug.Print .Name & " | " & .FullPath & " | " & .GUID End With Next i On Error GoTo 0 End Sub
sumber