Vba 分别从数组返回值
我正在寻找一种方法来返回具有最高报销率的账单费率类型 在我搜索的三个变量中,我想存储返回到表中的变量的名称,以便用户可以确定使用了哪种计费类型 此代码从数据库中提取帐单费率Vba 分别从数组返回值,vba,ms-access,Vba,Ms Access,我正在寻找一种方法来返回具有最高报销率的账单费率类型 在我搜索的三个变量中,我想存储返回到表中的变量的名称,以便用户可以确定使用了哪种计费类型 此代码从数据库中提取帐单费率 CenterAllRate=DLookup(“CenterBillRateAllVendors”、“Centers”、“CenterID=”&Chr(34)和CenterID&Chr(34)) CenterHospitalRate=DLookup(“CenterBillRateHospitalOnly”、“Centers”、
CenterAllRate=DLookup(“CenterBillRateAllVendors”、“Centers”、“CenterID=”&Chr(34)和CenterID&Chr(34))
CenterHospitalRate=DLookup(“CenterBillRateHospitalOnly”、“Centers”、“CenterID=”&Chr(34)和CenterID&Chr(34))
VendorRate=DLookup(“VendorReimbRate”、“vendorrid=”&Chr(34)和Me.Parent.VendorID&Chr(34))
报销率=最大金额列表(CenterAllRate、CenterHospitalRate、VendorRate)
我正在使用我在网上找到的这个预先构建的函数来查找三个选项中最高的报销率
函数MaxOfList(ParamArray varValues())作为变量
Dim i作为“整数”循环控制器。
将varMax设置为迄今为止发现的变量的最大值。
varMax=Null'初始化为Null
对于i=LBound(varValues)到UBound(varValues)
如果IsNumeric(varValues(i))或IsDate(varValues(i)),则
如果varMax>=varValues(i),则
“什么也不做
其他的
varMax=varValues(i)
如果结束
如果结束
下一个
MaxOfList=varMax
端函数
我如何返回具有最高值的变量的名称,或者在创建记录时为它们提供别名?欢迎使用SO
我设计了一个很差的解决方案,可能对您有用,但它在某些特定条件下有效:
MaxOfList(CenterAllRate、CenterHospitalRate、VendorRate)
MaxOfList(AnotherAllRate、differentiallrate、ExampleRate)
我的解决方案不会返回正确的名称。它只适用于CenterAllRate、CenterHospitalRate、VendorRate
HighestVar
的列表中最高层的名称。每次调用函数MaxofList
Option Explicit
Public HighestVar As String 'We declare the public Var to store name of max rate
Function MaxOfList(ParamArray varValues()) As Variant
Dim i As Integer 'Loop controller.
Dim varMax As Variant 'Largest value found so far.
HighestVar = "" 'We Reset the var
varMax = Null 'Initialize to null
For i = LBound(varValues) To UBound(varValues)
If IsNumeric(varValues(i)) Or IsDate(varValues(i)) Then
If varMax >= varValues(i) Then
'do nothing
Else
varMax = varValues(i)
Select Case i 'We use select Case to store in HighestVar the name of highest rate
Case 0
HighestVar = "CenterAllRate"
Case 1
HighestVar = "CenterHospitalRate"
Case 2
HighestVar = "VendorRate"
End Select
End If
End If
Next
MaxOfList = varMax
End Function
每次调用函数MaxofList
时,就会在varHighestVar
中找到最高速率的名称。只要在你想要的地方使用它。例如:
CenterAllRate = DLookup("CenterBillRateAllVendors", "Centers", "CenterID = " & Chr(34) & CenterID & Chr(34))
CenterHospitalRate = DLookup("CenterBillRateHospitalOnly", "Centers", "CenterID = " & Chr(34) & CenterID & Chr(34))
VendorRate = DLookup("VendorReimbRate", "Vendors", "VendorID = " & Chr(34) & Me.Parent.VendorID & Chr(34))
ReimbursementRate = MaxOfList(CenterAllRate, CenterHospitalRate, VendorRate)
Msgbox HighestVar & " is the highest rate" 'We show in Msgbox highest rate
希望这能帮助你。让我知道。因为你是一名编码新手,所以这是一个深入挖掘的好机会。:) 我将创建一个对象来包装
Name
和Rate
属性,并将其传递给我的函数
例如:
一个简单的报销类别:
Option Explicit
Private name_ As String
Private rate_ As Variant
Public Property Get Name() As String
Name = name_
End Property
Public Property Let Name(Value As String)
name_ = Value
End Property
Public Property Get Rate() As Variant
Rate = rate_
End Property
Public Property Let Rate(Value As Variant)
rate_ = Value
End Property
您的方法有一些小的更改:
Function MaxOfList(varValues As Variant) As Reimbursement
Dim i As Integer 'Loop controller.
Dim varMax As Reimbursement 'Largest value found so far.
Set varMax = New Reimbursement
For i = LBound(varValues) To UBound(varValues)
If IsNumeric(varValues(i).Rate) Or IsDate(varValues(i).Rate) Then
If varMax.Rate < varValues(i).Rate Then
With varMax
.Name = varValues(i).Name
.Rate = varValues(i).Rate
End With
End If
End If
Next
Set MaxOfList = varMax
End Function
非常感谢。这看起来是一个很好的解决方案。我从其他来源发现,我可能需要创建一个类,但不确定如何创建。我会试一试,然后用我的结果回复,效果非常好。再次感谢!
Sub T()
Dim centerAll As New Reimbursement
Dim centerHospital As New Reimbursement
Dim vendor As New Reimbursement
Dim maxReimbursement As New Reimbursement
With centerAll
.Name = "centerAll"
'.Rate = DLookup("CenterBillRateAllVendors", "Centers", "CenterID = " & Chr(34) & CenterID & Chr(34))
.Rate = 3
End With
With centerHospital
.Name = "centerHospital"
'.Rate = DLookup("CenterBillRateHospitalOnly", "Centers", "CenterID = " & Chr(34) & CenterID & Chr(34))
.Rate = 8
End With
With vendor
.Name = "vendor"
'.Rate = DLookup("VendorReimbRate", "Vendors", "VendorID = " & Chr(34) & Me.Parent.VendorID & Chr(34))
.Rate = 5
End With
Set maxReimbursement = MaxOfList(Array(centerAll, centerHospital, vendor))
Debug.Print maxReimbursement.Name, maxReimbursement.Rate
End Sub
'Output
'centerHospital 8