周一至周五 : 08:30 - 17:30 客服专员电话/微信:18049989370 QQ:857188287
微信咨询

扫码微信咨询

关注公众号

关注微信公众号

电话: 021 5161 9370
返回顶部
数量单价金额互算VBA(2)
显示全部楼层 倒序浏览 发表日期 2019-05-16 22:11:49 4812次阅读 9次回复
此前发布过一个数量单价金额互算的VBA写法,之前的是按用户的需求来写的。最近有其他用户应用此VBA提出了一些问题,所以重新更新了下,希望对有大家有所参考。

单价金额数量互算

单价金额数量互算

  1. Imports SpreadsheetGear
  2. Imports System.Windows.forms
  3. Namespace ExcelViewVBDotnet
  4.     Public Class StandardInterface '自定义名称
  5.         '预留位置1
  6.         '预留位置2
  7.         Dim AW As SpreadsheetGear.IWorkbook,Range As SpreadsheetGear.IRange
  8.         Dim CF,TS,VW As Object,YN As String
  9.         Public Sub Workbook_Open(OldRoot As Object,NewRoot As Object,Excel As SpreadsheetGear.Windows.Forms.WorkbookView)
  10.            Excel.GetLock()
  11.            AW = Excel.ActiveWorkbook
  12.            Range = AW.ActiveWorksheet.Range
  13.            Excel.ReleaseLock()
  14.            '位置:2保存3新增4提交5退回6打印7预览8导出9捕获10上传图片11上传附件12插入行13插多行14删除行15查找16最后
  15.         End Sub'打开时执行事件

  16.         Public Sub RangeSelection(sender As Object,e As SpreadsheetGear.Windows.Forms.RangeSelectionChangedEventArgs)

  17.         End Sub'单元格选择后执行的事件

  18.         Public Sub RangeChanged(sender As Object,e As SpreadsheetGear.Windows.Forms.RangeChangedEventArgs)
  19.                    On error resume next
  20.                    if e.Range.Address <> YN Then'避免重复触发
  21.                           if e.Range.Intersect(Range("F_30")) IsNot Nothing then
  22.                              if e.Range.Offset(0,1).Value IsNot Nothing And e.Range.Value IsNot NotHing then'已知单价输入数量触发金额
  23.                                 e.Range.Offset(0,2).Value = CType(e.Range.Offset(0,1).Value,Double) * CType(e.Range.Value,Double)       
  24.                              'end if
  25.                              elseif e.Range.Offset(0,2).Value IsNot Nothing And e.Range.Value IsNot NotHing then'已知金额输入数量触发单价
  26.                                     if CType(e.Range.Value,Double) <> 0 then
  27.                                             YN = E.Range.Offset(0,1).Address
  28.                                              e.Range.Offset(0,1).Value = CType(e.Range.Offset(0,2).Value,Double) / CType(e.Range.Value,Double)
  29.                                         end if
  30.                              end if
  31.                       Elseif e.Range.Intersect(Range("F_31")) IsNot Nothing then
  32.                          if e.Range.Offset(0,-1).Value IsNot Nothing And e.Range.Value IsNot NotHing then'已知数量输入单价触发金额
  33.                                     YN = E.Range.Offset(0,1).Address
  34.                                 e.Range.Offset(0,1).Value = CType(e.Range.Offset(0,-1).Value,Double) * CType(e.Range.Value,Double)
  35.                              'end if
  36.                              elseif e.Range.Offset(0,1).Value IsNot Nothing And e.Range.Value IsNot NotHing then'已知金额输入单价触发数量
  37.                                     if CType(e.Range.Value,Double) <> 0 then
  38.                                             YN = E.Range.Offset(0,-1).Address
  39.                                         e.Range.Offset(0,-1).Value = CType(e.Range.Offset(0,1).Value,Double) / CType(e.Range.Value,Double)
  40.                                         end if
  41.                              end if  
  42.                       Elseif e.Range.Intersect(Range("F_32")) IsNot Nothing then
  43.                          if e.Range.Offset(0,-2).Value IsNot Nothing And e.Range.Value IsNot NotHing then'已知数量输入金额触发单价
  44.                                     if CType(e.Range.Offset(0,-2).Value,Double) <> 0 then
  45.                                            YN = E.Range.Offset(0,-1).Address
  46.                                    e.Range.Offset(0,-1).Value = CType(e.Range.Value,Double) / CType(e.Range.Offset(0,-2).Value,Double)
  47.                                 end if
  48.                              'end if
  49.                              elseif e.Range.Offset(0,-1).Value IsNot Nothing And e.Range.Value IsNot NotHing then'已知单价输入金额触发数量
  50.                                     if CType(e.Range.Offset(0,-1).Value,Double) <> 0 then
  51.                                            YN = E.Range.Offset(0,-2).Address
  52.                                    e.Range.Offset(0,-2).Value = CType(e.Range.Value,Double) / CType(e.Range.Offset(0,-1).Value,Double)
  53.                                 end if
  54.                              end if
  55.                           end if   
  56.                    Else
  57.                       YN = ""'还原触发判断
  58.                    End if
  59.         End Sub'单元格编辑完成后执行事件

  60.         Public Sub ButtunClick(sender As Object,e As SpreadsheetGear.Windows.Forms.ShapeActionEventArgs)
  61.    
  62.         End Sub'按钮/标签点击事件

  63.         Public Sub FollowHyperlink(sender As Object)
  64.            
  65.         End Sub '暂不支持

  66.     End Class
  67.     '注:除事件字眼下可以自定义代码外的所有代码不允许改动,否则编译将有可能失败。

  68. End Namespace

复制代码


游客,如果您要查看本帖隐藏内容请回复

电话/微信:18049989370 QQ:857188287
感谢分享!!!学习下
看看学习学习,正好使用
还有隐藏的代码
Daniel

2020-2-27 13:09:32

感谢,学习学习
学习一下,正好需要
626002396

2020-11-14 20:17:58

你会后悔或或或或或或或或或或
626002396

2020-11-29 08:58:36

真心不错啊,?
w492626

2021-5-14 13:22:33

查看一下,有助学习
st5612

2022-5-12 14:49:59

学习观摩一下!!

精彩评论9

感谢分享!!!学习下
看看学习学习,正好使用
还有隐藏的代码
Daniel

2020-2-27 13:09:32

感谢,学习学习
学习一下,正好需要
626002396

2020-11-14 20:17:58

你会后悔或或或或或或或或或或
626002396

2020-11-29 08:58:36

真心不错啊,?
w492626

2021-5-14 13:22:33

查看一下,有助学习
st5612

2022-5-12 14:49:59

学习观摩一下!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则  允许回帖邮件提醒楼主

快表软件是国内较早研究表格类软件开发平台的团队之一,迄今已有十多年的行业经验.致力于为企事业单位提供实用可靠的数字化平台。
  • 微信公众号

  • 微信小商店

  • 微信客服

  • Powered by Discuz! X3.4 | Copyright © 2022-2024, XiRong Soft. | 快表软件
  • 沪ICP备13033196号 | 营业执照 |上海西戎软件科技有限公司|沪公网安备31011502002146号|沪ICP备13033196号 |