VBA数据追加

bacoder 2015-01-13 10:02:46
有会VBA的大牛吗?小生遇一问题,求大牛解决。

我用VBA实现了从A文件读取数据,追加在B文件中。

如果B文件为空,200多条数据几秒就能追加上,但当B文件中有1000多条数据时,要执行10分钟才能追加完。
如果B文件为空,从1000行以后追加也很快。
如果A文件只有一两条,执行很快。
如果A文件有20 多条就要执行1分多钟。

我追加的方式是根据一列数据,查找他为 “” 的单元格,再往后执行追加。那个大牛能给解释解释这是为什么吗?如何改进?
...全文
1531 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
dsd999 2015-02-09
  • 打赏
  • 举报
回复
引用 14 楼 bacoder 的回复:
[quote=引用 13 楼 dsd999 的回复:] 不用全贴出来,就是想看看赋值那块的代码。
已经写出来了啊!就是简单地value = value 我代码简写的那部分: reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value[/quote] 想看看你赋值的单元格有没有规律,有规律的话就不用一个一个单元格赋值了。
bacoder 2015-02-07
  • 打赏
  • 举报
回复
引用 13 楼 dsd999 的回复:
不用全贴出来,就是想看看赋值那块的代码。
已经写出来了啊!就是简单地value = value 我代码简写的那部分: reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value
dsd999 2015-02-06
  • 打赏
  • 举报
回复
不用全贴出来,就是想看看赋值那块的代码。
bacoder 2015-02-05
  • 打赏
  • 举报
回复
源代码没办法贴,在公司,管理比较严格。以下是我现写的核心Copy 代码。望大神指点

sub  extractInfo(byval startTime as date, byval endTime as data , byval resultsheet as worksheet, byval sourcesheet as worksheet)
dim r_rowindex, s_rowindex, lastRow as integer
dim timeStr as String

r_rowindex = 4
s_rowindex = 4

' 找到最后一行 resultsheet 存放结果的sheet页
do while resultsheet.cells(rowindex, 2).value <> ""
    r_rowindex = r_rowindex + 1
loop

do while sourcesheet.cells(s_rowindex, 4).value <> ""
    timeStr = sourcesheet.cells(s_rowindex, 4).value
    '通过时间筛选出符合条件的记录
    if  idDate(timeStr ) and  startTime < timeStr and timeStr < endTime then
        ‘列赋值(有很多单元格的字符很多)
        reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value
        reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value
        reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value
        reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value
        reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value
        reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value
        reusltsheet.cells(r_rowindex , 2).value = source.cells(s_rowindex, 1).value
        
        ’对该列数据的分析
       if   reusltsheet.cells(r_riwindex,1) = "" then
          ' 给单元格填充颜色 
       end if
       if   reusltsheet.cells(r_riwindex,1) = "" then
          ' 给单元格填充颜色
       end if
       if   reusltsheet.cells(r_riwindex,1) = "" then
          ' 给单元格填充颜色
       end if

        r_rowindex = r_rowindex + 1
    end if

    s_rowindex = s_rowindex + 1
loop
end sub
bacoder 2015-02-03
  • 打赏
  • 举报
回复
数据量比较大,你是说复制一行读写分开吗??
dsd999 2015-02-03
  • 打赏
  • 举报
回复
引用 10 楼 bacoder 的回复:
数据量比较大,你是说复制一行读写分开吗??
最好能贴出你的代码,让大家帮你分析分析。
dsd999 2015-01-16
  • 打赏
  • 举报
回复
引用 7 楼 bacoder 的回复:
两个表的格式不一样,没法行拷贝。同样是一个单元格一个单元格的赋值,从1000行以后操作和从头操作有区别吗?前1000条数据的大小会影响插入的速度吗?
只是赋值的话速度是一样的。你看看是不是别的代码影响的? 不能用复制粘贴的话,建议你读和写分开,就是先读到数组里,然后一次写入。
dsd999 2015-01-15
  • 打赏
  • 举报
回复
你追加的行都是连续的,还是分开的? 挨个单元格赋值,肯定不快 试试行赋值,或者行拷贝。
bacoder 2015-01-15
  • 打赏
  • 举报
回复
从源数据里抽取的行不连续。
bacoder 2015-01-15
  • 打赏
  • 举报
回复
两个表的格式不一样,没法行拷贝。同样是一个单元格一个单元格的赋值,从1000行以后操作和从头操作有区别吗?前1000条数据的大小会影响插入的速度吗?
xiaodeerdeer 2015-01-14
  • 打赏
  • 举报
