ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: VBA万岁

[求助] VSTO入门问题集

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-12-14 17:15 | 显示全部楼层
VBA万岁 发表于 2015-12-14 11:15
你是说像这样吗?
cmd.CommandText = "SELECT distinct 年份 FROM 任务记录";

再增加两个相关链接:
1、C#导入EXCEL到数据库,用OLE连接EXCEL时一直报"外部表不是预期格式"
2、.net连接excel时,报错外部表不是预期的格式。

TA的精华主题

TA的得分主题

发表于 2015-12-14 17:43 | 显示全部楼层
VBA万岁 发表于 2015-12-14 11:15
你是说像这样吗?
cmd.CommandText = "SELECT distinct 年份 FROM 任务记录";

我一般是使用sqlserver,不太清楚access.
但估计是sql语句中的表名错误,你可以排查一下

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-12-14 19:40 | 显示全部楼层
excelhomesnake 发表于 2015-12-14 17:43
我一般是使用sqlserver,不太清楚access.
但估计是sql语句中的表名错误,你可以排查一下

终于用141、142楼的方法测试成功,效果如下:
P2015121401.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-12-14 19:42 | 显示全部楼层
VBA万岁 发表于 2015-12-14 19:40
终于用141、142楼的方法测试成功,效果如下:

制作测试源码:

ExcelHelpTaskPane.rar

530.64 KB, 下载次数: 31

TA的精华主题

TA的得分主题

发表于 2015-12-15 10:53 | 显示全部楼层
求教:请问vsto+vb如何设置单元格是否居中、边框、背景色等格式?用VBA的方法不行

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-12-15 11:07 | 显示全部楼层
VBA万岁 发表于 2015-12-11 17:11
有空我试试。
我用VBA设计制作了一个实例如下:

