ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 关于字典Dictionary与Parent的解惑,还望大家不吝赐教,谢谢。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-2-26 10:13 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
先抛出问题:为什么Dic(F.Parent) = ""与Dic(Mid(F.Parent.Paragraphs(1).Range.Text, InStr(F.Parent.Paragraphs(1).Range.Text, F.Parent), 2)) = ""会不一样
工作中想先用find功能搜索到关键词组,再去重。用Dic(Mid(F.Parent.Paragraphs(1).Range.Text, InStr(F.Parent.Paragraphs(1).Range.Text, F.Parent), 2)) = ""可以实现搜索到的关键词组去重;但用Dic(F.Parent) = ""却只能得到最后一组关键词组?先自行找了各种资料,还是不解。
望各位老师指点迷津,谢谢。
完整代码如下:
Sub UniqueParent()
    Dim objDoc As Object, WdFileName As Variant, F As Object, Dic As Variant
    Range("A2:C100").ClearContents
    On Error Resume Next
    Set Dic = CreateObject("scripting.dictionary")
    WdFileName = Application.GetOpenFilename("Word files,*.doc?", , "Browse for file containing table to be imported")
    If WdFileName = False Then Exit Sub
    Set objDoc = GetObject(WdFileName)
    Set F = objDoc.Content.Find
        F.Text = [G2]
        F.MatchWildcards = [H2] '使用通配符”
    Do While F.Execute
'        Dic(F.Parent) = ""
        Dic(Mid(F.Parent.Paragraphs(1).Range.Text, InStr(F.Parent.Paragraphs(1).Range.Text, F.Parent), 2)) = ""
        Cells(Dic.Count + 1, 1) = Dic.Count
        Debug.Print F.Parent
    Loop
    [b2].Resize(UBound(Dic.keys) + 1, 1) = Application.Transpose(Dic.keys)
    objDoc.Close False
End Sub


UniqueParent.zip

330.43 KB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2022-2-26 10:35 | 显示全部楼层
本帖最后由 jiangxiaoyun 于 2022-2-26 10:37 编辑

Dic(F.Parent) = ""   字典本身就是去重,只保留一个key。Mid(F.Parent.Paragraphs(1).Range.Text, InStr(F.Parent.Paragraphs(1).Range.Text, F.Parent), 2)  你这个key明显和F.Parent不一样。自己按F8结合本地窗口,慢慢看就清楚了。key都不一样。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-26 10:46 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
jiangxiaoyun 发表于 2022-2-26 10:35
Dic(F.Parent) = ""   字典本身就是去重,只保留一个key。Mid(F.Parent.Paragraphs(1).Range.Text, InStr(F ...

Debug.Print F.Parent,这个内容是动态变化的,Dic(F.Parent) 最终结果只有一个,这点不理解。

TA的精华主题

TA的得分主题

发表于 2022-2-26 11:06 | 显示全部楼层
本帖最后由 jiangxiaoyun 于 2022-2-26 11:09 编辑
limonet 发表于 2022-2-26 10:46
Debug.Print F.Parent,这个内容是动态变化的,Dic(F.Parent) 最终结果只有一个,这点不理解。

Dic(F.Parent.Text) = ""   Parent是父对象,包含的东东可多了。这点类似将单元格放进字典的key,需要指定value属性。多看看本地窗口吧。立即窗口没多少用。
image.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-26 13:44 | 显示全部楼层
谢谢大大,Dic(F.Parent.Text) = ""解决了问题,也加深了对parent的认识。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-26 14:49 来自手机 | 显示全部楼层
jiangxiaoyun 发表于 2022-2-26 11:06
Dic(F.Parent.Text) = ""   Parent是父对象,包含的东东可多了。这点类似将单元格放进字典的key,需要指 ...

想想还是有的疑惑:如果Dic(F.Parent) =""不成立,那最后结果为什么还会有一个?

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-26 19:58 | 显示全部楼层
哪位大大有Parent的相关资料,我搜索了好久,这块资料好少,谢谢。

TA的精华主题

TA的得分主题

发表于 2022-2-27 16:16 | 显示全部楼层
limonet 发表于 2022-2-26 14:49
想想还是有的疑惑:如果Dic(F.Parent) =""不成立,那最后结果为什么还会有一个?

F.Parent是一个对象,别管他显示什么,他就是一个对象。
就如同好的时候叫人家小甜甜,不好的时候叫人家牛夫人,但都是同一个人啊,猴子还是那个猴子,管他有毛还是没毛。
将对象放进字典,不指定任何属性,字典就认这个对象了,那管你叫小甜甜还是叫牛夫人,属性什么滴统统不管,不管你的text是啥(没指定),key都是一个对象,以最后的对象名称为key。
你指定了text属性,就不一样了,字典就将text当作key了。text不一样,key就不一样。
至于Parent就是返回上一级对象(就是爸爸),那需要啥资料,爸爸是个军人就是军人的资料,是个老师就是老师的资料。
以上仅供参考。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-28 21:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
jiangxiaoyun 发表于 2022-2-27 16:16
F.Parent是一个对象,别管他显示什么,他就是一个对象。
就如同好的时候叫人家小甜甜,不好的时候叫人家 ...

谢谢,我慢慢消化下。

TA的精华主题

TA的得分主题

发表于 2022-3-3 09:08 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 05:48 , Processed in 0.047498 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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