Ale*_*lex 2 delphi excel vba excel-vba
目前我正在将用VBA编写的项目转换为Delphi,并且偶然发现了使用Optional参数转换一些Subs的问题.比方说,有一个Sub声明(只是一个例子,实际的Subs有多达10个可选参数):
Sub SetMark
(x0 As Double, y0 As Double,
Optional TextOffset As Integer =5,
Optional TextBefore As String = "",
Optional Text As String = "",
Optional TextAfter As String = "mm",
Optional Color As String = "FFFFFF",
Optional ArrowPresent As Boolean = True)
Run Code Online (Sandbox Code Playgroud)
那个Sub随后可以这样调用:
Call SetMark (15, 100,,,"135")
Call SetMark (100, 100, 8,, "My text here..", "")
'a lot of calls here
Run Code Online (Sandbox Code Playgroud)
这里的Optional参数非常灵活,你可以省略它们中的任何一个,并且你也可以为它们中的任何一个赋值.与Delphi不同.
Procedure SetMark
(x0: real; y0: real,
TextOffset: Integer =5;
TextBefore: ShortString = '';
Text: ShortString = '';
TextAfter: ShortString = 'mm';
Color: ShortString = 'FFFFFF';
ArrowPresent: Boolean = True);
Run Code Online (Sandbox Code Playgroud)
看来你不能只是制作VBA电话的副本:
SetMark (15, 100,,,'135');// error here
Run Code Online (Sandbox Code Playgroud)
因此,问题是:有没有办法将Subs转换为Delphi程序,保持参数的相同灵活性?我的第一个想法是使用默认参数,但它不起作用.至于现在,在Delphi中我似乎必须直接传递列表中的所有参数,但这意味着需要进行大量的工作来审查和正确移植VBA调用.
有任何想法吗?
Dav*_*nan 12
有没有办法将VBA子程序转换为Delphi程序,仍然保持参数的相同灵活性?
没有办法实现这一点 - 除了列表末尾之外,省略参数的灵活性根本不存在.
对于自动化对象的方法,您可以使用命名参数,如下所述:Delphi中的命名/可选参数?但是,我非常建议您不要将类实现为自动化对象,只是为了获得该功能.
无论何时在语言之间切换,您都会发现不方便的差异.这是不可避免的.最好的方法是尝试找到用新语言解决问题的最佳方法,而不是试图将旧语言中的习语用于新语言.
在这种情况下,您可能希望使用重载函数或参数对象来减轻这种不便.