回复
你的追加方式应该是存在问题的
dsd999 2015-01-14
  • 打赏
  • 举报
回复
追加的方式是怎么实现的?一条条追加的?
me4405801 2015-01-14
  • 打赏
  • 举报
回复
试试Range("a65536").End(xlUp).Row
bacoder 2015-01-14
  • 打赏
  • 举报
回复
我追加的方式是找到相应的单元格直接 .value = .value 两层for循环。
bacoder 2015-01-14
  • 打赏
  • 举报
回复
是一条一条追加的。可以批量追加吗?有没有优化的追加方式?
目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试. 31.2.3 DAP设计模式 51.3 为Microsoft数据引擎创建 Access数据 项目 51.3.1 新的ADP工具和对象 61.3.2 NorthwindCS项目和da Vinci工具 箱的深入研究 61.4 OfficeVBA编辑器和Access的集成 91.5 DAP和DHTML的HTML源编辑器 101.6 浏览和编辑子数据表中的相关记录 111.7 使Jet和SQL Server 7.0/MSDE数据库 相一致 111.8 Access在2000年问题上的改进 121.8.1 四位数年份选项设置 121.8.2 数据库窗口 131.8.3 窗体和报表 141.8.4 名称自动更正 151.8.5 与Office 2000相关的改进 151.9 安装Access 2000 171.9.1 Access 2000的初始安装 171.9.2 定制Access 2000 201.10 安装和配置Microsoft数据引擎 20 1.11 现实世界—为什么升级 23第2章 建立第一个Access 2000应用 252.1 理解Access的应用设计方法 252.2 从模板文件创建Access应用 262.3 熟悉联系管理应用 292.3.1 数据库窗口中的表对象 292.3.2 切换面板窗体 322.3.3 Access窗体 332.3.4 Access报表 352.3.5 Access模块 362.4 使用切换面板管理器 382.5 探索窗体设计视图和VBA类模块 392.6 现实世界—所学知识的透视 40第3章 Access导航 423.1 理解Access功能和模式 423.1.1 定义Access功能 423.1.2 定义Access操作模式 443.2 理解Access的表显示 443.2.1 最大化文档窗口 463.2.2 把文档窗口最小化为图标 473.2.3 表数据表视图中的工具栏 483.2.4 工具栏自定义 503.2.5 右击快捷方式菜单 523.3 使用功能键 533.3.1 全局功能键 533.3.2 字段、网格和文本框的功能键 分配 533.4 设置默认的选项 543.4.1 系统默认值 553.4.2 数据表视图的默认值 583.5 使用Access帮助 593.5.1 上下文相关的帮助 593.5.2 “帮助”菜单 603.5.3 Microsoft Access的帮助窗口 613.5.4 “Office助手” 643.6 使用“数据库实用工具” 663.6.1 压缩和修复数据库 673.6.2 将数据库转换为Access 2000格式 683.6.3 将数据库转换为Access 97格式 693.6.4 添加切换面板窗体 693.6.5 创建.mde文件 703.7 疑难解答 703.8 现实世界—HTML帮助或者障碍 71第4章 使用Access数据库和表 724.1 定义Access数据库的元素 724.2 理解关系型数据库 744.3 使用Access数据库文件和表 754.3.1 Access系统数据库 754.3.2 Access 库数据库 754.4 创建一个新数据库 754.5 理解表和字段的属性 774.6 选择字段数据类型、大小和格式 804.6.1 为数值和文本数据选择字段大小 814.6.2 选择显示格式 834.6.3 使用输入掩码 874.7 使用Northwind Traders示例数据库 884.8 向现有的数据库添加一个新表 904.8.1 设计Personnel Actions表 914.8.2 创建Personnel Actions表 934.8.3 在数据表视图中直接创建一个表 964.9 设置字段的默认值 964.10 使用关系、关键字字段和索引 974.10.1 建立表之间的关系 984.10.2 实施参照完整性 1004.10.3 选择一个主键 1014.10.4 往表中添加索引 1024.11 改变字段和关系 1044.11.1 重新安排表中字段的顺序 1044.11.2 改变字段数据类型和大小 1054.11.3 改变表之间的关系 1064.12 复制和粘贴表 1074.13 疑难解答 1084.14 现实世界—数据库战略和表战术 108第5章 输入、编辑和验证表中的数据 1105.1 在Access表中输入测试数据 1105.2 使用键盘操作进行数据输入和编辑数据 1105.2.1 创建No

5,139

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 Office开发/ VBA
社区管理员
  • Office开发/ VBA社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