ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 对应数据表导入无法切换页

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-11-17 17:08 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
前提,想将data中的数据导入到vba这个文件中。
比如data的A页导入到VBA的A页,B页到B页。保证每个工作簿都一一对应的导入进数据   
例子是3个页的文件,每页分别有7,6,5行数据。

问题:发现只导入第一页的数据,第2页,第3页数据读取了,但并没有写入VBA这个文件,为什么呢?该如何解决?
(用range("a11")=lr,看了下,显示为5,也就是第3页表的行数,读取了,但没写到新文件对应位置。。)
两个文件在附件中,请高人帮忙,谢谢。

For Each sht In wb.Sheets
        With sht
            lc = .Range("IV1").End(xlToLeft).Column
            arr = .Range("a1").Resize(1, lc)
            lr = .Range("a65536").End(xlUp).Row
            If lr > 1 Then
                brr = .Range("a2").Resize(lr - 1, lc)
                For i = 1 To lc
                    If d(arr(1, i)) <> "" Then
                    sht.Select
                    Cells(2, d(arr(1, i))).Resize(lr - 1) = WorksheetFunction.Index(brr, 0, i)
                    End If
                Next
            End If
        End With
    Next

桌面.rar

16.64 KB, 下载次数: 15

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-11-17 17:10 | 显示全部楼层
Cells(2, d(arr(1, i))).Resize(lr - 1) = WorksheetFunction.Index(brr, 0, i)
自己想了下,在这行前加了sht.Select,就是想选中目前激活的页进行写入,但为什么还是不成功呢?

我在想是不是这个选中是只被打开文件的这个页被选中?而当前vba这个文件依旧只是选中目前打开时的那一页!?
请高人解释。

TA的精华主题

TA的得分主题

发表于 2009-11-17 17:12 | 显示全部楼层
For Each sht In wb.Sheets
        With sht
            lc = .Range("IV1").End(xlToLeft).Column
            arr = .Range("a1").Resize(1, lc)
            lr = .Range("a65536").End(xlUp).Row
            If lr > 1 Then
                brr = .Range("a2").Resize(lr - 1, lc)
                For i = 1 To lc
                    If d(arr(1, i)) <> "" Then
                    .Cells(2, d(arr(1, i))).Resize(lr - 1) = WorksheetFunction.Index(brr, 0, i)
                    End If
                Next
            End If
        End With
    Next

这样???

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-11-17 17:18 | 显示全部楼层
不行的,如果用.Cells(2, d(arr(1, i))).Resize(lr - 1) = WorksheetFunction.Index(brr, 0, i)那么任何数据都无法导入了,可能是cells前加不了"."??我也不知道。。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-11-17 17:19 | 显示全部楼层
ActiveWorkbook.sht.Select我也试过了,结果是打开了要导入的data文件。。。

TA的精华主题

TA的得分主题

发表于 2009-11-17 17:26 | 显示全部楼层

回复 2楼 richard0238 的帖子

这个代码主体是我以前写的,代码要在工作表代码区运行,Cells前面没有加工作表对象是指本工作表
而sht是打开工作簿中的一个工作表(For Each sht In wb.Sheets)
如果代码在模块中运行,数据就写进打开工作簿中被激活的那个工作表了,由于后面有一个wb.Close False不保存关闭,数据不会被保存
如果要将数据保存到指定工作表,可以在Cells前面指定工作表对象
如:ThisWorkbook.Sheets("Sheet2").Cells(2, d(arr(1, i))).Resize(lr - 1) = WorksheetFunction.Index(brr, 0, i)

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-11-18 11:30 | 显示全部楼层
我的代码是放在工作表代码区运行呀。。。。
我按你说的放在木块中,并加入了ThisWorkbook.Sheets("Sheet2").,将"sheet2"改为了sht,结果无法运行。。。

TA的精华主题

TA的得分主题

发表于 2009-11-18 11:41 | 显示全部楼层

回复 7楼 richard0238 的帖子

“将"sheet2"改为了sht”是不对的
在For Each sht In wb.Sheets循环中,sht是打开工作簿中的一个工作表
要指定一个本工作簿工作表对象,6楼中工作表对象前面加上了一个ThisWorkbook就是指本工作簿
可以这样:

For Each sht In wb.Sheets
  ……

ThisWorkbook.Sheets(sht.name).Cells(2, d(arr(1, i))).Resize(lr - 1) = WorksheetFunction.Index(brr, 0, i)
'在使用ThisWorkbook.Sheets(sht.name)之前最好加上一个判断这个工作表是否存在
……
next

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-11-18 17:17 | 显示全部楼层
太感谢了,测试成功,非常感谢前辈的指点。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-11-23 17:08 | 显示全部楼层
又出问题了,本来好好的3个页面都可以导入了的。。。
结果现在又无法使用了。。。
第一个页面可以全部导入,第二个页面什么都不导入,第三个页面导入2个数据。。。

这也太灵异了,开始导入好好的都成功了的,请专家看看附件。

桌面.rar

20.69 KB, 下载次数: 11

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

本版积分规则

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

GMT+8, 2024-5-6 17:17 , Processed in 0.045169 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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