Technical Notes |
|
When attempting to use a Reflection Workspace macro that was recorded in Reflection for IBM 2008 or 2007, the following error is displayed: "Compile error: User-defined type not defined." This technical note explains the cause of this error and provides a workaround.
This error occurs when a recorded Reflection Workspace macro is run from the common project area. Recorded macros typically contain session object information, which is not supported in the common project area.
To resolve this error, do one of the following:
Rerecord the macro and save it to the current document's project, rather than the common project area. Macros saved to the current document's project are available only when the current session is loaded.
To record a macro, follow these steps.
To enable the macro to work when saved to the common area, configure the macro to use the Attachmate_Reflection_Objects_Emulation_IbmHosts library.
Follow the steps below to edit the macro and enable the Attachmate Reflection library.
With this library selected, the macro will now run without the compile error as long as the session indicated in the macro currently has Windows focus.
To make the macro session specific whether the session has Windows focus or not, follow these steps while the macro is still open in the Visual Basic editor.
Set currentTerminal = ThisFrame.SelectedView.controlSet currentTerminal = ThisFrame.GetViewByTitleText("Name.rd5x").controlReplacing "Name.rd5x" with your session name.
Sample macro with edits made:
Sub tinymacro() Dim currentScreen As IbmScreen Dim currentTerminal As IbmTerminal Dim frame As frame Dim viewList() As View Dim hostSettleTimeout As Integer Dim hostSettleTime As Integer hostSettleTimeout = 2000 hostSettleTime = 500 Set viewFrame = Application.GetObject("Frame") <!- Comment out or delete this line: Set currentTerminal = ThisFrame.SelectedView.control -> <-! Insert the following line, but replace "Name.rd5x" with your session name. -> Set currentTerminal = ThisFrame.GetViewByTitleText("Name.rd5x").control Set currentScreen = currentTerminal.Screen currentScreen.SendKeys ("1") currentScreen.SendControlKey (ControlKeyCode_CMD_TRANSMIT) rv = currentScreen.WaitForHostSettle(hostSettleTimeout, hostSettleTime) End Sub |
The macro will now run without the compile error regardless of which Window has focus as long as the session with the name indicated in the "set currentTerminal=" line is opened (Name.rd5x in the example above).