已解决错误代码: IllegalArgumentException(非法参数异常):当传递给方法的参数不满足预期时,比如传入了无效的参数或空值,容易引发此异常 已解决错误代码: IllegalArgumentException...原因分析: IllegalArgumentException 异常是由于传递给方法的参数不满足预期而引起的。...; } // 进行图像旋转操作的代码 // ... } 通过上述代码,我们在图像旋转方法中添加了参数检查,当输入的角度值不在合法范围内时,抛出自定义的 IllegalArgumentException...使用断言(assert)语句或条件判断,在开发阶段及时发现参数问题。例如,在上面的代码中,我们可以使用 assert 语句来检查角度值是否在合法范围内。...通过添加合适的参数检查和验证,我们确保了用户输入的角度值在合法范围内,从而有效地避免了异常的发生。在开发过程中,合理处理参数是保证应用程序稳定性的重要一环,这也是我们在开发中需要特别注意的地方。
大家好,又见面了,我是你们的朋友全栈君。下面是本人愿来写的关机程序可以适用于98/xp/2000,在程序中调用即可。...现在操作系统多为2000或xp,所以需要特别注意的是应该先得到关机的特权:(要想弄懂下面的程序,先要具备vb调用api函数的知识……) 其中:前面一些Public Declare都是api函数的声明....‘UPGRADE_WARNING: 结构 LUID 可能要求封送处理属性作为此声明语句中的参数传递。...‘UPGRADE_WARNING: 结构 TOKEN_PRIVILEGES 可能要求封送处理属性作为此声明语句中的参数传递。...keyword=”vbup1050″” ‘UPGRADE_WARNING: 结构 TOKEN_PRIVILEGES 可能要求封送处理属性作为此声明语句中的参数传递。
一、 传 地 址 传地址是VBA默认的数据传递方式,在定义过程时,如果形参前面有关键字ByRef或者省略,则该参数通过传地址的方式传递。...注 意 点 1、前面说过sub过程通常不能返回运算结果的,如果需要返回值时,是可以利用ByRef方式来定义形参,这样就可以将子过程的运算数据返回调用程序中。...2、当形参定义为ByRef形式时,只有当实参为一个变量时,才能按地址方式传递参数,如果实参是一个表达式或者常量,则不能按传地址方式传递。 二、 传 值 传值是将实参的值作为一个副本,赋值给形参。...定义过程中,在形参面前添加ByVal关键字,则该参数就按传值方式传递。 将上面示例中传地址的方式改成传值方式再运行一次,对比下结果。...为了在实际当中应用,一些原则可供参考: 1,形参如果是数组、自定义变量、对象变量,则只能用传址方式 2,形参前用了Byval,或者对应参数是常数、表达式,都是传值方式 3,形参前为Byref,或者没有关键词
VBA的函数参数传递方式是Byval和Byref,数值类型、Stirng等那些值类型的是要非常注意用哪种方式的。对于Object对象引用类型的一直都说2种方式完全没有区别。...Object对象的Byval和Byref参数真的没有区别吗? 对于操作的这个Object对象来说,可以认为是没有区别,但是传递过程和其他数据类型的参数传递是一样的,遵守的规则并没有改变。...ByVal 参数传递的时候,会在内存中另外复制一份,函数操作这个副本和传递之前的那个变量已经没有了任何关系; Byref 会把参数的内存地址传递给函数,函数接收到这个是通过内存地址来读取或者改写的,操作的就是原来的变量...可以理解为参数其实就是一个LongPtr类型,所以你是复制一份这个LongPtr类型的数字传递,还是把这个LongPtr类型所在的内存地址传递给函数,对于Object这个对象来说,是没有区别的。...(rng) = x022edd0, ObjPtr(rng) = 0xfaaddd0, VarPtr中保存的数据 = 0xfaaddd0 从打印输出可以看出,Byval传递需要复制参数,其实只是把保存对象地址的那个内存地址
API的复杂之处我认为就是参数多样,而且传递的时候非常要注意是传值还是传地址。...2、参数传递 值参数 很多参数API中只是使用,所以VBA里传递是按值传递还是按照地址传递其实都是一样的,这个和VBA里的Function是一样的。...指针参数 这是一种非常容易出错的参数,比如ReadFile中有个参数lpNumberOfBytesRead,这种参数是一种指针,API函数会在内部操作这个指针,所以如果这个参数一旦传递错误,比如按Byval...传递了,而数字没有初始的时候是0,API函数去操作指针地址0的时候,必然会出错造成Excel的崩溃。...(当对象已经存在是将返回失败)。
对BeforeDoubleClick事件和BeforeRightClick事件进行了修改,使之能够引发新的事件,并传递给ChangeColor事件目标单元格的类型和指定颜色开或关的布尔值。...对Add方法进行了更新,用来设置Cell对象的新属性Parent。该属性用于保存对Cells对象的引用,从而使Cells对象和Cell对象建立父子关系。...这样,当Cells对象引发ChangeColor事件时,Cell对象就能够捕获该事件,并根据单元格的类型进行相应的响应,如下图1所示。 ?...图1 注意,为了更有效地避免内存泄漏,当不需要某个对象时,建议将其显示地设置为空,尽量不要依赖VBA来完成这些操作: Set gclsCells = Nothing 此外,当两个对象中分别保存着对彼此的引用时...其中一种解决方法是:在删除对象之前,将它与另一对象之间的相互引用关系删除。
Dim strText As String = "" 或 者 Dim strText As String strText="" (2)实例化一个类或对象 .../ByRef 参数名 As Integer) as 类型 End Sub Public Function 函数名称(ByVal/ByRef 参数名 As Integer) as 类型 'vb6.0...或者称为共享的——VB.NET中的关键字是Shared),这些方法可以直接调用,所以Module是无法实例化,也没有必要实例化的 模块无法继承,也无法实现接口 模块里面可以有类,但其实这个类并不需要真的通过模块作为前缀来引用...end sub end Class 九、 withevents用于声明对象,用它声明的对象拥有自己的事件。当这个对象内部有RaiseEvent的时候,外部就会接收到。 ...比如你的一个对象有一个事件A,在执行的过程中,这个对象RaiseEvent A,那么调用者的handles 对象.A 的SUB就会被执行。
ydl890406大大,在VB群中写这东西时,让我借用了,后来我发现有很多错误,y大神修改几次后的还是有错误,干脆重写了一遍,这就是后来的代码。...第二部分是AOD的代码连接,由于第二部分涉及到Recordset对象和Connection对象,自己学一下,完全可以自己编写。...IF IsConnect = True Then Exit Sub End If Set cnn = New ADODB.Connection '关键new用于创建新对象cnn cnn.ConnectionString...,计数器复位Public Sub DBapi_Disconnect() Connect_Num = 0 DisconnectEnd Sub '执行数据库操作语言'byval 就是按参数的值传递,再传递过程中...,参数不会发生变化(也就是将参数值而不是将地址传递给过程的方式,这就使过程访问发哦变量的副本,过程不可改变变量的值);与之对应的是byref,指按参数的地址传值,byref可以省略Public Sub
Dim strText As String = "" 或 者 Dim strText As String strText="" (2)实例化一个类或对象.../ByRef 参数名 As Integer) as 类型 End Sub Public Function 函数名称(ByVal/ByRef 参数名 As Integer) as 类型 'vb6.0...或者称为共享的——VB.NET中的关键字是Shared),这些方法可以直接调用,所以Module是无法实例化,也没有必要实例化的 模块无法继承,也无法实现接口 模块里面可以有类,但其实这个类并不需要真的通过模块作为前缀来引用...end sub end Class 九、 withevents用于声明对象,用它声明的对象拥有自己的事件。当这个对象内部有RaiseEvent的时候,外部就会接收到。...比如你的一个对象有一个事件A,在执行的过程中,这个对象RaiseEvent A,那么调用者的handles 对象.A 的SUB就会被执行。
这种将复杂功能分解成若干小功能,由各个小功能来组合完成一个复杂功能的编程思想是非常重要的: 可以简化开发难度 提高代码的复用 2、Function的参数 VBA中,参数的传递有2种方式: Byval...传值,传递的是副本,与原始变量已经没有关系。...Byref 传地址,传递的是变量的地址,就是原始变量。 打个比方: 孙悟空和妖怪打架,他法术好,用个毫毛就能变个分身,他让分身去打架,妖怪伤害了分身,不会影响他自己。这就是Byval。...如果参数前面省略了修饰符,默认是Byref(个人认为这个默认非常的不好,我刚开始用VBA的时候碰过这个问题,莫名其妙不知道为什么变量的值不对了)。...这2种方式的区别初学者只要记住(非常重要)就可以,要理解有点难度,需要一定的计算机内存方面的知识。 只要简单记住,如果你传递的变量只是给其他函数使用的,并不需要改变的话,用Byval。
当打开工作簿时执行该回调。 GroupAlignmentExcel组元素包括getVisible属性。通过该属性指向HideAlignmentGroup过程,在打开工作簿或使该控件无效时执行。...在该过程中评估是否隐藏或取消隐藏组的条件。...,那么returnedVal参数设置为True,结果是“文本对齐”组可见。...注意,当打开工作簿时,创建ribbon对象。编辑VBA代码可能销毁这个新创建的对象。试图使与销毁对象相关的控件无效是不可能的,唯一的办法是重新创建ribbon对象重新打开该工作簿。...注意,两个按钮的getVisible属性都使用了相同的getVisibleBtnBC回调过程。当打开工作簿或者当其中一个或两个控件被无效时执行该回调。
https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果 能用.Net下的语言工具开发BOS插件是一件很愉快的事情...,其中缘由不言而喻,而本文则是个人首创,实现在了用VB.NET 或C# C++.Net来开发BOS的插件(DLL),如果哪位还有比这方法更早的请联系作者,修改首创的宣称 在此先讲几个概念性的问题: 1、...、C#)开发的DLL是跑在.net CLR上的中间二进制字节码以及其他一些有自描述功能的元数据组成的,它不符合COM+规范,金蝶K/3及BOS都是用VB6开发而来的,EAS那就另当别论了,所以BOS插件说白了也是...VB6调用符合COM规范的DLL,它的原理就是在原程序里(宿主)先导入放在BOS插件上的dll然后直接Byref调用Public Sub Show(Byval XXX as Object) 来把需要编程的对象传递过来...、类名、所使用的.Net Frame版本为3.5 2.0的也可以,此测试语言我选VB,当然C#也可以,本人是basic的忠实者!
Go语言的指针,基本上只剩下用于区分 byref 和 byval 语义。 运算符就是简单的 & 和 * 一个取地址、一个解析地址。 ?...这段代码执行结果: i=1;p=0x4212f100;*p=1 i=2;p=0x4212f100;*p=2 i=3;p=0x4212f100;*p=3 函数的参数传递可以看下面例子: ?...1:1 2:0 3:2 4:2 传值与传指针 当我们传一个参数值到被调用函数里面时,实际上是传了这个值的一份copy,当在被调用函数中修改参数值的时候,调用函数中相应实参不会发生任何变化,因为数值变化只作用在...传指针比较轻量级 (8bytes),只是传内存地址,我们可以用指针传递体积大的结构体。如果用参数值传递的话, 在每次copy上面就会花费相对较多的系统开销(内存和时间)。...所以当你要传递大的结构体的时候,用指针是一个明智的选择。 Go语言中string,slice,map这三种类型的实现机制类似指针,所以可以直接传递,而不用取地址后传递指针。
被禁用的控件在功能区中显示的是灰色。...过程,当打开工作簿或者其中一个或两个控件被无效时调用这个过程。...'由于Excel 2007没有InvalidateControlMso方法, '使用下面的语句使功能区无效 'myRibbon.Invalidate End Sub 当激活不同的工作表时...是否启用(或禁用)某控件取决于在RefreshRibbon中参数传递的值。一旦使这些控件无效,就调用GetEnabledAttnSh过程,遍历共享这个相同回调的所有无效的控件。...如果控件的id与参数值匹配,就启用该控件。否则,禁用该控件。
大家好,上节介绍了过程传递参数时,形参与实参结合的两种方式,传地址和传值。本节将介绍可选参数和可变参数。...前两个参数就必须提供,第三个参数就可以选择性提供。 需要注意的是,创建过程时,可以定义多个可选参数,但是可选参数必须放在参数表的自最后,并且必须是variant变体型变量。...---- 二、可变参数 上面介绍可选参数时,可以发现在定义过程时,不管是固定参数还是可选参数,都已经制定了参数的个数,那么在VBA中还可以定义可变参数,即参数的个数在定义时时未知的。...创建test1过程,用call语句调用sum1过程,定义了整型变量i,用于获得子过程运算的结果。(省略关键字是按地址传递。)...需要注意的是ParamArray只能用于参数列表的最后一个参数,指明最后这个参数是一个Variant变体型变量元素的Optional数组,ParamArray关键字不能和ByVal、ByRef或Optional
在进行Excel应用程序开发时,如果遵循一些好的做法,将会极大地增强程序的可读性、可理解性、可维护性和复用性。 代码注释 良好的代码注释是Excel应用程序开发中非常重要的原则之一。...注释的作用 1.帮助快速理解代码 2.帮助更好地使用代码 注释什么 1.说明代码是如何组织的 2.说明代码中的对象和过程如何使用 3.说明程序的功能 4.说明程序是如何演进的 注释的具体内容 1.模块级注释...2.在同一代码段中,对齐的代码行之间往往是并列关系,而缩进则用于表明代码行之间的逻辑结构关系。 3.合理使用代码连接符(即英文的下划线_),可以在多行中显示较长的语句。...建议尽量少使用这两个设置语句,以免在其他模块中使用该模块中的过程时导致不易发现的错误。 合理使用变量和常量 1.避免重复使用变量。 2.避免使用变体数据类型。 3.避免使用As New声明对象变量。...2.在声明过程参数时,显式使用ByRef或ByVal。 3.在使用前验证过程参数的有效性。 4.显示调用对象的默认属性。 5.经常使用菜单“调试-编译”命令。
本文是《一起学Excel专业开发22:使用类模块创建对象1》的后续内容。...创建集合 当存在多个对象实例时,管理它们的最简单方法是将所有对象实例放到一个集合中。...2.通过位置或关键字来访问集合中的单个对象。...由于集合对象对于外部是不可见的,因此编写自已的Add方法,并且还创建Count和Item属性过程用于表示集合中的对应属性。...,用于存放自定义的CCells集合。
图2 立即窗口中的输出告诉我们,Precedents属性适用于这个简单的示例,但是这个示例和帮助文件没有告诉我们的是它不会返回其他工作表或其他工作簿上的引用单元格。...rngToCheck As Range, ByRef dicAllPrecedents As Object, ByVal lngLevel As Long) Dim rngCell As Range...rngCell As Range, ByRef dicAllPrecedents As Object, ByVal lngLevel As Long) Dim lngArrow As Long...同样,这是出于效率的目的。该函数不能作为自定义函数工作,因为当调用者是Range时,Range.ShowPrecedents和Range.NavigateArrows方法被禁用。...在代码中使用了Range.CountLarge,如果使用的是Excel2003或更早版本,则需要将其更改为Range.Count。
'VBA函数与过程简洁教程 Sub 过程名() 'Sub表示过程,在执行宏或图形右击指定宏中看得到,不能返回值 Call 函数名(Array(1, 2), b) '调用过程并把返回值放入r End Sub...'结束过程 Function 函数名(a, Optional ByVal b) 'Function表示函数,在单元格中也可以使用,宏列表看不到,可以使宏列表简洁 'VBA默认ByRef会改变原参数的值...,所以加了ByVal If IsMissing(b) Then b = 1 'Optional表示参数可以选择性省略,上面的语句是如果没有时设定值,常用设定可选来灵活调试,如果有一个非可选就不能直接运行...ReDim arr(UBound(a)) '定义可变数组,UBound()是求最大下标值 arr(1) = b 函数名 = arr '返回值,仅Function可用 Exit Function...'退出函数,不要用return,return是在一个程序中回到GoSub后一行 End Function '结束函数
对象/类:数据结构与作用于数据的方法或函数紧密结合或关联。这称为类,或对象(对象是基于类创建的)。每个对象执行一个独立的功能。它由其属性定义,即它是什么和能做什么。...例如,当一个汽车对象的速度超过了一定的值,它可能会触发一个超速警告事件。事件通常用于处理用户的输入或其他交互行为。 不少开发者将属性和类的字段这两个术语化为等号,其实这个是不正确的。...1.4 小结 面向对象的分析与设计中,异常控制是在课本中较少提到的,为了解决对象在属性修改、方法调用、事件驱动时导致的状态的改变,异常设计也被广泛地运用到面向对象的分析与设计中——即当分析对象失效之后,...由于在 10 年前的设计中并没有把异常中的 控制信息(如:正常返回、最终异常、服务器忙、可重试),进行传播,导致业务在编写代码时,只转义了错误码,并没有正确传递控制码,上层在发现错误码后,依然对某个已经确定无法提供服务的服务器发送请求导致请求持续失败...虽然我们可以把所有的返回码全部修改为一个全新的对象例如某框架的 MeshRet 其中包含了控制信息,但现在错误码的陋习已经深深的印刻在每个看起来不那么专业的伪 C++ 程序员心中,就算要推广 MeshRet
领取专属 10元无门槛券
手把手带您无忧上云