ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 这个VBA的On Error那里出错了?(已解决)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-9-24 12:36 | 显示全部楼层 |阅读模式
本帖最后由 stoncold 于 2018-9-24 14:23 编辑

这里有2个过程,当中第一个是Macro2 这个过程出现的问题是 第二个On Error GoTo 就报错了,无法运行。
所以就在后面做了修改,弄了个Macro3这个过程,这个使用On Error Resume Next,是能运行,但是问题是所有数据都成为了0。
不知道出现什么问题,是想通过VBA的方式来代替这里的“过度数据”这个表格的,也就是在“原始数据”中的数据输入后,运行得到的数据是“过度数据“”的一样的数据。

这个要怎样实现呢?





门店奖励提成表格(VBA)180923测试6月数据.rar (38.69 KB, 下载次数: 7)

TA的精华主题

TA的得分主题

发表于 2018-9-24 13:51 | 显示全部楼层
Sub Macro2()
'
' Macro2 Macro
'
'此VBA出现的是出错,第二个On Error 报错了,无法运行
On Error Resume Next
'
    Dim lie
    lie = Application.WorksheetFunction.CountA(Worksheets("原始数据").Range("A:A"))     '检查原始数据表的行数,可做循环0
   


    '先设置原始数据表中的后续通过程序复制数据后,新增需要用到的字段头
    Worksheets("原始数据").Range("M1").Value = "单品实额奖励"
    Worksheets("原始数据").Range("N1").Value = "单品比例奖励"
    Worksheets("原始数据").Range("O1").Value = "单品不计常规业绩"
    Worksheets("原始数据").Range("P1").Value = "单品BA名称"
    Worksheets("原始数据").Range("Q1").Value = "品牌实额奖励"
    Worksheets("原始数据").Range("R1").Value = "品牌比例奖励"
    Worksheets("原始数据").Range("S1").Value = "品牌不计常规业绩"
    Worksheets("原始数据").Range("T1").Value = "品牌BA名称"
    Worksheets("原始数据").Range("U1").Value = "套餐实额奖励"
    Worksheets("原始数据").Range("V1").Value = "套餐比例奖励"
    Worksheets("原始数据").Range("W1").Value = "套餐不计常规业绩"
    Worksheets("原始数据").Range("X1").Value = "套餐BA名称"
    Worksheets("原始数据").Range("Y1").Value = "BA名称"
    Worksheets("原始数据").Range("Z1").Value = "总奖励"
    Worksheets("原始数据").Range("AA1").Value = "总不计常规业绩"



    'Dim I As Long    '设置一个参数,这个使用在循环中行数用的,由于行数将过万故用Long
   ' I = 2            '设置起止为第二行

    Dim I As Long       '设置一个变量使用在循环过度计数,由于行数将过万故用Long
   
    For I = 2 To lie Step 1   '进入循环,步进为1

'   设置M列
    Worksheets("原始数据").Range("M" & I).Select '选择M2,其实可以去掉,纯粹为了检测
   
'   先从M列开始,单品实额奖励
'   如果错误则跳过并进入后面的操作
        '找不到就跳到Merr那里设置M2的值为0
    Worksheets("原始数据").Range("M" & I).Value = Application.WorksheetFunction.VLookup(Worksheets("原始数据").Range("D" & I), Worksheets("单品奖励").Range("A:E"), 3, 0) * Worksheets("原始数据").Range("H" & I)
             '通过跳转到进行下一格进行操作
'    Exit Sub           '退出此过程,但实际上可以使用GoTo跳转
Merr:
        '出错则将M2值为0

'   N列,单品比例奖励
N:
   
    Worksheets("原始数据").Range("N" & I).Value = Application.WorksheetFunction.VLookup(Worksheets("原始数据").Range("D" & I), Worksheets("单品奖励").Range("A:E"), 4, 0) * Worksheets("原始数据").Range("I" & I)
             '通过跳转到进行下一格进行操作



O:
   
    Worksheets("原始数据").Range("O" & I).Value = Application.WorksheetFunction.VLookup(Worksheets("原始数据").Range("D" & I), Worksheets("单品奖励").Range("A:E"), 5, 0)
   



P:
   
    Worksheets("原始数据").Range("P" & I).Value = Application.WorksheetFunction.VLookup(Worksheets("原始数据").Range("D" & I), Worksheets("单品奖励").Range("A:F"), 6, 0)
   


Q:
   
    Worksheets("原始数据").Range("Q" & I).Value = Application.WorksheetFunction.VLookup(Worksheets("原始数据").Range("C" & I), Worksheets("品牌奖励").Range("A:D"), 2, 0) * Worksheets("原始数据").Range("H" & I)
   


