背景
我想在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
任何帮助非常感谢。如果有人有任何更好的方法来解决这个问题,我愿意接受建议。
答案 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
。