ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] vba调用其他工作簿时无法获取其公式对应的值

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-22 15:58 | 显示全部楼层 |阅读模式

【测试源文件1】和【测试源文件2】 各有两个sheets
其中sheets("单户资金日报汇总表") 无论是公式状态还是值的状态
都能被【汇总文件】的宏取数并赋值给自己

但是sheets("资金流水汇总表") 只有单元格里存储的是值的时候
才能被【汇总文件】的宏取数并赋值给自己
求解决方案

自己不太好的思路是把sheets("资金流水汇总表")转为值 代码如下——但并没有实际效果 原因不明
fn = ThisWorkbook.Path & "\" & filename
Set wb = GetObject(fn) '在后台打开一张表
filename = Dir(ThisWorkbook.Path & "\*.xls") '获取该文件夹下的所有表的表名
Do While filename <> ""
If filename = ThisWorkbook.Name Then '为了避免合并的总表自己调用自己
Set Sht1 = wb.Worksheets("资金流水汇总表") '只合并该工作簿中的第一张表
Sht1.UsedRange = Sht1.UsedRange.Value  

  1. Sub comb()
  2.    
  3.     Application.ScreenUpdating = False
  4.     Dim rng1 As Range, rng2 As Range, rng3 As Range
  5.     Debug.Print e
  6.     Set rng1 = ThisWorkbook.Worksheets("资金余额采集").Range("a2:l400")
  7.     rng1.ClearContents
  8.     Set rng2 = ThisWorkbook.Worksheets("资金流入采集").Range("a2:f400")
  9.     rng2.ClearContents
  10.     Set rng3 = ThisWorkbook.Worksheets("资金流出采集").Range("a2:f400")
  11.     rng3.ClearContents
  12.     Dim r As Long, bkcol1 As Long, bkcol2 As Long
  13.     r = 2
  14.     bkcol1 = 14    'c的值是为了控制有几列,可以根据实际情况调整
  15.     bkcol2 = 5     'c的值是为了控制有几列,可以根据实际情况调整
  16.   
  17.    
  18.     Dim filename As String, fn As String, flag As String, wb As Workbook, sht As Worksheet
  19.     Dim erow As Long, erow1 As Long, erow2 As Long, arr As Variant, arr1 As Variant, arr2 As Variant, arr3 As Variant
  20.     filename = Dir(ThisWorkbook.Path & "\*.xls")   '获取该文件夹下的所有表的表名
  21.     Do While filename <> ""
  22.         If filename = ThisWorkbook.Name Then   '为了避免合并的总表自己调用自己
  23.             Else
  24.             erow = ThisWorkbook.Worksheets("资金余额采集").Range("a1").CurrentRegion.Rows.Count + 1    '为了找出要粘贴到汇总表的位置
  25.             erow1 = ThisWorkbook.Worksheets("资金流入采集").Range("a1").CurrentRegion.Rows.Count + 1    '为了找出要粘贴到汇总表的位置
  26.             erow2 = ThisWorkbook.Worksheets("资金流出采集").Range("a1").CurrentRegion.Rows.Count + 1    '为了找出要粘贴到汇总表的位置
  27.             'MsgBox (erow)
  28.             'MsgBox (erow1)'!!!
  29.             'MsgBox (erow2)
  30.             
  31.             fn = ThisWorkbook.Path & "" & filename
  32.             Set wb = GetObject(fn)        '在后台打开一张表
  33.             
  34.             
  35.             '第一张表
  36.             Set sht = wb.Worksheets("单户资金日报汇总表")    '数据源sheets表单1
  37.             arr = sht.Range(sht.Cells(10, "b"), sht.Cells(65536, "b").End(xlUp).Offset(0, bkcol1))    'arr找到要复制的区域,运行此句时含表头
  38.             
  39.             ThisWorkbook.Worksheets("资金余额采集").Cells(erow, "a").Resize(UBound(arr, 1), UBound(arr, 2)) = arr 'UBound(arr, 1)计算出行数,UBound(arr, 2)计算出列数

  40.             
  41.             '第二张表
  42.             Set Sht1 = wb.Worksheets("资金流水汇总表")    '只合并该工作簿中的第一张表
  43.             Sht1.UsedRange = Sht1.UsedRange.Value
  44.             Dim a, b, c, r1 As Integer
  45.             With Sht1
  46.             Sum = Application.WorksheetFunction.Sum(.Range("e1:e200"))
  47.             'Dim t1, t2, t3, t4, t5
  48.             't1 = sht1.Cells(2, "e").Value
  49.             't2 = sht1.Cells(3, "e").Value
  50.             't3 = sht1.Cells(4, "e").Value
  51.             't4 = sht1.Cells(5, "e").Value
  52.             't5 = sht1.Cells(6, "e").Value
  53.             'MsgBox ("t1=" & t1 & ",t2=" & t2 & ",t3=" & t3 & ",t4=" & t4 & ",t5=" & t5)
  54.             'MsgBox "sumr=" & Sum
  55.             If Sum = 0 Then
  56.             Else
  57.                 For a = 200 To 1 Step -1
  58.                 b = Application.WorksheetFunction.Sum(.Range(CStr("e1:e" & a)))
  59.                 c = Application.WorksheetFunction.Sum(.Range(CStr("e1:e" & a - 1)))
  60.                     If b <> c Then
  61.                     r1 = a
  62.                     
  63.                 Exit For
  64.                 Else
  65.                 End If
  66.                 Next
  67.                 'MsgBox r1
  68.                 arr1 = Sht1.Range(.Cells(2, "a"), .Cells(r1, "e")).Value
  69.                 ThisWorkbook.Worksheets("资金流入采集").Cells(erow1, 1).Resize(UBound(arr1, 1), UBound(arr1, 2)) = arr1
  70.             End If
  71.             End With
  72.             
  73.             
  74.             '第三张表
  75.             Dim x, y, z, r2 As Integer
  76.             With Sht1
  77.             Sum = Application.WorksheetFunction.Sum(.Range("j1:j200"))
  78.             MsgBox "sumc=" & Sum
  79.             If Sum = 0 Then
  80.             Else
  81.                 For x = 200 To 1 Step -1
  82.                 y = Application.WorksheetFunction.Sum(.Range(CStr("j1:j" & x)))
  83.                 z = Application.WorksheetFunction.Sum(.Range(CStr("j1:j" & x - 1)))
  84.                     If y <> z Then
  85.                     r2 = x
  86.                     
  87.                 Exit For
  88.                 Else
  89.                 End If
  90.                 Next
  91.                 'MsgBox r2
  92.                 MsgBox CStr("f2:j" & r2)
  93.                 arr2 = Sht1.Range(CStr("f2:j" & r2)).Value
  94.                 ThisWorkbook.Worksheets("资金流出采集").Cells(erow2, 1).Resize(UBound(arr2, 1), UBound(arr2, 2)) = arr2
  95.             End If
  96.             End With


  97.             wb.Close False     '将刚才打开的表关闭
  98.         End If
  99.         filename = Dir     '运行此句时filename获取下一个表的表名
  100.     Loop
  101.     Application.ScreenUpdating = True

  102. End Sub
复制代码







求助.zip

606.45 KB, 下载次数: 1

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-23 09:08 | 显示全部楼层
有没有早起的大神能解答下
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 15:42 , Processed in 0.017937 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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