Excel 基于SQL数据的VBA验证列表

Excel 基于SQL数据的VBA验证列表,excel,validation,vba,Excel,Validation,Vba,背景: 我试图在excel中制作一个模板,以便在Access中保存的数据库存储系统中导入数据。我试图使用通过SQL选择的数据库中已经存在的变量为数据创建一些验证列表。每个要导入的列都需要一个包含5个项目的标题,每个项目都需要单独验证 我有SQL查询,它们用每个验证列表的内容填充工作表。它们的格式为一列字符串。(如果您需要代码,请询问,我将暂时忽略它,因为这不是问题所在) 我正在使用Excel2007.xlsm 问题: 因此,我的问题是试图在相关单元格中获取一个xlvalidatelist,该列表

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

我有SQL查询,它们用每个验证列表的内容填充工作表。它们的格式为一列字符串。(如果您需要代码,请询问,我将暂时忽略它,因为这不是问题所在)

我正在使用Excel2007.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
错误
我得到的错误在
行上。添加类型:=xlValidateL…

错误消息是
运行时错误“1004”:
应用程序定义或对象定义错误


非常感谢您的帮助。如果有人有更好的方法,我愿意接受建议。

你唯一错过的就是你公式中的等号,比如:

'....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函数。

我已经按照您的建议添加了“=”,但仍然得到相同的错误“1004”。我将在问题中添加更多详细信息。如果是,请检查您的工作表名称(如果代码与excel应用程序中的代码匹配)。我确实使用了您拥有的工作表的名称检查了您的代码,并且它可以正常工作。我已经仔细检查了工作表名称(这些名称是工作簿底部显示的工作表名称)。您使用的是什么版本的Excel?我有2007。我可以确认,它在我的2007和2010 Excel应用程序中工作。好的,我该回家了,明天我会再看一次,我可能在某个地方有一个简单的错误。感谢您的帮助。如果您的验证列表是通过数据>访问连接创建的,这可能会更容易,从而生成一个表。然后,您可以创建一个命名范围,该范围位于该表中的一列。将数据验证指向指定的范围,它将动态地重新调整大小。我已经这样做了,效果很好。是否可以在vba中创建数据连接?不同电脑的数据库位置可能不同。当我从功能区创建连接时,它位于“此电脑”标题下,而不是网络连接。这是可能的。我首先录制一个创建连接的宏。除了查看生成的VBA外,还可以查看连接字符串、命令文本和
连接属性
窗口中的其他项目,这些项目是在右键单击
并选择
外部数据属性
时获得的。