ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA中用Mid 函数截取表中某字段是为何会提示“外部名未定义的编译错误”?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-9-25 14:40 | 显示全部楼层 |阅读模式
VBA中用Mid 函数截取表中某字段是为何会提示“外部名未定义的编译错误”?

有感于SQL语句:select 校区,count(*) as 人数 from 报名 where mid([准考证号],4,3)='043'
    说明一下:mid是access中的截取函数,([准考证号],4,3)就是截取准考证号,从第4位开始取,取3位长度

为何在Access的VBA模块中的下列代码会提示“外部名未定义的编译错误“
Sub test()
    Dim s As String
    s = Mid([原内容], 2)
End Sub

mid.jpg

Mid.rar

30.71 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2016-9-25 16:15 | 显示全部楼层
你在SQL语句中,你的[准考证号]来自于你的 From 来原表名:报名,
你在VBA中[原内容],你让电脑认为你这个来源于哪里呢???

先理解一下一些概念,和一些示例

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-25 17:39 | 显示全部楼层
Renco 发表于 2016-9-25 16:15
你在SQL语句中,你的[准考证号]来自于你的 From 来原表名:报名,
你在VBA中[原内容],你让电脑认为你这个 ...

您好 ,加了表名还是同样的提示,能否帮忙举个实例。多谢了
s = Mid([表1].[原内容], 2)

TA的精华主题

TA的得分主题

发表于 2016-9-25 21:39 | 显示全部楼层
sql也是一串代码,在特定的查询模块中运行后,返回了一个结果集,整个语句的组成:
  Select 字段1,字段2   ....这表示取什么字段
  From 来源表    这表示,取字段去哪个表里取
  Where  ..条件...    表示在来源表中相应字段的条件比较值
  
  好似我们说话时的主谓宾,完成了一组语句表达,让这个查询模块得以运行并得到 相关结果

但看看你的VBA,算是有了谓:mid函数,宾:[原内容]   ,那么主在哪呢??
VBA的模块构成可不与查询模块构成一样的,从意思理解上,做个比喻:
比如你在葡萄园,要吃葡萄,你可以简单的伸手采摘就行了,这个类似查询模块,用个语句就可以取值了
但如果你在VBA中呢,你好比在一个大城市中,你首先要去找个水果店,然后要找到葡萄,付钱买了才可以得于是,
所以你的VBA出错,是因为你还没找到 水果店就在找葡萄了,这是问题之一
之二呢就是,水果店是购买的方式吃葡萄,而不是直接摘,意思是说,VBA中取值方式与查询模块中的方式是不一样的,不能用表名.字段这么简单的取得,
那要取得如何操作呢,一般有用Dlookup函数取,也可以用ADO,DAO等方法的recordset集来取得
基于LZ当前的水平呢,你可以试着通过简单的方式 来解决,少用VBA,从宏和宏转制VBA渐进学习
可以参照学的代码很多,但现在你的基础认识还不足,所以就是有示例,理解学习上还是存在问题的。
以上为个人建议

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-25 21:39 | 显示全部楼层
Renco 发表于 2016-9-25 16:15
你在SQL语句中,你的[准考证号]来自于你的 From 来原表名:报名,
你在VBA中[原内容],你让电脑认为你这个 ...

"外部名未定义“的提示就是指电脑在我的VBA中找不来[原内容]的来源,请高手帮忙解决。多谢了

TA的精华主题

TA的得分主题

发表于 2016-9-25 22:26 | 显示全部楼层
你这个VBA做来的目 的是什么?

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-25 22:41 | 显示全部楼层
本帖最后由 HYH281 于 2016-9-25 22:43 编辑
Renco 发表于 2016-9-25 22:26
你这个VBA做来的目 的是什么?

我想用 VBA 实现下面 SQL 查询的功能,请帮忙实现。多谢了

UPDATE 表1 SET 表1.名称 = DLookUp("名称","表1","[编号]='" & Mid([内容],2) & "'")
WHERE (((表1.名称) Is Null));

TA的精华主题

TA的得分主题

发表于 2016-9-26 10:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
运行 update ,Insert into ,Delete语句时,可以使用Currentporject.connection.excute 方法

Sqlstr=“[查询语句,可以在查询模块中运行的,但要注意把里面的双引号改成单引号]”

Currentporject.connection.excute Sqlstr

在这里 Currentporject.connection你可以认为是 主
excute 是谓        
Sqlstr 是宾

VBA是对象型处理方式,所以 Currentporject.connection 其实就是指的对象
excute就是这个对象的方法
Sqlstr 就是参数变量值


TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-26 21:32 | 显示全部楼层
多谢您的指教!

我需将“原表”完善成“SQL更新后的表”(见图片附件),但目前我只能得到“VBA更新的表”,因想用VBA替代SQL更新查询,因此在将SQL移至VBA的过程中,我能在VBA中能用Dlookup函数,不加“MId函数”就能正常运行“Dlookup函数”,但加了Mid函数后就提示错误(我测试过以文本和函数方式),(见附件),我不理解,同样是用表中的字段名,用在Dlookup函数不报错,而MId函数就会报错,请帮忙将“UPDATE 表1 SET 表1.名称 = DLookUp("名称","表1","[编号]='" & Mid([原内容],2) & "'")
WHERE (((表1.名称) Is Null));“改为VBA语句。多谢了!
原表.jpg
SQL更新后的表.jpg
VBA更新的表.jpg
报错.jpg

Mid.rar

30.71 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2016-10-7 12:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
做好了, 但我還是無法理解為何這樣做....
另外有關外部名未定議的錯誤, MID([總內容],2)

[總內容]不被認可為一個可定議對像, 因他是TABLE內的一個欄位,

必須用sql查詢把資料傳回rs 再做後續處理,

再說,MID 第一個參考是要string, 就算你可指向[總內容], 它也將會是一組Array, 也會出錯說組溢位等問題

附件也寫了DAO查詢例子, 基礎沒打好, 好大的概念錯誤哦~

Mid.rar

27.89 KB, 下载次数: 6

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

本版积分规则

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

GMT+8, 2024-11-17 01:31 , Processed in 0.045760 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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