Tag: error handling

VBA – 如何正确使用合并单元格/大区域?

在完成一个大项目之后,我试着让代码正确。 我看了一下Clean Code ,现在我正在尽我所能去认真地应用这些规则。 我完成了命名,评论,testing等 我现在试图重构代码。 我有多个工作表,多个区域包含数千个单元格。 我在每个区域做类似的事情,所以我试图使用一般function,而不是适应每个区域的一些代码行。 根据我的工作情况,我遇到了两个问题。 这是一个简单的例子: 在引用单元格之前,我想清除它们。 第一个选项: I loop trough zone and clear them. for each Zone in Zones zone.clearcontents [work on zone] for each cell in cells [work on cells] next next 这曾经工作,但第二次启动后,我得到了错误“太多不同的单元格格式”,我不知道如何处理,所以我试图去那样的方式: for each Zone in Zones [work on zone] for each cell in cells cell.clearcontents [work on […]

中断macros来处理按键以获得stream畅的用户体验

我正在处理一个macros,它显示excel应用程序中每个select更改状态栏上的单元格信息。 随着新function的增加,得益于这里成员的帮助,它已经成长。 所以现在有时候焦点会粘在一个单元格上,而且在计算出要显示的单元格信息之前,我不能用箭头键移动到附近的单元格。 但是我确实希望这个select能够顺利地进行用户体验。 我应该如何中断计算? 它在类模块中是这样的: Private Sub Appl_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Dim InfoAboutTarget InfoAboutTarget = GetInfoAbout(Target) WriteInfoToStatusbar(InfoAboutTarget) End Sub 以下两种select中的任何一种都可以吗? 有一个application_onkey事件引发一个错误标志,用户定义的错误代码和error handling程序在上面的子中退出这个特定的错误 从代码中的有趣点开始,测量从上面的子开始经过的时间,并在足够大的时间之后退出,以威胁用户体验?

Excel VBA多个error handling在同一个程序中

我曾经在VBA中成功地使用过error handling,但是当试图使用几个error handling块时,我无法弄清楚如何去做。 我写的代码如下所示: … On Error GoTo ErrorHandler1 shpArrow1.Left = shpLine.Left + shpLine.Width * Min(Sqr(Calculations.Range("cVolProduct").value / Calculations.Range("cVolRefIndices").value), 2) / 2 – shpArrow1.Width / 2 shpTag1.Left = shpLine.Left + shpLine.Width * Min(Sqr(Calculations.Range("cVolProduct").value / Calculations.Range("cVolRefIndices").value), 2) / 2 – shpTag1.Width / 2 shpArrow2.Left = shpLine.Left + shpLine.Width * Min(Sqr(Calculations.Range("cVolUnderlyings").value / Calculations.Range("cVolRefIndices").value), 2) / 2 – shpArrow2.Width […]

error handling程序中的error handling

我正在使用下面的代码,当用户在input框中单击取消button时,error handling程序正在处理错误。 但是,如果在error handling程序中再次出现错误,那么error handling程序不会处理该错误。 Sub calculateroot() Dim msg As String, t as Integer On Error GoTo myhandle Dim inp As Integer, sql As Single inp = InputBox("Enter the number to find the square root") sql = Sqr(inp) Exit Sub myhandle: t = InputBox("Is this recursive ?") End Sub 我应该在代码中进行哪些更改以处理error handling程序中生成的错误?

ISERROR似乎忽略了#REF! 由INDIRECT生成

我正尝试使用INDIRECT创build对单独工作表的引用。 我也想检查这个错误,所以我通过使用ISERROR前言。 H1是date值,格式为“nn md”。 在这种情况下,42574返回星期六7.23 'Sat 7.23'.D2等于100 假设有一个名为“Sat 7.23”的标签,我想访问单元格D2。 使用INDIRECT并将格式化的date转换为文本,我创build这个公式: =INDIRECT("'" & TEXT(H1, "nn md") & "'.D2") 换句话说, INDIRECT告诉我做以下参考: ='Sat 7.23'.D2 当标签存在时,这个function完美(返回100 )。 但是…如果选项卡不存在呢? 间接回报#REF! ,这是可以预料的。 所以,我把一个ISERROR放在它的前面: =ISERROR(INDIRECT("'" & TEXT(H1, "nn md") & "'.D2") 这不会返回任何(或者我猜FALSE ),即使INDIRECT正在生成一个#REF! 错误,因此应该是TRUE 。 不是吗? 进一步: =IF(ISERROR(INDIRECT("'" & TEXT(H1, "nn md") & "'.D2")),0,INDIRECT("'" & TEXT(H1, "nn md") & "'.D2")) 在这种情况下, ISERROR永远是真的,所以这个IF总是去到它的“else”语句。 […]

exceltypes不匹配错误时间标识子

我有一个小时,应该确定小时,并添加一个单元格的值在第二列中有一小时的相应行中的值。 所以例如,如果它的7点30分,我点击了button,它会在7点加1。 我的代码给了我一个types不匹配错误,当昨天它完美的工作。 我的代码如下: Private Sub CommandButton1_Click() Sheets("Front End").Unprotect ("29745") h = Hour(Now) For Each c In range("B8:B20") If h = Hour(c) Then c.Offset(0, 3) = c.Offset(0, 3) + 1 Exit For End If Next c Sheets("Front End").Protect ("29745") Unload Me End Sub 我不能为我的生活弄清楚代码有什么问题,昨天我写了它的时候整天工作。 任何帮助是极大的赞赏

运行时错误#13 – types不匹配(如果范围…则…)

我需要扫描一定范围内的某些单元格。 如果某些单元格为空,那么将在该特定的空单元格中写入消息“单元格为空”。 我一直在尝试以下几点: Sub Empty() Sheets("My sheet").Select If Range("C5:C12,C15:C22,C25:C32,C36:C43,C46:C53,C56:C63,C66:C73,C76:C83,D4,D14,D24,D35,D45,D55,D65,D75").Value = "" Then Range("C5:C12,C15:C22,C25:C32,C36:C43,C46:C53,C56:C63,C66:C73,C76:C83,D4,D14,D24,D35,D45,D55,D65,D75").Value = "cell is empty" End If End sub I am getting the error: run time error #13 – type mismatch. 为了帮助其他可能与我有同样问题的人士, 我将补充下面提供的工作解决scheme。 请注意,我添加了一个error handling,防止消息“运行时错误'1004':没有find单元”,也是一个数组来扫描符合您的需求的特定工作表: Sub myEmpty() Dim rng As Range On Error GoTo NoBlanks Dim MyArray As Worksheet For Each MyArray In […]

没有行号的错误消息

我在Visual Basic for Applications(6.5)中编写了一个小程序(macros),我正在使用集成到Excel 2007中的标准编辑器。 我的问题是,我得到没有任何行号信息的错误信息。 我不是指我的error handling或用户定义的消息。 例: 错误消息说我有一个运行时错误“1004”。 我无法点击“debugging”button,只有“结束”和“帮助”可用。 因此,我没有看到错误发生在哪一行。 这是非常令人沮丧的。 我该如何解决这个问题?

在错误转到0不重置错误陷印

我在On Error GoTo 0重置error handling的印象。 那么为什么On error resume next似乎没有注册在以下? Sub GetAction() Dim WB As Workbook Set WB = ThisWorkbook On Error GoTo endbit: 'raise an error Err.Raise 69 Exit Sub endbit: On Error GoTo 0 '<<<reset error handling? On Error Resume Next WB.Sheets("x").Columns("D:T").AutoFit MsgBox "ignored error successfully and resumed next" End Sub

Excel中的HRESULT代码在C#中互操作

我正在寻找一种干净的方式来在Excel中使用interop来输出C#中的错误。 当文件不是“正确的”时,有一个像“ blabla HRESULT:0x800AC472 ”的消息。 我宁愿要像“ 文件使用有这个或那个问题 ”的消息。 为了做到这一点,我需要知道每个HRESULT映射到哪个错误? 如何获得这样的错误列表? 我看MSDN,发现一些说明,但我似乎无法find像上面提到的“ 0x800AC472 ”所有代码的列表。