Werkwijze vastleggen VBA voor Excel

Senso

Inventaris
Lid geworden
13 jun 2016
Berichten
10.385
Besturingssysteem
W10 Pro en W11 Pro
Office versie
Office 2007 H@S en Office 2021 Prof Plus
Je krijgt veel VBA wat je in ergens in Excel hebt staan.
Wat is daar een werkwijze voor? In Note++ lukt het mij niet bijvoorbeeld een php-opmaak te kiezen. Ik kies php en alle tekens blijven zwart.
Kan ook alles in Word zetten. Wie weet hoe het moet?
 
Erg vage vraag; wat wil je precies? Sowieso zou ik in Notepad++ de opmaak Vb gebruiken en niet php, omdat je (vermoed ik) je code vergelijkbaar wil zien in Notepad++ als in het VBA venster. En dan nog: zowel in VBA als in Notepad++ kun je voor vergelijkbare stijlen (Codewoord, commentaar etc) verschillende kleuren en kenmerken instellen. Dus een functie woord dat in VBA blauw is, kun je in NotePad++ rood laten weergeven.

De hele handel in Word zetten lijkt mij een zinloze zaak; dat heb ik wel eens geprobeerd maar was hopeloos, omdat je dan elk woord apart moet vastleggen. En Word kan nooit weten hoe een woord moet worden geïnterpreteerd. Een woord kan een functie zijn, zoals IF, en dan krijgt dat in VBA een kleur. Staat If in een string (MsgBox(“If you see this number, then don’t call us”) Dan doet VBA er niets mee (string tenslotte) maar Word zou zowel het woord If als het woord Call kleuren, omdat dit nu eenmaal in beginsel ook VBA woorden zijn. Ga er maar aan staan in Word om te voorkomen dat die daar een kleur krijgen!

Maar leg eerst eens uit wat je nu wil.
 
Je hebt het volgens mij wel goed begrepen.
Ik wil een code wat in een Excel-document staat ergens vastleggen met een herkenbare naam (wat het is/doet). Wil ik dat in een andere document dan zoek ik dat op in het 'naslagwerk'. 'Word' heb ik ook geprobeerd, maar is lastig. NotePad++ vind ik vrij ingewikkeld.
Ik doe nu het Excel-document opslaan met een andere naam die de functie van de VBA-code weergeeft.
Zal de opmaak Vb proberen. Bedankt voor de uitgebreide uitleg. 👍
 
Als je al je Excelmacro's bij de hand wil hebben voor alle geopende bestanden in Excel, kun je ze :
- in het VBA-projekt van personal.xlsb zetten
- in het VBA-projekt van een Excelbestand zetten en van dat Excelbestand een AddIn maken.
- in het VBA-projekt van een Excelbestand zetten en dat bestand in de Excel startup directory zetten
 
Je kunt overwegen MZ tools te kopen, dat heeft een code library functie ingebouwd waarin je al je code snippets kunt opslaan en terugvinden.
1732530802393.png
 
Je kan in de vba editor de code exporteren met bestand - bestand exporteren of CTRL+E.
Zet alle code in een map.
Met everything van voidtools kan je dan deze doorzoeken.
 
Ik heb iets gemaakt dat alle BAS, FRM en CLS bestanden uit een workbook wegschrijft en er tevens in Kladblok een txt bestand van maakt. Interesse? Laat het weten en ik zet het hier neer.
 
Plaats in Module1.

Exporteert alle componenten
en
exporteert alle procedures (sub, function, property) nog eens apart,
in de map waar het bestand staat

Code:
Public Sub ExportCodeComponentAndProcedures()

    vProcedure = Array("Sub", "Function", "Property")

    For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents
        With oVBComponent
            Select Case .Type
            Case 2, 100    'ClassModule ,Document
                sExtension = ".cls"
            Case 3    'Form
                sExtension = ".frm"
            Case 1    'Module
                sExtension = ".bas"
            Case Else
                sExtension = ".txt"
            End Select
            .Export ThisWorkbook.Path & "\" & .Name & sExtension 'export component
            With .CodeModule 'export procedure
                iCountOfLines = .CountOfLines
                If iCountOfLines <> 0 Then
                    vLines = Split(.Lines(1, iCountOfLines), vbCrLf)
                    For iProcedure = 0 To 2
                        bProcedure = False
                        sName = vbNullString
                        sLines = vbNullString
                        sProcedure = vProcedure(iProcedure)
                        For ILines = LBound(vLines) To UBound(vLines)
                            If bProcedure Then
                                sLines = sLines & vLines(ILines) & vbCrLf
                            End If
                            If vLines(ILines) Like "* " & sProcedure & " *" Then
                                bProcedure = True
                                sName = vLines(ILines)
                                sLines = vLines(ILines) & vbCrLf
                            End If
                            If vLines(ILines) Like "End " & sProcedure Then
                                bProcedure = False
                                Open ThisWorkbook.Path & "\" & sName & ".bas" For Output As #1
                                Print #1, sLines
                                Close #1
                            End If
                        Next
                    Next
                End If
            End With
        End With
    Next
End Sub
 
Ik wil een code wat in een Excel-document staat ergens vastleggen met een herkenbare naam (wat het is/doet). Wil ik dat in een andere document dan zoek ik dat op in het 'naslagwerk'. 'Word' heb ik ook geprobeerd, maar is lastig.
Zie bericht#3
Als je herkenbare namen geeft aan je modules, klasses, subs, functions, etc.
Kan met bovenstaande code alle code exporteren en gebruiken als naslagwerk.
Als extra voordeel hebben alle subs en functions een eigen bestand.
Mocht je een krachtige sub/functie hebben die op zich zelf werkt dan kan je die elke keer opnieuw gebruiken.
Zoals deze functie, die de voor windows verboden tekens uit een pad haalt
Code:
Private Function SpecialChars(strString)
    strSpecialChars = "~""#%&*:<>?{|}/\[]" & Chr(10) & Chr(13)
    For i = 1 To Len(strSpecialChars)
        strString = Replace(strString, Mid(strSpecialChars, i, 1), "_")
    Next
    SpecialChars = strString
End Function
 
Laatst bewerkt:
Dat lijkt me duidelijk.
Door niet te verwijzen naar elementen die uniek zijn voor het onderliggende document.
Kijk bijvoorbeeld naar de code in #8.
Dat werkt in ieder Excel document.

Maar zelfs als je dat wel doet kan de betreffende code een voorbeeld zijn en met kleine aanpassingen ook in een ander document werken.
 
@alphamax

Deze lijkt me functioneel identiek.
Iedere procedure krijgt voor de extensie een kenmerk: S voor Sub, F voor Function en P voor Property

Code:
Sub M_snb()
  Set fs = CreateObject("scripting.filesystemobject")
  c00 = "G:\OF\"
 
  For Each it In ActiveWorkbook.VBProject.VBComponents
    With it
      .Export ThisWorkbook.Path & "\" & .Name & Choose(IIf(.Type = 100, 2, .Type), ".bas", ".cls", ".frm")
           
      y = 1
      c01 = ""
      For j = 1 To .codemodule.countoflines
        If .codemodule.ProcOfLine(j, 0) <> c01 And j > 1 Then
          fs.CreateTextFile(c00 & .Name & "_" & c01 & "_" & Mid(.codemodule.Lines(j - 1, 1), 5, 1) & ".txt").write .codemodule.Lines(y, j - y)
          y = j
        End If
        c01 = .codemodule.ProcOfLine(j, 0)
      Next
           
      If .codemodule.countoflines > 0 Then fs.CreateTextFile(c00 & .Name & "_" & c01 & "_" & Mid(.codemodule.Lines(j - 2, 1), 5, 1) & ".txt").write .codemodule.Lines(y, j - y)
    End With
  Next
End Sub
 
Terug
Bovenaan Onderaan