小编Sha*_*i W的帖子

VBA Excel错误处理 - 特别是在函数中 - 专业的Excel开发风格

我得到了Rob Bovey的"专业Excel开发"一书,它开启了我的视野.

我正在使用错误处理重新编写代码.但是,有很多我不明白.我特别需要知道如何在函数中正确使用它.我使用Bovey的错误处理程序的重新抛出版本(在底部).当我开始时,我使用基本的布尔(非重新抛出)方法并将我的子例程转换为布尔函数.(PS我根据答案切换回布尔方法.)

我需要有关如何将功能纳入此方案的指导.我希望它们返回它们的实际值(一个字符串或双精度值,例如,如果它们在某些情况下失败则返回-1),这样我就可以将它们嵌套在其他函数中,而不仅仅返回错误处理布尔值.

这是对bDrawCellBorders(myWS)的典型子例程调用在入口点内的样子.子呼叫似乎运行良好.(即它是一个仅被转换为函数的子例程,因此它可以向错误处理方案返回一个布尔值.)

Sub UpdateMe()  ' Entry Point

    Const sSOURCE As String = "UpdateMe()"

    On Error GoTo ErrorHandler

    Set myWS = ActiveCell.Worksheet
    Set myRange = ActiveCell
    myWS.Unprotect

' lots of code

    If Not bDrawCellBorders(myWS) Then ERR.Raise glHANDLED_ERROR    ' Call subroutine

' lots of code

ErrorExit:
    On Error Resume Next
    Application.EnableEvents = True
    myWS.Protect AllowFormattingColumns:=True
    Exit Sub

ErrorHandler:
    If bCentralErrorHandler(msMODULE, sSOURCE,,True) Then  ' Call as Entry Point
        Stop
        Resume
    Else
        Resume ErrorExit
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何将其扩展到实际功能.这是基于为子程序编写的书中的一个例子,我只是将其切换为一个函数.问题:*我该怎么称呼它?它只是像x = sngDoSomeMath(17)*它的错误处理功能是否正常?*使用bReThrow …

error-handling excel vba excel-vba

9
推荐指数
2
解决办法
4万
查看次数

关闭文件时,Excel VBA错误"图片太大,将被截断"

我已经在这个项目上工作了很长时间,每当我关闭我的Excel文件时突然出现新的错误.我得到错误两次"图片太大,将被截断." 我的文件中没有图片.我正在粘贴格式.

这似乎是Excel"未解之谜"之一.

我在Windows 7上使用MS Office Professional Plus 2010.

我研究了这个,并尝试了以下内容:

  1. 删除了所有%temp%文件
  2. 冉CCleaner
  3. 所有粘贴特殊(格式)后设置CutCopyMode = False
  4. 去添加/删除程序并重新配置Office以阻止剪辑管理器运行.(控制面板\程序\程序和功能 - > MS Office Professional Plus 2010 - >更改 - >添加或删除功能 - > Office共享功能 - >剪辑管理器 - >不可用,等等)
  5. 重新启动

这些都没有帮助,所以我通过注释掉函数和子程序调用,运行程序,保存然后按"x"关闭来缩小问题的根源.我这样做直到找到合适的潜艇.然后我注释掉了sub的所有行,并一次将它们添加回一个逻辑块,直到找到问题区域.这里是:

' *********** APPLY BASIC ROW FORMATTING FROM TEMPLATE ***********
' Copy basic row formatting from template and paste over all rows
wksTemplate.Rows(giHEADER_ROW + 1).Copy
myWS.Rows(lFirstRow & ":" & lLastRow).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Run Code Online (Sandbox Code Playgroud)

粘贴仅包含格式 - 颜色,边框,数字格式,包装等.它可能平均粘贴在200行的范围内.我几个月没有改变这三行代码.为什么现在?

谁有人解开了这个谜团?

谢谢,Shari

excel vba excel-vba

6
推荐指数
1
解决办法
1万
查看次数

Excel VBA:如何将项添加到类中的集合?

我有一个包含自身集合的类.(顶级类包含集合中详细实例的摘要版本.)

目前该集合是一个公共变量,因为我还没有弄清楚使用私有变量的所有细节.我可以稍后解决.

如何将项目添加到集合中?我因缺少对象变量而收到错误91.

感谢您之前的所有帮助.我一直在重新调整我的代码以更广泛地使用类,并且事情正在清理它真的很棒.

类cPE

Public PE_Details As Collection ' collection of cPE
Public PE_ID as integer
Public PE_ID_Index as integer

' Add to the detailed list of PE's
Public Function AddPEDetail(ByRef cPE_Detail As cPE)

    PE_Details.Add cPE_Detail    ' ERROR: Object variable or With 
                                 ' block variable not set

End Function
Run Code Online (Sandbox Code Playgroud)

调用它的模块代码如下:

Dim clsPE As cPE                ' Summary version of PE
Dim clsPE_Detail As cPE         ' A detailed PE
Dim i as Integer

Set clsPE = New cPE     ' This is …
Run Code Online (Sandbox Code Playgroud)

excel vba class excel-vba

3
推荐指数
1
解决办法
8458
查看次数

VBA Excel 一起使用表单和类的最佳实践?

我是使用类的新手,并且想学习将它们与表单集成的智能方法。具体来说,当您将数据输入表单时,该表单是否应该与类紧密链接以及如何链接?

让我们用一个简单的例子。约翰是各种卡片的收藏家:棒球卡、口袋妖怪卡片等。他将卡片列表数据库存储在 Excel 工作表中,并使用表单进行管理。有用于输入新卡和修改其收藏状态的表单,也有用于分析他的数据的表单和功能。

所以他可能有一个 clsBaseball、一个 clsPokemon、一个 clsAlbum 和一个 clsSalesRecord。他还有用于输入和修改数据的表格以及其他类型的分析表格,用于比较牌、计算不同球队和时间段的统计数据等。

当约翰点击“新棒球卡”按钮时,他的 frmBaseball 就会弹出。

  1. 他输入棒球卡数据
  2. 他点击更新
  3. 表格已验证
  4. 数据保存到工作表中

上述过程中的任何时候都使用了 clsBaseball 吗?我可以看到该类如何用于加载所有数据以服务于奇特的排序或统计例程,但它实际上是在输入阶段使用的,以便表单上的字段对 clsBaseball 的实例有直接影响吗?

excel vba class

1
推荐指数
1
解决办法
1561
查看次数

标签 统计

excel ×4

vba ×4

excel-vba ×3

class ×2

error-handling ×1