如何将字符转换成函数名,然后执行这个函数(在线等待,急!大家帮忙,谢谢!)

Ibmmaster 2005-10-13 11:15:18
有100函数,前缀都一样为"ProgramFunction",序数为1-100
function ProgramFunction1()
function ProgramFunction2()
.............
function ProgramFunction100()

有一个变量intFunctionSelect,如果是值是1就调用ProgramFunction1,如果是2就调用ProgramFunction2......
不用if来判断,不用case来选择(如果用if,用Case,要100个了,也不现实),怎么办?(即如何把"ProgramFunction"和序数转换成函数执行)
类似于控件的选择用callbyname()
...全文
347 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcmj 2006-04-29
  • 打赏
  • 举报
回复
不用if来判断,不用case来选择(如果用if,用Case,要100个了,也不现实),怎么办?(即如何把"ProgramFunction"和序数转换成函数执行)

要100个了,也不现实?
你省代码长度呀? 程序不是越短越好的,100个比一个好维护多了
junki 2006-04-29
  • 打赏
  • 举报
回复
这些函数应该有共同点吧?怎么不考虑用类模块呢?
of123 2006-04-29
  • 打赏
  • 举报
回复
1
所有内容写入一个函数,然后通过传递的参数选择执行:
Public Function Func(Byval x As Integer) As ...
Select Case x
Case 1
...
Case 2
...
End Select
End Function

2
写一个类似上面的中间函数,根据 Case 调用你原来的函数之一:
Case 1
Call Function1(...)
Case 2
Call Function2(...)
...

3
利用 API:
Option Explicit
Private Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As Long

Private Sub Command1_Click()
Call EbExecuteLine(StrPtr("Function" & x), 0&, 0&, 0&)
End Sub
DawnPine 2006-04-29
  • 打赏
  • 举报
回复
唉~~~~~~~~~~~
这个VB

当年用Foxbase的时候可以用宏替换
就是DOS的BAT文件也能用环境变量来实现
用C的话可以用函数指针

用VB怎么实现?俺没琢磨过
帮顶
miracle888 2006-04-29
  • 打赏
  • 举报
回复
这类似VC中的动态创建概念了.楼上说的没错,应该有更简单的办法解决,可否解释一下你的问题原型,看看大家有没有更好的解决办法.
LordSimon 2006-04-28
  • 打赏
  • 举报
回复
要是出现这种情况恐怕楼主程序的结构不时很合理的。建议改变实现方法
八哥 2006-04-28
  • 打赏
  • 举报
回复
execute "MSGBOX 2222" ,vbscript
winehero 2005-10-13
  • 打赏
  • 举报
回复
可以将这些方法封装到一控件中,再使用CallByName
winehero 2005-10-13
  • 打赏
  • 举报
回复
弄错,汗~~~
winehero 2005-10-13
  • 打赏
  • 举报
回复
Option Explicit

Private Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As Long

Public Function ExecuteLine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0
End Function

'执行第I个函数
Private function ExcFunc(byval i as integer)
'执行第I个函数
ExecuteLine "Call ProgramFunction" & i
End Sub

weiweiplay 2005-10-13
  • 打赏
  • 举报
回复
学习
CatchWind 2005-10-13
  • 打赏
  • 举报
回复
有點難度
zlt982001 2005-10-13
  • 打赏
  • 举报
回复
用脚本控件 scriptcontrl ,将 函数对象加入,然后就可以用字符串执行
viena 2005-10-13
  • 打赏
  • 举报
回复
没办法
northwolves 2005-10-13
  • 打赏
  • 举报
回复
你的问题改为传值的过程可以很好的解决.

Sub ProgramFunction1(byref result as string)
Sub ProgramFunction2(byref result as string)
.............
Sub ProgramFunction100(byref result as string)



Private Sub Command1_Click()
Dim i As Integer, s As String
For i = 1 To 100
CallByName Me, "ProgramFunction" & i, VbMethod, s
debug.print s
Next
End Sub


Callbyname 函数 最后一个参数的用法可参考MSDN.
bbhere 2005-10-13
  • 打赏
  • 举报
回复
就得传参数吧

不是很清楚
northwolves 2005-10-13
  • 打赏
  • 举报
回复
FUNCTION 加上参数

function ProgramFunction(byval index as integer)

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