首 页       用户登录  |  用户注册
设为首页
加入收藏
联系我们
按字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
按声母检索 A B C D E F G H J K L M N O P Q R S T W X Y Z 数字 符号
您的位置: 5VAR论文频道论文中心计算机论文计算机应用
   VBA在限定Excel工作表用户按钮中的应用      ★★★ 【字体: 】  
VBA在限定Excel工作表用户按钮中的应用
收集整理:佚名    来源:本站整理  时间:2009-01-10 11:55:10   点击数:[]    

1, "'插入代码行1"
  ch.CodeModule.InsertLines StartLine + 2, "'插入代码行2"
  ' 获得模块代码总行数、过程起始行号、过程代码总行数
  LinesCount = ch.CodeModule.CountOfLines
' 过程代码起始行号
  ProcStartline = ch.CodeModule.ProcStartline(MyProname, vbext_pk_Proc)
' 过程代码总行数
  ProcCountLines = ch.CodeModule.ProcCountLines(MyProname, vbext_pk_Proc)
' 替换为两行正确的代码行
  ch.CodeModule.ReplaceLine StartLine + 1, "'隐藏过程代码"
  ch.CodeModule.ReplaceLine StartLine + 2, "Call " & ModuleName & ".隐藏过程代码(" & ProcStartline & "," & ProcCountLines & "," & """" & CodeName & """" & "," & i & "," & sh.ZOrderPosition & ")"
此外,当按钮被点击执行并进入到插入的调用过程内部时,还需要确定哪个按钮被执行、执行的次数情况、以及执行按钮的对应过程代码的行范围等情况,以便准确地实施对执行按钮及其过程代码的控制,所以在上述为按钮过程替换为正确的过程调用代码的同时,需要添入正确的下列五个过程调用参数:
(1)按钮的对应过程头部所在代码模块中的代码起始行号;
(2)按钮过程的对应代码行数;
(3)按钮过程所处的代码模块名;
(4)按钮所在的工作表序号;
(5)按钮在所在工作表上的Shape形状对象集合的序号。
从上面的插入代码中可以看出获得这些参数的方法。针对上例的过程调用语句:Call 模块5.隐藏过程代码(256,73,”Sheet2”,2,3),其参数含义是:当第2个工作表中的第3个Shape对象(按钮)执行次数到达规定次数时,则将名称为“Sheet2”的代码模块中从256行起的73行代码设为无效,并将该按钮进行隐藏。
值得注意的是,由于某些按钮的对应过程代码加入了上述的过程调用代码,必然导致与之处于同一代码模块的其他按钮过程、并已经添入的上述过程调用代码中的参数值出现偏差,因此需要对其中的过程代码起始行参数值作修改。下面的代码就是起这个作用,此代码须插入于前述查找按钮过程代码的“代码2”位置。
' 调整代码查找起始位置
 Line1 = StartLine + 3
 Col1 = 1
 Endline = LinesCount
 Do
  If Not ch.CodeModule.Find("'隐藏过程代码", Line1, Col1, Endline, 1, False, False) Then
       Exit Do
  End If
' 如果查找的代码不符合插入的代码格式,则继续查找
  If Col1 > 1 Then
     GoTo Label3
  End If
' 调整代码调用参数
  Str1 = ch.CodeModule.Lines(Line1 + 1, 1)
  If InStr(Str1, "Call") Then
   Str2 = Mid(Str1, InStr(Str1, "(") + 1, InStr(Str1, ",") - InStr(Str1, "(") + 1)
   Str2 = Trim(Str(Val(Trim(Str2)) + 2))
   Str1 = Left(Str1, InStr(Str1, "(")) & Str2 & Mid(Str1, InStr(Str1, ","))
   ch.CodeModule.ReplaceLine Line1 + 1, Str1
  End If
Label3:
  Line1 = Line1 + 1
  Col1 = 1
  Endline = LinesCount
 Loop
