Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2894|回复: 7

[已解决]VBA中使用到VLOOKUP函数文件名参数化如何写

[复制链接]
发表于 2017-4-28 11:39 | 显示全部楼层 |阅读模式
录制了一个涉及到三个文件的宏,录下来的语句是这样的:
    '使用VLOOKUP函数与上个月数据比对
    Windows("本月服开COMM.xls").Activate
    Sheets("生产库比统一模型多的表01").Select
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "新增"
    Range("F2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],[上月服开COMM.xls]生产库比统一模型多的表01!C4,1,0)"
    Selection.AutoFill Destination:=Range("F2:F800")
    Range("F2:F800").Select


因为处理流程很长,而且涉及的三个文件需要更换的,我想把这三个文件参数化,因此加了这个定义变量语句:
    Dim LastMonth As String, ThisMonth As String, Reason As String
    LastMonth = "上月服开COMM.xls"
    ThisMonth = "本月服开COMM.xls"
    Reason = "服开COMM全量原因.xls"


然后上面的脚本就改成了:
    '使用VLOOKUP函数与上个月数据比对
    Windows(ThisMonth).Activate
    Sheets("生产库比统一模型多的表01").Select
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "新增"
    Range("F2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],[LastMonth]生产库比统一模型多的表01!C4,1,0)"
    Selection.AutoFill Destination:=Range("F2:F800")
    Range("F2:F800").Select


然后现在到    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],[LastMonth]生产库比统一模型多的表01!C4,1,0)"这里就不能像之前那正常跑下去了,而是打开一个选择打开文件的窗口,就是说找不到 “上月服开COMM.xls”这个对象了,这个对象是内嵌在VLookup函数里的,应该要怎么写才对呢?求助解决方法,谢谢!
最佳答案
2017-4-28 11:45
你改成这样试试呢:
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],[" & LastMonth & "]生产库比统一模型多的表01!C4,1,0)"
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-4-28 11:45 | 显示全部楼层    本楼为最佳答案   
你改成这样试试呢:
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],[" & LastMonth & "]生产库比统一模型多的表01!C4,1,0)"
回复

使用道具 举报

 楼主| 发表于 2017-4-28 12:46 | 显示全部楼层
大灰狼1976 发表于 2017-4-28 11:45
你改成这样试试呢:
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],[" & LastMonth & "]生产库比统一模型多 ...

改成这样,可以了耶,谢谢大神,& 是模糊匹配的意思么?然后在这里面为什么还要加“” 呢?用于Windows(ThisMonth).Activate 这里不用的
回复

使用道具 举报

 楼主| 发表于 2017-4-28 14:04 | 显示全部楼层
大灰狼1976 发表于 2017-4-28 11:45
你改成这样试试呢:
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],[" & LastMonth & "]生产库比统一模型多 ...

原来之前还需要放空格才行,查不到是什么用意
回复

使用道具 举报

发表于 2017-4-28 16:19 | 显示全部楼层
&是VBA中的连接符,至于空格,是VBA书写要求,输出至单元格内时是没有空格的。
双引号内是字符串,我把你原来的一个字符串拆成两个,并在中间加入了LASTMONTH变量,
变量是不可以放在双引号内的。
回复

使用道具 举报

 楼主| 发表于 2017-4-28 16:46 | 显示全部楼层
大灰狼1976 发表于 2017-4-28 16:19
&是VBA中的连接符,至于空格,是VBA书写要求,输出至单元格内时是没有空格的。
双引号内是字符串,我把你 ...

愚钝,我能不能换个方式理解:ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],[" & LastMonth & "]生产库比统一模型多的表01!C4,1,0)"

就是前面两个双引号是一对,后面两个双引号是一对的?然后连接符是是连接变量LastMonth的?
我刚第一次是理解到中间两个双引号是一对的,然后第一个和第四个是一对,所以就有点get唔到
回复

使用道具 举报

发表于 2017-4-28 16:59 | 显示全部楼层
你现在的理解是正确的,双引号并没有嵌套用法,肯定是顺序成对的。
回复

使用道具 举报

 楼主| 发表于 2017-4-28 17:07 | 显示全部楼层
大灰狼1976 发表于 2017-4-28 16:59
你现在的理解是正确的,双引号并没有嵌套用法,肯定是顺序成对的。

谢谢,学习中
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-25 13:28 , Processed in 0.966159 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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