0

背景:
我正在尝试在 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

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

4

1 回答 1

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上面代码中需要哪个。

于 2013-05-30T16:00:22.033 回答