2.3 限定按钮对象及其执行过程代码
限定按钮对象本身,之前我们可以为之添加一个名为“按钮运行次数记录表”的工作表,以便使用其第i行j列的单元格来记录当前工程第i个工作表上第j个形状对象的运行次数。此外,为了实现对按钮执行的准确计数,也需要在工程打开时清除其内容,为了防止工作表数据意外修改,最好将其隐藏。这些均可以通过创建自动宏来加以实现。
下面的代码即是按钮执行时首先被调用的过程,其作用为对按钮执行进行计数,在按钮执行到达规定次数(这里暂定为5次)时,隐藏该按钮,并将其执行过程代码设为无效。这里将代码行设为无效的方式是将其改成注释,方法仍然是通过访问指定的VBComponent下CodeModule对象的Lines属性,并采用ReplaceLine方法来实现。改成的注释行的格式为:'隐藏行*:原代码行,其中*号代表其在本代码模块中的行号。下面的代码需要与前述的查找按钮过程代码位于同一代码模块。
Public Sub 隐藏过程代码(ByVal Beginline As Integer, ByVal LinesCount As Integer, ByVal CodeName As String, ByVal SheetIndex As Integer, ByVal ButtonIndex As Long)
……
      Sheets("按钮运行次数记录表").Cells(SheetIndex, ButtonIndex).Value = Sheets("按钮运行次数记录表").Cells(SheetIndex, ButtonIndex).Value + 1
      If Sheets("按钮运行次数记录表").Cells(SheetIndex, ButtonIndex).Value >= 5 Then
        Set MyCoponent = Application.VBE.ActiveVBProject.VBComponents
        For Each ch In MyCoponent
          If ch.Name <> CodeName Then
            GoTo Label5
          End If
          '将参数规定范围的代码改为注释
For k = Beginline To Beginline + LinesCount - 1
            Str1 = ch.CodeModule.Lines(k, 1)
            Str1 = "'隐藏行" & k - Beginline + 1 & ":" & Str1
            ch.CodeModule.ReplaceLine k, Str1
          Next k
          '隐藏执行的按钮
          ActiveWorkbook.Sheets(SheetIndex).Shapes(ButtonIndex).Visible = False
Label5:
        Next
……
      End If
End Sub

3  支撑对象与软件恢复
提供对VBE及其下层对象的访问,需要创建对其支撑对象的引用,方法是进入VBE编辑环境,单击“工具”菜单的“引用”命令,然后加入对“

上一页  [1] [2] [3]  下一页


Tags:


文章转载请注明来源于:5VAR论文频道 http://paper.5var.com。本站内容整理自互联网,如有问题或合作请Email至:support@5var.com
或联系QQ37750965
提供人:佚名
  • 上一篇文章:Delphi中画布应用两则

  • 下一篇文章:Oracle数据库的优化
  • 返回上一页】【打 印】【关闭窗口
    中查找“VBA在限定Excel工作表用户按钮中的应用”更多相关内容 5VAR论文频道
    中查找“VBA在限定Excel工作表用户按钮中的应用”更多相关内容 5VAR论文频道
    最新热点 最新推荐 相关新闻
  • ››Delphi 5 数据库应用中ODBC数据源的...
  • ››用Visual Basic 6.0实现自动化测试...
  • ››用JAVA制作ICQ
  • ››在IIS 4.0上配置虚拟主机实现虚拟I...
  • ››利用VB开发CAI课件
  • ››基于GP算法的知识发现系统
  • ››基于Client/Server 的课件系统的设...
  • ››WWW对大量数据查询的一种实现
  • ››基于PHP的Web数据库访问
  • ››Developer/2000中的Forms参数及应用...
  • ››VBA在限定Excel工作表用户按钮中的...
  •   文章-网友评论:(评论内容只代表网友观点,与本站立场无关!)
    关于本站 - 网站帮助 - 广告合作 - 下载声明 - 网站地图
    Copyright © 2006-2033 5Var.Com. All Rights Reserved .