2016-08-04 110 views
1

vba非常新,而且我在使用一段代码时遇到了一些问题。实质上,我试图从用户表单中的列表框中对用户选择的项目执行不同的工作表函数。VBA Excel:参数不是可选

Private Sub cmdRunStat_Click() 
Dim averageValue As Single 
Dim sdValue As Single 
Dim maxValue As Variant 
Dim minValue As Single 
Dim modeValue As Single 
Dim UserRange As String, sheetName As String 


Set UserRange = ListBox1.Selected = True 


If optAverage.Value = True Then 

    averageValue = WorksheetFunction.Average(UserRange) 
    MsgBox "The average of the selected data is " & averageValue 

ElseIf optSD.Value = True Then 

    sdValue = WorksheetFunction.StDev(UserRange) 
    MsgBox "The standard deviation of the selected data is " & sdValue 

ElseIf optMax.Value = True Then 

    maxValue = WorksheetFunction.Max(UserRange) 
    MsgBox "The maximum of the slected data is " & maxValue 

ElseIf optMin.Value = True Then 

    minValue = WorksheetFunction.Min(UserRange) 
    MsgBox "The minimum of the slected data is " & minValue 

Else 

    modeValue = WorksheetFunction.Mode(UserRange) 
    MsgBox "The mode of the slected data is " & modeValue 

End If 

End Sub 
+1

你确定编译器错误是不就行了'设置UserRange = ListBox1的“对象需要”。 Selected = True'? – Comintern

+0

你不能'设置'值为字符串。这是错误的'Set UserRange = ListBox1.Selected = True' – cyboashu

+1

如果您使用ListBox输入代表范围的字符串,那么您需要使用'Set UserRange = ListBox1.Value',只需记住该字符串需要包含(“Sheet1”)。Range(“A1:D10”)' –

回答

3

设置UserRange = ListBox1.Selected =真

这是分配给String对象不正确的方法。

如果您试图从列表框中获取选定的值,那么我认为这是您所需要的?

Dim UserRange As String 

For i = 0 To ListBox1.ListCount - 1 
    If ListBox1.Selected(i) Then 
     UserRange = ListBox1.List(i) 
     Exit For 
    End If 
Next i 

而如果是一个Range对象,那么你需要改变上面

Dim UserRange As Range 

For i = 0 To ListBox1.ListCount - 1 
    If ListBox1.Selected(i) Then 
     Set UserRange = ListBox1.List(i) 
     Exit For 
    End If 
Next i 
+0

感谢您的输入!我会做出这些改变。 –