Inverting Assignment Operations

I found that frequently (particularly when working with dialogs) I was
doing a bunch of assignment operations, performing some other operation,
then doing the reverse of those same assignment operations. The following
is a typical example:

	ClientSheet.m_lClientNo     = m_ClientNo;
ClientSheet.m_szCompanyName = m_CompanyName;
ClientSheet.m_szEmail = m_Email;
ClientSheet.m_szFirstName = m_FirstName;
ClientSheet.m_szLastName = m_LastName;
ClientSheet.m_szTitle = m_Title;

if (ClientSheet.DoModal()==IDOK) {
m_ClientNo = ClientSheet.m_lClientNo;
m_CompanyName = ClientSheet.m_szCompanyName;
m_Email = ClientSheet.m_szEmail;
m_FirstName = ClientSheet.m_szFirstName;
m_LastName = ClientSheet.m_szLastName;
m_Title = ClientSheet.m_szTitle;
}

Instead of writing the same code twice, I developed this macro to apply to
the code. It will act on the current line, or more then one selected lines.
If there is no assignment operator in the line, then that line is ignored.
The macro treats everything after the first equal sign as the second
operand, so if it’s applied to something like a=b=c, you’ll get b=c=a.

	Sub Invert()
‘DESCRIPTION: Invert an assignment operation
Dim win
set win = ActiveWindow
if win.type <> “Text” Then
MsgBox “You can only run this macro when a text editor window is active.”
else
StartLine = ActiveDocument.Selection.TopLine
EndLine = ActiveDocument.Selection.BottomLine
If EndLine < StartLine Then Temp = StartLine StartLine = EndLine EndLine = Temp End If For i = StartLine To EndLine TmpBlock = "" ActiveDocument.Selection.GoToLine i ActiveDocument.Selection.StartOfLine dsFirstText ActiveDocument.Selection.EndOfLine dsExtend CmtBlock = ActiveDocument.Selection Trim(CmtBlock) equal = Instr(CmtBlock,"=") semi = Instr(CmtBlock, ";") If equal <> 0 Then
TmpBlock = Left(CmtBlock, equal-1)
If semi <> 0 then
CmtBlock = Mid(CmtBlock, equal + 1, semi-equal-1)
else
CmtBlock = Right(CmtBlock, Len(CmtBlock) – equal)
End If

CmtBlock = Trim(CmtBlock)
TmpBlock = Trim(TmpBlock)

if semi <> 0 then
CmtBlock = CmtBlock + ” = ” + TmpBlock + “;”
else
CmtBlock = CmtBlock + ” = ” + TmpBlock
End If
End If
ActiveDocument.Selection = CmtBlock
Next
End If
End Sub

Last updated: 2 April 1998

More by Author

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read