Excel精英培训网

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

[已解决]各位高手,请帮解决一个好复杂的问题!

[复制链接]
发表于 2015-5-21 22:38 | 显示全部楼层 |阅读模式
本帖最后由 sampsonpon 于 2015-5-21 22:39 编辑

公司局域网上,其中放有三张EXCEL表,这3张表都放在局域网上同一地方,也就是同一路径下3张不同名EXCEL表格。


如:
\\warehouse95下 有表1、表2、表3
这3张表里都带有一些公式和函数,甚至还有VBA代码
表1和表2其实都是为了表3服务的,
也就是说,表1和表2一直要添加数据,而表3是事先写了一些函数要抓取表1和表2里面我想要的内容

现在假如表3在公司的生产线工作台上,早上第一次打开后就一直显示在那里不要再动了,只供大家看数据

表1被1个人在打开编辑添加新数据进去,添加完后立马保存;
表2也被另一个人在另外一个地方打开编辑添加新数据进去,添加完后也立马保存;
问表3不需要任何人手动,如何能在只要表1、表2更新了内容保存后就可以同步更新数据呢(刚刚说了,表3是抓取表1、表2的内容的)。有办法实现吗?
最佳答案
2015-5-22 09:38
我来替师父回答,其实就是个定时器
模块中代码
  1. Private Declare Function SetTimer Lib "user32.dll" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  2. Private Declare Function KillTimer Lib "user32.dll" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long

  3. Private mTimer As Long

  4. 'Run Every 5 Seconds
  5. Sub StartTimer()
  6.     mTimer = SetTimer(0, 0, 5000, AddressOf ReadFile)
  7. End Sub

  8. 'Stop Timer
  9. Sub StopTimer()
  10.     KillTimer 0, mTimer
  11. End Sub


  12. Sub ReadFile()
  13.     'Read A1 In Sheet1 From Data.xlsx in the same folder
  14.     Dim Wbk     As Workbook
  15.     Dim Opened  As Boolean
  16.     Application.ScreenUpdating = False
  17.     On Error Resume Next
  18.     Opened = True
  19.     Set Wbk = Workbooks("Data.xlsx")
  20.     If Err.Number <> 0 Then
  21.         Opened = False
  22.         Set Wbk = Workbooks.Open(ThisWorkbook.Path & "\Data.xlsx")
  23.     End If
  24.     ThisWorkbook.Worksheets(1).Range("A1").Value = Wbk.Worksheets(1).Range("A1").Value
  25.     If Opened = False Then
  26.         Wbk.Close False
  27.     End If
  28.     Application.ScreenUpdating = True
  29. End Sub
复制代码
ThisWorkbook中的代码
  1. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  2.     StopTimer
  3. End Sub

  4. Private Sub Workbook_Open()
  5.     StartTimer
  6. End Sub
复制代码
AutoRead.zip (20.9 KB, 下载次数: 13)
发表于 2015-5-21 22:55 | 显示全部楼层
可以,做个RTD或者用API定时读取一次即可。
最简单的就是用公式直接连。
回复

使用道具 举报

 楼主| 发表于 2015-5-21 22:58 | 显示全部楼层
amulee 发表于 2015-5-21 22:55
可以,做个RTD或者用API定时读取一次即可。
最简单的就是用公式直接连。

能告诉具体怎么做吗?一点都不懂啊!RTD和API都没听说过
回复

使用道具 举报

发表于 2015-5-22 09:38 | 显示全部楼层    本楼为最佳答案   
我来替师父回答,其实就是个定时器
模块中代码
  1. Private Declare Function SetTimer Lib "user32.dll" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  2. Private Declare Function KillTimer Lib "user32.dll" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long

  3. Private mTimer As Long

  4. 'Run Every 5 Seconds
  5. Sub StartTimer()
  6.     mTimer = SetTimer(0, 0, 5000, AddressOf ReadFile)
  7. End Sub

  8. 'Stop Timer
  9. Sub StopTimer()
  10.     KillTimer 0, mTimer
  11. End Sub


  12. Sub ReadFile()
  13.     'Read A1 In Sheet1 From Data.xlsx in the same folder
  14.     Dim Wbk     As Workbook
  15.     Dim Opened  As Boolean
  16.     Application.ScreenUpdating = False
  17.     On Error Resume Next
  18.     Opened = True
  19.     Set Wbk = Workbooks("Data.xlsx")
  20.     If Err.Number <> 0 Then
  21.         Opened = False
  22.         Set Wbk = Workbooks.Open(ThisWorkbook.Path & "\Data.xlsx")
  23.     End If
  24.     ThisWorkbook.Worksheets(1).Range("A1").Value = Wbk.Worksheets(1).Range("A1").Value
  25.     If Opened = False Then
  26.         Wbk.Close False
  27.     End If
  28.     Application.ScreenUpdating = True
  29. End Sub
复制代码
ThisWorkbook中的代码
  1. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  2.     StopTimer
  3. End Sub

  4. Private Sub Workbook_Open()
  5.     StartTimer
  6. End Sub
复制代码
AutoRead.zip (20.9 KB, 下载次数: 13)
回复

使用道具 举报

发表于 2015-5-22 09:46 | 显示全部楼层
补充一下,如果你用公式直接连接,那么只要在ReadFile里面执行Calculate就行了
回复

使用道具 举报

 楼主| 发表于 2015-5-22 14:48 | 显示全部楼层
白开水的微笑 发表于 2015-5-22 09:46
补充一下,如果你用公式直接连接,那么只要在ReadFile里面执行Calculate就行了

对不起!您这样说我都不懂啊!我告诉您我文件具体文件名和具体位置吧,您把它放进您的代码里替换给我行吗?
有两张表:
COPY TO SHILIN.xlsm
kanban.xlsm
都在局域网共享盘“\\Cnwarehouse95\原始数据”这里

COPY TO SHILIN.xlsm是为kanban.xlsm服务的
也就是说kanban.xlsm第一次打开后就一直摆在那里显示着不管了,只需在COPY TO SHILIN.xlsm添加数据保存后kanban.xlsm也跟着同步更新了
回复

使用道具 举报

 楼主| 发表于 2015-5-22 23:55 | 显示全部楼层
白开水的微笑 发表于 2015-5-22 09:46
补充一下,如果你用公式直接连接,那么只要在ReadFile里面执行Calculate就行了

老师!朋友!请帮帮我吧!谢谢!
回复

使用道具 举报

 楼主| 发表于 2015-5-23 10:27 | 显示全部楼层
白开水的微笑 发表于 2015-5-22 09:46
补充一下,如果你用公式直接连接,那么只要在ReadFile里面执行Calculate就行了

高手老师,看不懂啊,您能再帮帮我吗?谢谢您!
回复

使用道具 举报

 楼主| 发表于 2015-5-23 21:49 | 显示全部楼层
白开水的微笑 发表于 2015-5-22 09:38
我来替师父回答,其实就是个定时器
模块中代码ThisWorkbook中的代码

按您给的代码,后来我自己摸索着,还真是搞定了,特别开心!特别感谢您!
还想补充问您一下,假如我想改为每3分钟刷新一次,是不是将5000改为180000?
回复

使用道具 举报

发表于 2015-5-25 09:25 | 显示全部楼层
sampsonpon 发表于 2015-5-23 21:49
按您给的代码,后来我自己摸索着,还真是搞定了,特别开心!特别感谢您!
还想补充问您一下,假如我想改 ...

这个是毫秒计时的,5分钟就是3*60*1000
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 08:09 , Processed in 0.296540 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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