我正在使用VBA在Excel中工作,以收集要建立的表的数据,我必须去TN3270仿真器才能获取它。为了与仿真器一起工作,我必须定义一些对象来完成工作。我也有一些帮助程序功能,多个功能可使用这些功能来导航到模拟器中的不同屏幕。到目前为止,为了使用它们,我不得不将对象定义复制到这些函数中以使其起作用。这在大多数情况下都有效,但是有时(并且以某种方式我无法预期地复制),当助手重新创建要使用的特定对象时,我会出错。
Option Explicit
Public Sub gather_data()
Dim TN_Emulator As Object
Dim Workbook As Object
Set TN_Emulator = CreateObject("TN_Emulator.Program")
Set Workbook = ActiveWorkbook
Dim string_from_excel As String
#for loop to go through table rows
#put value in string_from_excel
If string_from_excel = some condition
go_to_screen_2
#grab and put data back in excel
Else
go_to_screen_3
#grab and put data back in excel
End If
go_to_screen_1
#next loop logic
End Sub
Public Sub go_to_screen_1()
Dim TN_Emulator As Object
#the next step occasionally throws the error
Set TN_Emulator = CreateObject("TN_Emulator.Program")
#send instructions to the emulator
End Sub
是否有一种方法可以导入现有对象(创建和使用时没有任何错误),而无需将其重新定义到辅助函数中来避免此问题?我曾尝试在Google中搜索,但我认为我使用的搜索字词不正确。
答案 0 :(得分:1)
首先要感谢@JosephC和@Damian在评论中为我发布答案。
JosephC的“您要查找的关键字是:“如何将参数传递给函数”。”,他提供了以下链接ByRef vs ByVal,其中描述了在函数调用中传递参数的两种不同方法。
从达米安(Damian)那里解决我的紧迫问题。而不是声明和设置将在辅助函数主体中使用的对象。将对象名称和类型放在初始帮助器名称的括号中,从另一个函数调用帮助器时,也应在括号中,如下所示。
Option Explicit
Public Sub gather_data()
Dim TN_Emulator As Object
Dim Workbook As Object
Set TN_Emulator = CreateObject("TN_Emulator.Program")
Set Workbook = ActiveWorkbook
Dim string_from_excel As String
#for loop to go through table rows
#put value in string_from_excel
If string_from_excel = some condition
Call go_to_screen_2(TN_Emulator)
#grab and put data back in excel
Else
Call go_to_screen_3(TN_Emulator)
#grab and put data back in excel
End If
Call go_to_screen_1(TN_Emulator)
#next loop logic
End Sub
Public Sub go_to_screen_1(TN_Emulator As Object)
#send instructions to the emulator
End Sub
我相信我正确理解了说明,并且已经为我自己成功进行了测试。我还在助手函数定义中传递了多个对象,并按实际应用程序的需要按每次Ex的相同顺序进行调用。
Sub go_to_screen_1(TN_Emulator As Object, ConnectionName As Object)
和
Call go_to_screen_1(TN_Emulator, ConnectionName)