2016-07-31 38 views
3

我对VBA相当陌生,但我对Java和Python有相当丰富的经验。我被赋予了在excel电子表格上组织附近学校的评分标准的任务,并且我想让教师在点击一个按钮时重新组织电子表格,因此我决定使用VBA。Excel VBA集合至验证列表

这是我到目前为止我的代码(这是草率的,但我会清理一次,我得到它的工作好):

Private Sub Workbook_Open() 

' Initialize Variables 
Dim i%, j% 
Dim vTemp$, StdList$ 
Dim Stds As Collection 


Set Stds = New Collection 

' Compute the index of the last Standard on Test worksheet 
lastStd = Sheet3.Range("B" & Rows.Count).End(xlUp).Row 

' Remove Duplicates from the Standards and remove commas 
On Error Resume Next 
For i = 2 To lastStd 
    Stds.Add (Sheet3.Cells(i, 2)), Chr(34) & (Sheet3.Cells(i, 2)) & Chr(34) 
Next i 
On Error GoTo 0 

For i = 1 To Stds.Count 
    Stds.Item(i) = Replace(Stds.Item(i), ",", Chr(130)) 
Next i 


' Sort the Standards Alphabetically (using Bubble Sort) 
For i = 1 To Stds.Count - 1 
    For j = i + 1 To Stds.Count 
     If Stds(i) > Stds(j) Then 
      vTemp = Stds(j) 
      Stds.Remove (j) 
      Stds.Add vTemp, vTemp, i 
     End If 
    Next j 
Next i 


' Reinitialize Cell Data 
Sheet8.Range("A1:J100").Clear 

For i = 1 To Stds.Count 
    Sheet8.Cells(i, 1).Value = Stds.Item(i) 
Next i 


' Output the Standards to the Excel Spreadsheet 
For i = 1 To Stds.Count 
    StdList = StdList & Stds.Item(i) & "," 
Next i 
With ThisWorkbook.Sheets("Sheet1").Range("F3").Validation 
    .Delete 
    .Add Type:=xlValidateList, _ 
    AlertStyle:=xlValidateAlertStop, _ 
    Formula1:=StdList 
End With 
End Sub 

当我打开电子表格中的代码执行,但执行时,我得到“运行时错误1004'应用程序定义或对象定义错误'”。我们的目标是让代码通过分级标准进行搜索,枚举集合,删除重复项,按字母顺序排序标准,并将逗号替换为看起来像逗号的字符,以便我可以将集合转换为列表和地方将其列入电子表格某处的下拉列表中。当我选择调试选项,这三条线都强调:

.Add Type:=xlValidateList, _ 
    AlertStyle:=xlValidateAlertStop, _ 
    Formula1:=StdList 

我的猜测是,我要么语法挣扎,或者是有类型不匹配的地方在那里,我没有看到;这两者都可能。

回答

4

您可以在参数运行debug.print - 这将指出,xlValidateAlertStop是空

它实际上应该是xlValidAlertStop

+1

啊。我知道这很愚蠢。现在一切似乎都很完美。谢谢! –