Excel精英培训网

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

[已解决]如何利用vba引用本文件内或外部工作表中的信息?

[复制链接]
发表于 2011-4-9 22:11 | 显示全部楼层 |阅读模式
5学分
成本计算.rar (31.03 KB, 下载次数: 63)

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-4-9 23:15 | 显示全部楼层    本楼为最佳答案   
  1. Sub 宏1()
  2.     Dim finalrow As Integer
  3.     Dim pa As String
  4.     pa = ThisWorkbook.Path
  5.     finalrow = [f65536].End(xlUp).Row
  6.     With Sheets(3)
  7.         .Columns("C:C").Cut
  8.         .Columns("A:A").Insert Shift:=xlToRight
  9.     End With
  10.     With Range("a3:a" & finalrow)
  11.         .Value = [f1].Value
  12.         .Offset(, 1).Value = [g1].Value
  13.         .Offset(, 2).Value = [i1].Value
  14.     End With
  15.     [d3].FormulaR1C1 = "=VLOOKUP([@原料编码],项目对照表!C1:C3,2,0)"
  16.     [e3].FormulaR1C1 = "=VLOOKUP([@原料编码],项目对照表!C1:C3,3,0)"
  17.     Workbooks.Open pa & "\产量.xlsx"
  18.     Workbooks.Open pa & "\单价.xlsx"
  19.     Workbooks("计算.xlsm").Activate
  20.     '====

  21.         Range("J3").FormulaR1C1 = "=VLOOKUP([@产品编码],[产量.xlsx]产量表!C2:C3,2,0)"
  22.         Range("M3").FormulaR1C1 = "=VLOOKUP([@产品编码],[产量.xlsx]产量表!C2:C5,4,)"
  23.         Range("K3").FormulaR1C1 = "=VLOOKUP([@原料编码],[单价.xlsx]单价表!C1:C3,3,)"
  24.         Range("L3").FormulaR1C1 = "=[@单价]*[@耗量]"
  25.         Range("N3").FormulaR1C1 = "=[@金额]/[@产品产量]"

  26.     '====
  27.     With Sheets(3)
  28.     .Columns("A:A").Cut
  29.     .Columns("D:D").Insert Shift:=xlToRight
  30.     End With
  31.     Workbooks("产量.xlsx").Close
  32.     Workbooks("单价.xlsx").Close
  33. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2011-4-10 17:45 | 显示全部楼层
回复 mn860429 的帖子

您好老师:现在有两个问题,需要您再给解决一下(另外还有一个暂时不提,我担心我给您说不清),一个是我的本意原表和期望结果表本是一张表,期望结果表是原表运行程序后的结果而已。二是,我的原表使用了套用单元格格式,如果取消套用则只有首行数据可以变化,即使不取消,当首行下面的引用区域数据被改动后,再次运行程序则不起作用了,我感觉是只是对首行设置了程序(不包括左边年份及月份等可以即时变动的几列)。期盼您的再次帮助。
回复

使用道具 举报

 楼主| 发表于 2011-4-10 18:49 | 显示全部楼层
回复 mn860429 的帖子

我又试了试,现在的问题只剩下一个就是希望使程序对所有行起作用。
回复

使用道具 举报

发表于 2011-4-10 20:54 | 显示全部楼层
  1. Sub 宏1()
  2.     Application.ScreenUpdating = False
  3.     Dim finalrow As Integer
  4.     Dim pa As String
  5.     pa = ThisWorkbook.Path
  6.     finalrow = [f65536].End(xlUp).Row
  7.     With Sheets(3)
  8.         .Columns("C:C").Cut
  9.         .Columns("A:A").Insert Shift:=xlToRight
  10.     End With
  11.     With Workbooks("计算.xlsm").Sheets(1).Range("a3:a" & finalrow)
  12.         .Value = [f1].Value
  13.         .Offset(, 1).Value = [g1].Value
  14.         .Offset(, 2).Value = [i1].Value
  15.         .Offset(, 3).FormulaR1C1 = "=VLOOKUP(rc6,项目对照表!C1:C3,2,0)"
  16.         .Offset(, 4).FormulaR1C1 = "=VLOOKUP(rc6,项目对照表!C1:C3,3,0)"
  17.         Workbooks.Open pa & "\产量.xlsx"
  18.         Workbooks.Open pa & "\单价.xlsx"
  19.         .Offset(, 9).FormulaR1C1 = "=VLOOKUP(rc8,[产量.xlsx]产量表!C2:C3,2,0)"
  20.         .Offset(, 12).FormulaR1C1 = "=VLOOKUP(rc8,[产量.xlsx]产量表!C2:C5,4,)"
  21.         .Offset(, 10).FormulaR1C1 = "=VLOOKUP(rc6,[单价.xlsx]单价表!C1:C3,3,)"
  22.         .Offset(, 11).FormulaR1C1 = "=rc11*rc9"
  23.         .Offset(, 13).FormulaR1C1 = "=rc12/rc13"
  24.         .Resize(, 14).Value = .Resize(, 14).Value
  25.     End With
  26.     With Sheets(3)
  27.         .Columns("A:A").Cut
  28.         .Columns("D:D").Insert Shift:=xlToRight
  29.     End With
  30.     Workbooks("产量.xlsx").Close
  31.     Workbooks("单价.xlsx").Close
  32.     Application.ScreenUpdating = True
  33. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2011-4-11 10:18 | 显示全部楼层
回复 mn860429 的帖子

关于单价的引用,还有一个问题就是希望实现如果计算表中原料编码含有“添加”字样时,单价以原料编码与产品编码组合为引用标识,如首行原料编码为“添加1001”,则单价引用时以“添加1001”与“2001”组合为引用标识,即“添加10012001”,如果原料编码不含“添加”字样,则单价引用仅以原料编码为引用标识,如第二行数据仅以“1002”为单价的引用标识( .Offset(, 10).FormulaR1C1 = "=VLOOKUP(rc6,[单价.xlsx]单价表!C1:C4,3,0)")。

另外,在运行程序时,如果单价表或产量表已经被打开,则出现单价表已经被打开的提示,如果不保存已打开的单价表等,则可能修改的单价表信息丢失,否则程序运行中断在打开单价表的语句上。

烦请解决下好吗。谢谢。
回复

使用道具 举报

 楼主| 发表于 2011-4-11 10:20 | 显示全部楼层
心灵有约 发表于 2011-4-11 10:18
回复 mn860429 的帖子

关于单价的引用,还有一个问题就是希望实现如果计算表中原料编码含有“添加”字样时 ...

成本计算(引用计算)1.rar (37.31 KB, 下载次数: 37)
回复

使用道具 举报

发表于 2011-4-11 23:02 | 显示全部楼层
回复 心灵有约 的帖子

不是很明白。
回复

使用道具 举报

 楼主| 发表于 2011-4-12 07:09 | 显示全部楼层
我的意思就是当原料编码中无"添加"字样时,单价如目前即可,当有添加字样时~,单价以原料编码和产品编码的组合为引用对象,调取其单价信息。另外需当单价和产量文件已打开状态时不再运行打开其文件语句。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 12:34 , Processed in 0.442050 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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