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