改善了VBA版省市区三级联动,增加了将数据导入Access数据库的功能。VBA代码如下:

  1. <BLOCKQUOTE>
  2. <P>Private Sub UserForm_Initialize()
  3. On Error Resume Next
  4. Dim oxmlDoc As DOMDocument
  5. Dim Node As IXMLDOMNode
  6. Dim oXmlNodes As IXMLDOMNodeList
  7. Set oxmlDoc = New DOMDocument
  8. oxmlDoc.async = False
  9.    
  10. ComboBox1.Clear
  11. r = Range("a65536").End(xlUp).Row
  12. 'oxmlDoc.Load CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\省市区.xml"  '若将xml文件放于桌面,则启用此句
  13. oxmlDoc.Load ThisWorkbook.Path & "\省市区.xml"
  14. Set oXmlNodes = oxmlDoc.SelectNodes("/ProvinceCity")
  15. For i = 0 To oXmlNodes(0).ChildNodes.Length - 1
  16.     ComboBox1.AddItem oXmlNodes(0).ChildNodes(i).nodeName
  17. Next
  18. ComboBox1.ListIndex = 0
  19. End Sub</P>
  20. <P>Private Sub ComboBox1_Change()
  21. On Error Resume Next
  22. Dim oxmlDoc As DOMDocument
  23. Dim Node As IXMLDOMNode
  24. Dim oXmlNodes As IXMLDOMNodeList
  25. Set oxmlDoc = New DOMDocument
  26. oxmlDoc.async = False
  27.    
  28. ComboBox2.Clear
  29. r = Range("a65536").End(xlUp).Row
  30. oxmlDoc.Load ThisWorkbook.Path & "\省市区.xml"
  31. Set oXmlNodes = oxmlDoc.SelectNodes("/ProvinceCity/" & ComboBox1.Value)
  32. For i = 0 To oXmlNodes(0).ChildNodes.Length - 1
  33.     ComboBox2.AddItem oXmlNodes(0).ChildNodes(i).Attributes(0).Text
  34. Next
  35. End Sub</P>
  36. <P>Private Sub ComboBox2_Change()
  37. On Error Resume Next
  38. Dim oxmlDoc As DOMDocument
  39. Dim Node As IXMLDOMNode
  40. Dim oXmlNodes As IXMLDOMNodeList
  41. Set oxmlDoc = New DOMDocument
  42. oxmlDoc.async = False
  43.    
  44. ComboBox3.Clear
  45. r = Range("a65536").End(xlUp).Row
  46. oxmlDoc.Load ThisWorkbook.Path & "\省市区.xml"
  47. Set oXmlNodes = oxmlDoc.SelectNodes("/ProvinceCity/" & ComboBox1.Value)
  48. For i = 0 To oXmlNodes(0).ChildNodes.Length - 1
  49.     If oXmlNodes(0).ChildNodes(i).Attributes(0).Text = ComboBox2.Value Then
  50.         For Each Node In oXmlNodes(0).ChildNodes(i).ChildNodes
  51.             ComboBox3.AddItem Node.Attributes(0).Text
  52.         Next
  53.     End If
  54. Next
  55. End Sub</P>
  56. <P>Private Sub CommandButton1_Click()
  57. On Error Resume Next
  58. Dim oxmlDoc As DOMDocument
  59. Dim Node As IXMLDOMNode
  60. Dim oXmlNodes As IXMLDOMNodeList
  61. Set oxmlDoc = New DOMDocument
  62. oxmlDoc.async = False
  63.    
  64. Cells.Clear
  65. [a1:c1] = Array("省", "市", "区"): [a1:c1].Font.Bold = True: [a1:c1].Font.Size = 20
  66. r = Range("a65536").End(xlUp).Row
  67. oxmlDoc.Load ThisWorkbook.Path & "\省市区.xml"
  68. Set oXmlNodes = oxmlDoc.SelectNodes("/ProvinceCity")
  69. For i = 0 To oXmlNodes(0).ChildNodes.Length - 1
  70.     For j = 0 To oXmlNodes(0).ChildNodes(i).ChildNodes.Length - 1
  71.         For k = 0 To oXmlNodes(0).ChildNodes(i).ChildNodes(j).ChildNodes.Length - 1
  72.             n = n + 1
  73.             Cells(r + n, 1) = oXmlNodes(0).ChildNodes(i).nodeName
  74.             Cells(r + n, 2) = oXmlNodes(0).ChildNodes(i).ChildNodes(j).Attributes(0).Text
  75.             Cells(r + n, 3) = oXmlNodes(0).ChildNodes(i).ChildNodes(j).ChildNodes(k).Attributes(0).Text
  76.         Next
  77.     Next
  78. Next
  79. End Sub</P>
  80. <P>Private Sub CommandButton2_Click()
  81.     Dim cat As ADOX.Catalog
  82.     Dim tbl As ADOX.Table
  83.     On Error Resume Next
  84.     Kill Replace(ActiveWorkbook.FullName, "xlsm", "mdb")
  85.     Set cat = New ADOX.Catalog
  86.     cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Replace(ActiveWorkbook.FullName, "xlsm", "mdb") & ";"
  87.     Set tbl = New ADOX.Table
  88.     tbl.Name = ActiveSheet.Name
  89.     tbl.Columns.Append "ID", adInteger
  90.     tbl.Columns.Append Range("A1").Text, adVarWChar, 60
  91.     tbl.Columns.Append Range("B1").Text, adVarWChar, 60
  92.     tbl.Columns.Append Range("C1").Text, adVarWChar, 60
  93.     cat.Tables.Append tbl
  94.     Set cat = Nothing
  95.    
  96.     Dim cnn As ADODB.Connection
  97.     Dim rst As ADODB.Recordset
  98.     Dim i, Rw As Long, j As Integer
  99.     Rw = Range("A65536").End(xlUp).Row
  100.     Set cnn = New ADODB.Connection
  101.     With cnn
  102.         .Provider = "Microsoft.Jet.OLEDB.4.0"
  103.         .Open Replace(ActiveWorkbook.FullName, "xlsm", "mdb")
  104.     End With
  105.     Set rst = New ADODB.Recordset
  106.     rst.CursorLocation = adUseServer
  107.     rst.Open Source:=ActiveSheet.Name, ActiveConnection:=cnn, CursorType:=adOpenDynamic, LockType:=adLockOptimistic, Options:=adCmdTable
  108.     For i = 2 To Rw
  109.         rst.AddNew
  110.         For j = 1 To 3
  111.             rst("ID") = i - 1
  112.             rst(Cells(1, j).Value) = Cells(i, j).Value
  113.         Next j
  114.         rst.Update
  115.     Next i
  116.     rst.Close
  117.     cnn.Close
  118.     Set rst = Nothing
  119.     Set cnn = Nothing
  120.     MsgBox "省市区数据已全部导入数据库" & Replace(ActiveWorkbook.FullName, "xlsm", "mdb") & "中!"
  121. End Sub
  122. </P>
复制代码




TA的精华主题

TA的得分主题

 楼主| 发表于 2015-12-15 11:17 | 显示全部楼层
春阳 发表于 2015-12-15 10:53
求教:请问vsto+vb如何设置单元格是否居中、边框、背景色等格式?用VBA的方法不行

vsto+vb我不会,但VBA的方法是可以的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-12-16 16:36 | 显示全部楼层
VBA万岁 发表于 2015-12-15 11:07
改善了VBA版省市区三级联动,增加了将数据导入Access数据库的功能。VBA代码如下:

八、如何用C#实现Excel工作表与外部文件的数据交换?

(一)如何将XML文件的数据导入Excel工作表?
            如146楼的VBA代码中的第29~146一样实现将“省市区.xml”文件中的数导入Excel工作表?

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-12-16 16:48 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-12-16 16:55 | 显示全部楼层
VBA万岁 发表于 2015-12-16 16:36
八、如何用C#实现Excel工作表与外部文件的数据交换?

(一)如何将XML文件的数据导入Excel工作表?

(二)如何将Excel工作表数据导入Access数据库?
            如146楼VBA代码中第81~122句那样实现将工作表中的省市区数据导入Access数据库?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 23:03 , Processed in 0.031058 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表