Lor*_*nzo 11 architecture excel vba excel-2007 excel-vba
经过10年的编程,我发现自己在Excel 2007中创建我的第一个Excel应用程序是一项艰巨的任务.我之前在MS Access上编程了VBA,所以这对我来说不是真正的技术挑战,但它是"范式"的真正变化我敢说.
现在我必须实现一个与SQLServer对话的Excel应用程序(在我创建的专用数据库上),典型的CRUD内容,但我在任何一本书上都看不到(Excel Bible,Excel Power Programming等),我是怎么做的应该构建应用程序.
我可以为我的列命名,并在将数据发送回SQLServer时将它们用作数据库列
当我检索数据时我想要的电子表格应用程序,例如我检索ID,描述(将ID隐藏在列中并显示描述),或者我应该只使用描述一切并在我的SQLServer表中存储非规范化数据,使它们相当于服务器端Excel表格?
如果我想使用像LookupTable(ID,Country)这样的标准化数据,我应该将ID,Country信息存储在Range中,如果是这样,我如何强制用户从该范围(ID,Country)中选择一个值而不使用一个合适的Combobox?
当我从SQLServer检索数据时,我应该将其建模到ADODB.Recordset中(例如通过调用视图或存储过程)并将其复制到Sheet中,确保Recordset中的字段顺序与Sheet中的相同或者,还有更好的方法?
我确信有很多人了解我的情况,因为他们一直在我的鞋子里,请帮助我做一些有助于我理解电子表格应用世界的跳转.指向网络资源的指针也非常受欢迎.
谢谢.
我写了几个类似于你所描述的应用程序的应用程序,虽然我不能假装提供最佳实践,但我可以根据我的个人经验发表评论.
•我可以为列提供名称,并在将数据发送回SQLServer时将它们用作数据库列
当然为什么不,您可以将列名添加为Excel工作表的第一行,并使用单元格保护功能来防止最终用户篡改.您需要将Excel中的数据列与SQL Server中的基础字段以某种方式关联,这与任何方式一样好.
•如果我想使用LookupTable(ID,Country)之类的标准化数据,我应该将ID,国家/地区信息存储在范围中,如果存储,如何强制用户从该范围(ID,国家/地区)中选择一个值使用合适的Combobox?
您可以为每个查找表创建单独的(隐藏)工作表,并使用类似的代码强制选择(基于宏录制,以便可以清除)
With Sheet1.Range("E3").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=B2:B5"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "A sample"
.ErrorTitle = "An error"
.InputMessage = "Input message"
.ErrorMessage = "Error message"
.ShowInput = True
.ShowError = True
End With
Run Code Online (Sandbox Code Playgroud)
这将为您提供单元格中的组合框,验证失败时的错误消息以及单元格的标题.
•当我检索数据的电子表格应用程序时,例如检索ID,描述(将ID隐藏在列中并显示描述)或者我应该只使用描述来处理所有内容并在我的SQLServer表中存储非规范化数据,使它们相当于服务器端的Excel工作表?
无论哪种方式都可以.我可能会根据数据的复杂程度来决定.如果您需要在VBA中构建大量验证代码,我很想将非规范化数据拉入SQL Server中的临时表,然后在将数据移动到主表之前使用存储过程进行非规范化.因人而异.
•当我从SQLServer检索数据时,我应该将其建模为ADODB.Recordset(例如通过调用视图或存储过程)并将其复制到工作表中,确保Recordset中的字段顺序与表格还是有更好的方法吗?
我会避免使用复制和粘贴,因为它使用系统范围的剪贴板,如果你在同一时间使用PC,可能会发生奇怪的事情.excel中的range对象具有CopyFromRecordset方法,可用于将数据从ADO推送到工作表.它比手动分配迭代记录集要快得多.唯一的缺点是你必须事先自己创建标题列.
归档时间: |
|
查看次数: |
1907 次 |
最近记录: |