设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2774|回复: 6
打印 上一主题 下一主题

关于EXCEL值引用的方法及想法

[复制链接]
跳转到指定楼层
1#
发表于 2011-10-23 20:55:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我刚刚做出一个EXCEL某单元格值得引用的公共函数,可见下面的代码。但在这里我也有些疑问:
1.打开EXCEL的过程过于耗费内存和时间,是否有更加快捷的办法?
2.在下面的代码中我使用的是CreateObject,我想问的是,如果我用GetObject(文件路径,)引用未打开的EXCEL是否有效?
  1. Public Function str_excel(ByVal path As String, ByVal h As Integer, ByVal l As Integer) As String
  2. 'path是路径,h是行,l是列
  3. Dim appExcel As Object
  4. Dim ws As Excel.Worksheet
  5. Dim wk As Excel.Workbook
  6. Set appExcel = CreateObject("Excel.Application")
  7. Set wk = appExcel.Application.Workbooks.Add(path)
  8. Set ws = wk.Worksheets(1)
  9. str_excel = ws.Cells(h, l).Value
  10. wk.Close
复制代码
PS.其实我做这段代码的主要目的是实现不规则的单独单元格内容的导入。希望大家可以借鉴和号的建议。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2011-10-23 22:32:54 | 只看该作者
本帖最后由 williamwangc 于 2011-10-23 22:34 编辑

现在在这段功能函数在实际应用中出现了问题,希望有人解答一下。
代码如下:
  1. Dim str_school As String
  2. Dim str_class As String
  3. Dim str_path As String
  4. Dim str_update1 As String
  5. Dim str_update2 As String


  6. str_path = CurrentProject.path & "" & "导入资料.xls"
  7. str_school = str_excel(str_path, 2, 2)
  8. str_class = str_excel(str_path, 4, 2)
  9. Debug.Print str_school
  10. Debug.Print str_class

  11. DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "资料", str_path, True, "Sheet1!A6:B20"

  12. str_update1 = "UPDATE [资料] SET [学校]=str_school WHERE [学校]='' "
  13. DoCmd.RunSQL str_update1

  14. str_update2 = "UPDATE [资料] SET [班级]=str_class WHERE [班级]='' "
  15. DoCmd.RunSQL str_update2
复制代码
发现这段代码有两大问题
1.两段DEBUG.PRINT显示的内容是一样的,是不是函数在设置的时候应该用BYREF比较正确呢?
2.在两段UPDATE里面无法发现str_school和str_class的值,这是怎么回事?
3#
发表于 2011-10-23 23:48:44 | 只看该作者
1、可以用ADO来读取Excel数据来改进。
2、未打开Excel应该用CreateObject。有些书上说,打开Excel后,可以用GetObject,不过之前我的测试貌似出错。
3、代码部分应为:
UPDATE 资料 SET 资料.学校=str_school WHERE 资料.学校 IS NULL
跟ByVal和ByRef没关系,我一般连这个前缀都不写的。直接用
Function Test( A As String, B As String) As String
…………………………
End Function
4#
 楼主| 发表于 2011-10-24 11:19:50 | 只看该作者
本帖最后由 williamwangc 于 2011-10-24 11:26 编辑

再问下版主,我始终在16行和18行两个引用的参数无法实现。这是为什么?我在第11和12的debug.print都是有内容的。但到update里面就认不出参数了(str_school和str_class)。这是为什么?
其实就是我上面的问题2,还是没解决。它说无法辨认我的str_excel的数值,明明debug.print里面都实现引用了。{:soso_e132:}
5#
发表于 2011-10-25 20:04:30 | 只看该作者
给字段类型有关系么?Excel里,默认输入的数字都默认为数值型。按你的Update部分,“学校”和“班级”也应当是数值型字段噢。——你确定么?
6#
 楼主| 发表于 2011-10-25 21:06:14 | 只看该作者
本帖最后由 williamwangc 于 2011-10-25 21:23 编辑

我这里全是字符串型的,都是str的打头的嘛。
7#
发表于 2011-10-28 03:07:10 | 只看该作者
williamwangc 发表于 2011-10-25 21:06
我这里全是字符串型的,都是str的打头的嘛。

如果是字符型,应当加上单引号:
str_update2 = "UPDATE [资料] SET [班级]='" & str_class & "' WHERE [班级] IS NULL "

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-14 15:45 , Processed in 0.083392 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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