基于SQL数据的VBA验证列表

时间:2013-05-30 15:40:06

标签: excel validation vba

背景
我想在excel中创建一个模板,以便在Access中保存的数据库存储系统中导入数据。我正在尝试使用通过SQL选择的数据库中已存在的变量为数据创建一些验证列表。要导入的每个列都需要一个包含5个项目的标题,每个项目都需要单独验证。

我有SQL查询,用每个验证列表的内容填充工作表。它们采用单列字符串的格式。 (如果你需要代码请求代码,我现在就把它留下来,因为这不是问题)。

我正在使用Excel 2007 .xlsm

问题:
因此,我的问题是尝试在相关单元格中获取xlvalidatelist,该单元格基于取消访问的数据列表进行验证,并保存在单独的工作表中。最初我试图创建一个逗号分隔的字符串用于验证,但我遇到了一个字符串中255个字符限制的问题。我现在正试图直接引用另一张表中的字符串列表。我还希望验证列表接受被验证的单元格的内容;允许用户添加不在数据库中的新值(我有代码来处理这种情况,当文件被导入数据库时​​)。

代码:

Public Function CreateValidationLists(ByVal SheetName As String, Row As Integer)

Dim RowCounter As Integer
Dim Colcounter As Integer

RowCounter = Row


For Colcounter = 2 To 256
   With ActiveWorkbook.Worksheets("Import Data").Cells(RowCounter, Colcounter)
        With .Validation
             .Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Formula1:="Sites!" & Range(Worksheets("Sites").Cells(1, 1), Worksheets("Sites").Cells(1, 1).End(xlDown)).Address
        End With
    End With
Next

End Function

错误
我得到的错误在.Add Type:=xlValidateL...行上 错误消息是
Run-time error '1004':
Application-defined or object-defined error

任何帮助非常感谢。如果有人有任何更好的方法来解决这个问题,我愿意接受建议。

1 个答案:

答案 0 :(得分:1)

你唯一遗漏的是你的公式中的等号

'....your code here
Formula1:="=Sites!" & Range(Worksheets("Sites").Cells(1, 1), Worksheets("Sites").Cells(1, 1).End(xlDown)).Address
'.... your code here

你的想法非常正确,我喜欢它。您可以直接从数组传递值。以下是您可以使用的示例代码:

Sub ValueFromArray()
'testing code!
    Dim myArray
        myArray = Array("A", "B", "C", "D")

    With ActiveWorkbook.Worksheets("Import Data").Cells(1, 2)
        With .Validation
             .Add Type:=xlValidateList, _
             AlertStyle:=xlValidAlertInformation, _
             Formula1:=Join(myArray, ", ")
        End With
    End With
End Sub

查看上面代码中所需的Join function