ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA在保存数据后,会跳行或覆盖,实现能按照行顺序填充行

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-1-23 23:13 | 显示全部楼层 |阅读模式
本帖最后由 woshikm114 于 2024-1-23 23:17 编辑

我在使用VBA登记保存数据时,
数据少的时候会跳行,
到数据多的时候会被覆盖,

数据少就需要调整X值,请各位老师帮忙看一下。
  1.    Dim arr, X%, Y%
  2.     With Sheets("处方药登记")                            '数据所在工作表
  3.         X = Application.CountA(.Range("A1:A65533")) + 6
  4.         If Range("C16") <> "" Then
  5.             arr = Array([D3].Value, [G3].Value, [D16].Value, [F16].Value, [G16].Value, [H16].Value, [D7].Value, [F7].Value, [H7].Value, [J7].Value, [D11].Value, [G22].Value, [L22].Value, "")
  6.             .Cells(X + 1, 1).Resize(1, 14) = arr '
  7.         End If
  8.         If Range("C17") <> "" Then
  9.             arr = Array([D3].Value, [G3].Value, [D17].Value, [F17].Value, [G17].Value, [H17].Value, "", "", "", "", "", [G22].Value, [L22].Value, , "")  
  10.             .Cells(X + 2, 1).Resize(1, 14) = arr
  11.         End If
  12.         If Range("C18") <> "" Then
  13.             arr = Array([D3].Value, [G3].Value, [D18].Value, [F18].Value, [G18].Value, [H18].Value, "", "", "", "", "", [G22].Value, [L22].Value, , "")
  14.             .Cells(X + 3, 1).Resize(1, 14) = arr
  15.         End If
  16.         If Range("C19") <> "" Then
  17.             arr = Array([D3].Value, [G3].Value, [D19].Value, [F19].Value, [G19].Value, [H19].Value, "", "", "", "", "", [G22].Value, [L22].Value, , "")
  18.             .Cells(X + 4, 1).Resize(1, 14) = arr
  19.         End If
  20.         If Range("C20") <> "" Then
  21.             arr = Array([D3].Value, [G3].Value, [D20].Value, [F20].Value, [G20].Value, [H20].Value, "", "", "", "", "", [G22].Value, [L22].Value, , "")
  22.             .Cells(X + 5, 1).Resize(1, 14) = arr
  23.         End If
  24.     End With
  25. End Sub
复制代码
X = Application.CountA(.Range("A1:A65533")) + 6    每国一段时间就要调整这个值
  1. <img src="https://club.excelhome.net/forum.php?mod=image&aid=2977548&size=300x300&key=504bdd979e26650d&nocache=yes&type=fixnone" border="0" aid="attachimg_2977548" width="300" alt="">
复制代码


Quicker_20240123_225734.png

TA的精华主题

TA的得分主题

发表于 2024-1-24 08:20 | 显示全部楼层
上传附件比较容易解决问题。

TA的精华主题

TA的得分主题

发表于 2024-1-24 11:31 | 显示全部楼层
生成你的excel附件,要看你的表格结构才知道问题所在

TA的精华主题

TA的得分主题

发表于 2024-1-24 13:52 | 显示全部楼层
1) X 不應用 counta, 資料間有空行即不能正確去抓最后非空行, 新資料也會覆旧資料
2) X 只能用"累加1", 而不能用X+2, X+3....., 否則填入的一定會有空白行~~

TA的精华主题

TA的得分主题

发表于 2024-1-24 13:55 | 显示全部楼层
X =.Range("A65533")).end(xlup).row

If Range("C16") <> "" Then
            arr = Array([D3], [G3], [D16], [F16], [G16], [H16], [D7], [F7], [H7], [J7], [D11], [G22], [L22], "")
           x = x + 1
            .Cells(X , 1).Resize(1, 14) = arr
        End If

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-25 23:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
准提部林 发表于 2024-1-24 13:55
X =.Range("A65533")).end(xlup).row

If Range("C16")  "" Then

非常感谢,老师指点,按照你修改的向下寻找空白,暂时可以使用,但是不用X+1,X+2 X+3 X+4等
不能实现同时保存5组数据,单纯的使用X=X+1,就出现被覆盖,只保存1组数据。
  1.     Dim arr, X%, Y%
  2.     With Sheets("处方药登记")                            '数据所在工作表
  3.         X = .Range("A65533").End(xlUp).Row
  4.         If Range("C16") <> "" Then
  5.             arr = Array([D3], [G3], [D16], [F16], [G16], [H16], [D7], [F7], [H7], [J7], [D11], [G22], [L22], "") 'arr=对应单元格的值
  6.             .Cells(X + 1, 1).Resize(1, 14) = arr
  7.         End If
  8.         If Range("C17") <> "" Then
  9.             arr = Array([D3], [G3], [D17], [F17], [G17], [H17], [D7], [F7], [H7], [J7], [D11], [G22], [L22], , "")  'arr=对应单元格的值,当单元格值为空时用""表示
  10.             .Cells(X + 2, 1).Resize(1, 14) = arr
  11.         End If
  12.         If Range("C18") <> "" Then
  13.             arr = Array([D3], [G3], [D18], [F18], [G18], [H18], [D7], [F7], [H7], [J7], [D11], [G22], [L22], , "") 'arr=对应单元格的值,当单元格值为空时用""表示
  14.             .Cells(X + 3, 1).Resize(1, 14) = arr
  15.         End If
  16.         If Range("C19") <> "" Then
  17.             arr = Array([D3], [G3], [D19], [F19], [G19], [H19], [D7], [F7], [H7], [J7], [D11], [G22], [L22], , "")
  18.             .Cells(X + 4, 1).Resize(1, 14) = arr
  19.         End If
  20.         If Range("C20") <> "" Then
  21.             arr = Array([D3], [G3], [D20], [F20], [G20], [H20], [D7], [F7], [H7], [J7], [D11], [G22], [L22], , "")
  22.             .Cells(X + 5, 1).Resize(1, 14) = arr
  23.         End If
复制代码

我修改了X = Application.CountA(.Range("A1:A65533")) + 6,
改成你发的

TA的精华主题

TA的得分主题

发表于 2024-1-29 16:23 | 显示全部楼层
woshikm114 发表于 2024-1-25 23:22
非常感谢,老师指点,按照你修改的向下寻找空白,暂时可以使用,但是不用X+1,X+2 X+3 X+4等
不能实现同 ...

那5個條件若有其中一個不符合, 就有產生一個空白行,
下次再用CONTA, 也會少算了一行, 新資料會覆盖旧資料~~


TA的精华主题

TA的得分主题

发表于 2024-1-29 16:24 | 显示全部楼层
woshikm114 发表于 2024-1-25 23:22
非常感谢,老师指点,按照你修改的向下寻找空白,暂时可以使用,但是不用X+1,X+2 X+3 X+4等
不能实现同 ...

那5個條件若有其中一個不符合, 就有產生一個空白行,
下次再用CONTA, 也會少算了一行, 新資料會覆盖旧資料~~


TA的精华主题

TA的得分主题

发表于 2024-1-29 18:36 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 23:26 , Processed in 0.044136 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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