ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH云课堂-专业的职场技能充电站 Excel转在线管理系统,怎么做看这里 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 EH云课堂直播课程免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 263|回复: 14

[求助] VBA跨表查询数据,求帮助,急用!!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-10-2 09:31 | 显示全部楼层 |阅读模式
有两个工作薄,销售计划和价格表,销售计划中价格是空白的,从价格表中查询对应产品价格后填入销售计划表中,用VBA程序实现,谢谢。

1.zip

305.25 KB, 下载次数: 18

TA的精华主题

TA的得分主题

发表于 2019-10-2 10:53 | 显示全部楼层
Sub jiage() '''QQ:705664849
Set d = CreateObject("scripting.dictionary")
f = Dir(ThisWorkbook.Path & "\价格表.xls*")
If f = "" Then MsgBox "价格表不存在": Exit Sub
Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & f)
br = wb.Worksheets(1).[a1].CurrentRegion
For i = 2 To UBound(br)
    If Trim(br(i, 3)) <> "" Then
        d(Trim(br(i, 3))) = br(i, 5)
    End If
Next i
wb.Close False
Sheet1.Range("l4:l" & Sheet1.Cells(Rows.Count, 1).End(xlUp).Row) = Empty
ar = Sheet1.UsedRange
For i = 4 To UBound(ar)
    If d.exists(Trim(ar(i, 3))) Then
        ar(i, 12) = d(Trim(ar(i, 3)))
    End If
Next i
Sheet1.UsedRange = ar
        
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-4 08:11 | 显示全部楼层
朱荣兴 发表于 2019-10-2 10:53
Sub jiage() '''QQ:705664849
Set d = CreateObject("scripting.dictionary")
f = Dir(ThisWorkbook.Path ...

非常感谢,请教个问题,br = wb.Worksheets(1).[a1].CurrentRegion,其中CurrentRegion只能识别表中的1到41行,实际工作表中有448行,哪里出了问题?实在找不到原因……

TA的精华主题

TA的得分主题

发表于 2019-10-4 08:18 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-10-4 08:32 | 显示全部楼层
说明中间有空白行,可以用:
Myr = wb.Worksheets(1).cells(wb.Worksheets(1).rows.count,1).end(xlup).row
Myc =wb.Worksheets(1). [iv1].End(xlToLeft).Column
br = wb.Worksheets(1).Range("a1").Resize(Myr,Myc))
来代替:br = wb.Worksheets(1).[a1].CurrentRegion

TA的精华主题

TA的得分主题

发表于 2019-10-4 08:32 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-4 10:50 | 显示全部楼层
本帖最后由 小小白616 于 2019-10-4 10:55 编辑

For Each Rng In Range("l2", [l2].End(xlDown))
Rng(1, 2) = "=(l" & Rng.Row &"*g" & rng.row&)"
Next
想在表内实现L列和G列相乘,提示代码缺少结束语句,哪里错了!谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-4 11:29 | 显示全部楼层
liulang0808 发表于 2019-10-4 08:18
br = wb.Worksheets(1).[a1].CurrentRegion
修改
br = wb.Worksheets(1).usedrange

For Each Rng In Range("l2", [l2].End(xlDown))
Rng(1, 2) = "=(l" & Rng.Row &"*g" & rng.row&)"
Next
请问,我想在表内实现L列和G列相乘,以上代码提示代码缺少结束语句,哪里错了?谢谢!

TA的精华主题

TA的得分主题

发表于 2019-10-4 14:25 | 显示全部楼层
小小白616 发表于 2019-10-4 11:29
For Each Rng In Range("l2", [l2].End(xlDown))
Rng(1, 2) = "=(l" & Rng.Row &"*g" & rng.row&)"
Nex ...

对一个单元格循环添加公式,楼主这个乘法的意义何在?
Rng(1, 2) = "=(l" & Rng.Row & "*g" & Rng.Row & " )"

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-4 15:10 | 显示全部楼层
liulang0808 发表于 2019-10-4 14:25
对一个单元格循环添加公式,楼主这个乘法的意义何在?
Rng(1, 2) = "=(l" & Rng.Row & "*g" & Rng.Row & ...

rng偏移一行两列=L(rng的行号)*g(rng的行号)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,高效办公专列,每天发车

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

GMT+8, 2019-11-13 12:34 , Processed in 0.074130 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

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

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

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