如何在MS Access VBA中选择前3个值
我有一张有10个文本框的表格。我想添加一个按钮,单击该按钮时,将显示一条包含前3个文本框值平均值的消息。其目的是在数据实际保存到数据库之前向用户显示信息 vba中是否有一个“top n”函数或某种聪明的方法 提前感谢。自己编写代码即可: 1) 首先,我们需要一个通用的排序例程,因此需要添加一个新的标准模块,以及类似以下代码的内容:如何在MS Access VBA中选择前3个值,vba,ms-access,Vba,Ms Access,我有一张有10个文本框的表格。我想添加一个按钮,单击该按钮时,将显示一条包含前3个文本框值平均值的消息。其目的是在数据实际保存到数据库之前向用户显示信息 vba中是否有一个“top n”函数或某种聪明的方法 提前感谢。自己编写代码即可: 1) 首先,我们需要一个通用的排序例程,因此需要添加一个新的标准模块,以及类似以下代码的内容: Sub QuickSort(ByRef Values(), L As Long, R As Long) Dim I As Long, J As Long, Piv
Sub QuickSort(ByRef Values(), L As Long, R As Long)
Dim I As Long, J As Long, Pivot As Variant, Temp As Variant
If (R - L) <= 0 Then Exit Sub
Do
I = L
J = R
Pivot = Values(CLng(L + (R - L) / 2))
Do
Do While Values(I) - Pivot < 0
I = I + 1
Loop
Do While Values(J) - Pivot > 0
J = J - 1
Loop
If I <= J Then
If I <> J Then
Temp = Values(I)
Values(I) = Values(J)
Values(J) = Temp
End If
I = I + 1
J = J - 1
End If
Loop Until I > J
If L < J Then QuickSort Values, L, J
L = I
Loop Until I >= R
End Sub
3) 在表单代码中,前三个值的平均值可以这样计算:
Const NumTextBoxCount = 10
Const NumTextBoxPrefix = "txtNum" 'alter as applicable
Function GetNumTextBoxTop3Avg() As Double
Dim I As Integer, Nums(1 To NumTextBoxCount)
For I = 1 To NumTextBoxCount
Nums(I) = CDblDef(Me.Controls(NumTextBoxPrefix & I).Value, 0)
Next I
QuickSort Nums, LBound(Nums), UBound(Nums)
GetNumTextBoxTop3Avg = (Nums(NumTextBoxCount) + Nums(NumTextBoxCount - 1) + Nums(NumTextBoxCount - 2)) / 3
End Function
Private Sub cmdShowTop3Nums_Click()
MsgBox GetNumTextBoxTop3Avg
End Sub
按顺序命名文本框,txtbox1、txtbox2、txtbox3。。。使用for循环获取单个值并找到平均值。使用Me(“txtbox”&i)引用存储在文本框中的值。值我需要找到前3个值的平均值,而不是全部值。您需要遍历所有值,将它们收集到一个数组中,然后对它们进行排序。这是一些排序代码-
Const NumTextBoxCount = 10
Const NumTextBoxPrefix = "txtNum" 'alter as applicable
Function GetNumTextBoxTop3Avg() As Double
Dim I As Integer, Nums(1 To NumTextBoxCount)
For I = 1 To NumTextBoxCount
Nums(I) = CDblDef(Me.Controls(NumTextBoxPrefix & I).Value, 0)
Next I
QuickSort Nums, LBound(Nums), UBound(Nums)
GetNumTextBoxTop3Avg = (Nums(NumTextBoxCount) + Nums(NumTextBoxCount - 1) + Nums(NumTextBoxCount - 2)) / 3
End Function
Private Sub cmdShowTop3Nums_Click()
MsgBox GetNumTextBoxTop3Avg
End Sub