26 sierpnia 2008
Zarządzanie komponentami projektu VBA
Tutaj dwaj panowie dyskutowali o automatycznym eksportowaniu i importowaniu modułów kodu VBA do i z plików .xls. Jeden z nich postawił problem, który wydał mi się na tyle interesujący, by się z nim zmierzyć (problemem, nie panem). Rozwiązanie, które znalazłem, uważam za na tyle zadowalające, by je zamieścić na stronie.
Na samym początku uwaga organizacyjna. Zamieszczony poniżej kod nie
zadziała, o ile nie nakażemy Excelowi ufać wszelkim próbom dostępu do
programu Visual Basic Project. Aby to uczynić należy w Excelu z
menu Narzędzia wybrać Makro, a następnie
Zabezpieczenia:

W okienku zabezpieczenia należy przejść do zakładki Źródła zaufane
i zaznaczyć opcję Ufaj dostępowi do programu Visual Basic
Project:
Postępowanie w przypadku innych wersji Excela jest opisane na stronach Microsoftu.
Kod korzysta z bibliotek:
- Microsoft Scripting Library
- Microsoft Visual Basic for Applications Extensibility
- pobierz kod
- pobierz dodatek
Słowa kluczowe: excel, vba, makra, vbe, Microsoft Scripting Library, Microsoft Visual Basic for Applications Extensibility
04 sierpnia 2007
Formatowanie kodu - dodatek Excel
Wczoraj wieczorem napisałem krótki program, którego zadaniem jest formatowanie kodów VBA zapisywanych w plikach xls. Do tego zadania skłoniła mnie dyskusja na forum Excel w praktyce w ramach serwisu goldenline.pl.
Ten kilka funkcji robi ładne wcięcia. Na razie nie radzi sobie z wierszami kodu nie mieszczącymi się w jednej linii (tzn. zakończonymi znakiem podkreślenia). Z tego powodu funkcja Indents wymaga przemyślenia. Poza tym chciałbym dodać możliwość wyróżniania bloków kodu poprzez dodanie spacji przed i po.
Poniżej funkcja testująca napisany przeze mnie dodatek z zaznaczonym wywołaniem głównej procedury odpowiedzialnej za formatowanie kodu.
Sub aTest()
Dim VbComp As VBIDE.VBComponent
Dim CodeModule As VBIDE.CodeModule
Dim LastLine As Long
Dim CodeString As String
For Each VbComp In ThisWorkbook.VBProject.VbComponents
If VbComp.Type = vbext_ct_StdModule Then
Set CodeModule = VbComp.CodeModule
With CodeModule
LastLine = .CountOfLines
CodeString = FormatCode(CodeModule)
Call .DeleteLines(1, LastLine)
Call .InsertLines(1, CodeString)
End With
End If
Next VbComp
End Sub
Powyższy kod zadziała jedynie wtedy, gdy w VBE zlinkowane zostaną biblioteki:
- Microsoft Scripting Runtime
- Microsoft Visual Basic for Applications Extensibility
- pobierz [5kB]
Słowa kluczowe: excel, vba, addin, makra, vbe, Microsoft Visual Basic for Applications Extensibility


![[vim created]](./grafika/vim_created.png)