R:
   
    Worksheets("原始数据").Range("R" & I).Value = Application.WorksheetFunction.VLookup(Worksheets("原始数据").Range("C" & I), Worksheets("品牌奖励").Range("A:D"), 3, 0) * Worksheets("原始数据").Range("I" & I)
   

S:
   
    Worksheets("原始数据").Range("S" & I).Value = Application.WorksheetFunction.VLookup(Worksheets("原始数据").Range("C" & I), Worksheets("品牌奖励").Range("A:D"), 4, 0)
   



T:
   
    Worksheets("原始数据").Range("T" & I).Value = Application.WorksheetFunction.VLookup(Worksheets("原始数据").Range("C" & I), Worksheets("品牌奖励").Range("A:E"), 5, 0)
   



U:
   
    Worksheets("原始数据").Range("U" & I).Value = Application.WorksheetFunction.VLookup(Worksheets("原始数据").Range("C" & I), Worksheets("套餐奖励").Range("B:E"), 2, 0) * Worksheets("原始数据").Range("H" & I)
   


V:
   
    Worksheets("原始数据").Range("V" & I).Value = Application.WorksheetFunction.VLookup(Worksheets("原始数据").Range("C" & I), Worksheets("套餐奖励").Range("B:E"), 3, 0) * Worksheets("原始数据").Range("I" & I)
   


W:
   
    Worksheets("原始数据").Range("W" & I).Value = Application.WorksheetFunction.VLookup(Worksheets("原始数据").Range("C" & I), Worksheets("套餐奖励").Range("B:E"), 4, 0)
   


X:
   
    Worksheets("原始数据").Range("X" & I).Value = Application.WorksheetFunction.VLookup(Worksheets("原始数据").Range("C" & I), Worksheets("套餐奖励").Range("B:F"), 5, 0)
   


Y:
    Worksheets("原始数据").Range("Y" & I).Value = Worksheets("原始数据").Range("P" & I).Value & Worksheets("原始数据").Range("T" & I).Value & Worksheets("原始数据").Range("X" & I).Value


'   下面是对Z列的数据
    Worksheets("原始数据").Range("Z" & I).Value = Worksheets("原始数据").Range("M" & I).Value + Worksheets("原始数据").Range("N" & I).Value + Worksheets("原始数据").Range("Q" & I).Value + Worksheets("原始数据").Range("R" & I).Value + Worksheets("原始数据").Range("U" & I).Value + Worksheets("原始数据").Range("V" & I).Value



'   下面一段是判断数据,是对AA列数据的填入
    Dim AAtest As Long
      AAtest = Worksheets("原始数据").Range("O" & I).Value + Worksheets("原始数据").Range("S" & I).Value + Worksheets("原始数据").Range("W" & I).Value
      If AAtest > 0 Then
      Worksheets("原始数据").Range("AA" & I).Value = Worksheets("原始数据").Range("I" & I).Value
        Else
      Worksheets("原始数据").Range("AA" & I).Value = 0
    End If





    'I = I + 1             '行数不断增加
    Next I                      '退出循环
   
   
End Sub
头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2018-9-24 14:05 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-24 14:16 | 显示全部楼层
vbee 发表于 2018-9-24 13:51
Sub Macro2()
'
' Macro2 Macro

谢谢!我看了一下,发现你的就是把我的一个变量删除了,确实那个变量重复了,然后也删除了on error这段,其实挺奇怪的,之前我试过在没有循环,只是对单独一个格进行这个Vlookup的时候报错,所以才去使用这个on error的。不过,谢谢,这个我可以继续自己去查看是什么原因。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-24 14:22 | 显示全部楼层
朱荣兴 发表于 2018-9-24 14:05
要获取  过度数据   工作表中的数据,必须得调用个工作表内的据才行,基本没有技术难度,但是非常繁琐
你 ...

这个表格是是我之前弄的,但是由于数据3万条里面的,这样在过渡数据中,要下拉4万个来预防位置不够,因为同事都不懂得怎样去操作,只会说,把数据放在哪里,然后怎样刷新。但是原来的设计中,就会出现了 文档在没有原始数据的情况下也有大概10M大小,同时打开的时候就很慢,放了原始数据进去,都有15M左右,然后保存和再次打开的时间很慢,所以就想着通过使用VBA的方式来缩小表格,并且是的表格运行速度更快。现在使用VBA的话,那就可以把过度数据这个表删除。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-16 00:51 , Processed in 0.023962 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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