我在Google上搜索了很多,但是我想确定:
我真的需要对“最大功能”使用“ Application.WorksheetFunction.Max”吗?
如果可以,我可以缩短吗?如果将这种长结构扭曲为函数,会产生开销吗?
编辑:我已经删除了vba-access标签。
答案 0 :(得分:1)
我发现有两种较短的编码方式:
Sub MaxTest()
Dim A As Integer, B As Integer
A = Sheet1.Range("$A$1").Value
B = Sheet1.Range("$A$2").Value
Sheet1.Range("$B$1").Value = WorksheetFunction.Max(A, B)
End Sub
Sub MaxTest()
Dim A As Integer, B As Integer
A = Sheet1.Range("$A$1").Value
B = Sheet1.Range("$A$2").Value
Sheet1.Range("$B$1").Value = IIf(A > B, A, B)
End Sub
答案 1 :(得分:0)
我为您提供3个想法,
您几乎可以在所有情况下使用VBA跳过“应用程序”,而只需编写“ Worksheetfunction.Max”。
您可以将变量设置为“工作表功能”,即
Dim foo As Object
Set foo = Application.WorksheetFunction
foo.Max(MyArray)
您可以在仅执行此操作的模块中创建函数或Sub。并且输入的时间很长,不确定这样做是否值得,并且可能会降低代码的速度。
答案 2 :(得分:0)
在访问中,您没有这些工作表函数,唯一的方法是,如果A是您自己编写的代码,还是B是将excel库导入到您的Access项目中。就个人而言,我会选择A,因为如果您导入excel库,那么您将卡在导入的excel的确切版本中。
一个简单而肮脏的例子是
Public Function Max(ByVal A As Variant,ByVal B As Variant) As Variant
If A > B Then
Max = A
Else
Max = B
End If
End Function
这需要一些TLC,这样您就不会尝试比较记录集或其他废话,而会引发错误。
编辑:我想如果您以后将对Excel的引用绑定了,那么我也可以得到excel库中的东西,所以这是第三个选择。
答案 3 :(得分:0)
这里没有提供上下文,但是如果您基本上是在循环并为每对查找最大值,则说明您做错了错,尤其是在Access数据库中。与尝试提供VBA hacky解决方法(迫使您进入RBAR *模式)相比,做与SQL查询相同的事情将更快,更轻松地设计和优化,这对所有数据库都是一种厌恶。
因此,我首先将仔细研究代码的作用,如果这基本上只是要聚合的大量数据,则不应使用VBA,而应使用SQL。
哎呀,如果您想变得懒惰,Access已经为您提供了DMax
域功能(尽管它们有问题,因为它们总是在VBA中使用,因此以RBAR方式使用)。您真的只想让SQL完成所有工作并获得最终记录集,该记录集将变为直接读取/导出/显示操作,而无需任何其他工作。
如果您花了很长时间仔细查看代码,并且输入不是来自数据源,也不是在循环中运行(无论是直接还是间接),那么可以使用一些自制的VBA功能或引用Excel库(最好是后期绑定)。
1) R ow- B y- 变色- R ow-迭代很酷语言。在像SQL这样的声明性语言中,它并不那么酷。
答案 4 :(得分:0)
看到我的问题不清楚后,我自己回答。
有些人不知道,我是说EXCEL还是ACCESS。我的错,给错标签。这是纯VBA问题。
第二个错误:我正在为我的问题提供EXCEL-Way(工作表)。但这纯属VBA问题。
我无法删除问题,但我喜欢这样做。
所以答案是:
public class CustomClient : ServiceClient_v1
{
public CustomClient(binding, address) : base (binding, address) {}
}
...正在完成工作。
很抱歉浪费我们的时间!