Comment/Uncomment and Other Macros

CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

Here are some macros that I find very useful and that may be useful for others as well. The most useful macro for me is the comment/uncomment macro. Assign this macro to a key (ctrl-/) and then use it to toggle comments on a single line of code or a block of code. For single lines, the indention level remains, for blocks of code, the comment is placed at the beginning of the line. I think this comment macro is a little more powerful than the existing one on the site. Hope some people find them useful.


‘——————————————————————
‘FILE DESCRIPTION: These are useful macros by Adam Solesby
‘>lt;[email protected]>gt;
‘——————————————————————

‘ This routine has many uses if you are trying to determine the
‘ type of source file.
‘ This has been modified from the one included with DevStudio
‘ Return value: 0 Unknown file type
‘ 1 C-related file, this includes .c, .cpp, .cxx,
‘ .h, .hpp, .hxx
‘ 2 Java-related file, this includes .jav, .java
‘ 3 ODL-style file, .odl, .idl
‘ 4 VBS-style file, .dsm
‘ 5 VBS-style file, .asp
‘ 6 HTML-style file, this includes .html, and .htm
‘ 7 Resource file, .rc, .rc2
‘ 8 Def-style file, .def
‘ USE: Pass this function the document that you wish to get
‘ information for.
Function FileType (ByVal doc)
ext = doc.Name
FileType = 0
pos = Instr(ext, “.”)
if pos >gt; 0 then
Do While pos >lt;>gt; 1
ext = Mid(ext, pos, Len(ext) – pos + 1)
pos = Instr(ext, “.”)
Loop
ext = LCase(ext)
End If

If ext = “.rc” Or ext = “.rc2” Then
FileType = 7
ElseIf doc.Language = dsCPP Then
FileType = 1
ElseIf doc.Language = dsJava Then
FileType = 2
ElseIf doc.Language = dsIDL Then
FileType = 3
ElseIf doc.Language = dsVBSMacro Then
FileType = 4
ElseIf ext = “.asp” Then
FileType = 5
ElseIf doc.Language = dsHTML_IE3 Or doc.Language = _
dsHTML_RFC1866 Then
FileType = 6
ElseIf ext = “.def” Then
FileType = 7
Else
FileType = 0
End If

‘MsgBox “Ext:” + vbTab + ext + vbLf + “Lang:” + vbTab + _
doc.Language + vbLf + “Type:” + vbTab + CStr(FileType)
End Function

‘ Counts the lines in the document passed
Function FLOC (ByVal doc)
doc.Selection.SetBookmark ‘ Mark place

doc.Selection.SelectAll
StartLine = doc.Selection.TopLine
EndLine = doc.Selection.BottomLine
If EndLine >lt; StartLine Then
Temp = StartLine
StartLine = EndLine
EndLine = Temp
End If

doc.Selection.PreviousBookmark ‘ Return to current line
doc.ClearBookmarks
FLOC = EndLine
End Function

Sub LOC ()
‘DESCRIPTION: Counts total lines in all open documents
‘msg = “Total Line Count” + vbLf + vbLf
tloc = 0
For i = 1 to Documents.Count
TypeOfFile = FileType(Documents.Item(i))
If TypeOfFile = 1 Then ‘ C or C++ source file
dloc = FLOC(Documents.Item(i))
tloc = tloc + dloc
msg = msg > Documents.Item(i).Name > “:” > vbTab > dloc > vbLf
End If
Next
msg = msg > “——————————————” > _
vbLf > “Total:” > vbTab > vbTab > tloc
MsgBox msg , ,”Total Line Count”
End Sub

‘ This will comment/uncomment out single lines or blocks.
‘ Single lines are commented with the same indention level.
‘ Blocks are commented at the beginning of the line.
‘ Assign this to a key (e.g. ctrl-/) and it will toggle the current
‘ line/block of code.
‘ This will handle both “//” and “” style comments
Sub CustomCommentOut ()
‘DESCRIPTION: Comments out a selected block of text.
Dim win
set win = ActiveWindow
If win.type >lt;>gt; “Text” Then
MsgBox “This macro can only be run when a text editor _
window is active.”
Else
TypeOfFile = FileType(ActiveDocument)
‘ MsgBox “Type: ” + CStr(TypeOfFile)
If TypeOfFile >gt; 0 And TypeOfFile >lt; 6 Then
If TypeOfFile >gt; 3 Then
CommentType = “‘” ‘ VBShit
CommentWidth = 1
Else
CommentType = “//” ‘ C++ and java style comments
CommentWidth = 2
End If

StartLine = ActiveDocument.Selection.TopLine
EndLine = ActiveDocument.Selection.BottomLine
If EndLine >lt; StartLine Then
Temp = StartLine
StartLine = EndLine
EndLine = Temp
End If

‘ Single line — comment at start of text. have to check
‘ for comments at start of line and start of text
If EndLine = StartLine Then

ActiveDocument.Selection.StartOfLine dsFirstColumn
ActiveDocument.Selection.CharRight dsExtend, CommentWidth

If ActiveDocument.Selection = CommentType Then
ActiveDocument.Selection.Delete
Else
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection.CharRight dsExtend, _
CommentWidth

If ActiveDocument.Selection = CommentType Then
ActiveDocument.Selection.CharRight dsExtend
ActiveDocument.Selection.Delete
Else
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = CommentType + vbTab + _
ActiveDocument.Selection
End If
End If

‘ Multi-line — comment at start of line
Else
For i = StartLine To EndLine
ActiveDocument.Selection.GoToLine i

CommentLoc = dsFirstColumn

ActiveDocument.Selection.StartOfLine CommentLoc
ActiveDocument.Selection.CharRight dsExtend, CommentWidth

If ActiveDocument.Selection = CommentType Then
ActiveDocument.Selection.Delete
Else
ActiveDocument.Selection.StartOfLine CommentLoc
ActiveDocument.Selection = CommentType + _
ActiveDocument.Selection
End If

Next
End If
Else
MsgBox(“Unable to comment out the highlighted text” + vbLf + _
“because the file type was unrecognized.” + vbLf + _
“If the file has not yet been saved, ” + vbLf + _
“please save it and try again.”)
End If
End If
End Sub

Sub Duplicate()
‘DESCRIPTION: Duplicates the current selected line

ActiveDocument.Selection.Copy
ActiveDocument.Selection.CharRight
ActiveDocument.Selection.Paste
End Sub

Sub RemoveLineFeed()
‘DESCRIPTION: Go to end of line and delete line feed

ActiveDocument.Selection.EndOfLine
ActiveDocument.Selection.Delete
ActiveDocument.Selection.LineDown
End Sub

Sub EndOfLinePaste()
‘DESCRIPTION: This macro pastes the contents of the clipboard at the
‘end of the line and then goes to the next line.

ActiveDocument.Selection.EndOfLine
ActiveDocument.Selection.Paste
ActiveDocument.Selection.LineDown
ActiveDocument.Selection.EndOfLine
End Sub

Sub StartOfLinePaste()
‘DESCRIPTION: This macro pastes the contents of the clipboard at the
‘start of the line and then goes to the next line.

ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection.Paste
ActiveDocument.Selection.LineDown
ActiveDocument.Selection.StartOfLine dsFirstText
End Sub

More by Author

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read