excel - VBA 运行时错误“1004”:对象“_Worksheet”的方法“范围”
问题描述
我知道这个问题与 Stack 上发布的许多其他问题相似,但他们的解决方案都不适合我。我是 VBA 新手,所以请尽量让您的解决方案易于理解。下面的代码基本上有条件地锁定和解锁单元格(尚未完成;仍在尝试关闭框架):
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Sheet1.Protect UserInterFaceOnly:=True
' Volatility
If Not IsEmpty(Range("B11").Value) Then
Range("B12").Value = ""
Range("B13").Value = ""
Range("B22").Value = Range("B11").Value
Range("B12:B13").Locked = True
Else
Range("B12:B13").Locked = False
End If
If IsEmpty(Range("B12").Value) And IsEmpty(Range("B13").Value) Then
Range("B11").Locked = False
Else
Select Case Range("B12").Value
Case Is = "Daily"
Range("B22").Value = Range("B13").Value * Sqr(252)
Case Is = "Weekly"
Range("B22").Value = Range("B13").Value * Sqr(52)
Case Is = "Monthly"
Range("B22").Value = Range("B13").Value * Sqr(12)
Case Is = "Annual"
Range("B22").Value = Range("B13").Value
End Select
Range("B11").Locked = True
End If
' Time
If Not IsEmpty(Range("B14").Value) Then
Range("B15").Value = ""
Range("B15").Locked = True
Range("B23").Value = Range("B14").Value / Range("B7").Value
Else
Range("B15").Locked = False
End If
If Not IsEmpty(Range("B15").Value) Then
Range("B14").Locked = True
Range("B23").Value = Range("B15").Value
Else
Range("B14").Locked = False
End If
' Dividends
If Not IsEmpty(Range("B16").Value) Then
Range("B17").Value = ""
Range("B17").Locked = True
Else
Range("B17").Locked = False
End If
If Not IsEmpty(Range("B17").Value) Then
Range("B16").Locked = True
Else
Range("B16").Locked = False
End If
Select Case Range("B6").Value
Case Is = "Cox Rox Rubinstein (1979)"
' If requirements satisfied, populate outputs
' Else make output values blank
Range("B24").Value = ""
Case Is = "Forward Tree"
Range("B24").Value = ""
Case Is = "Lognormal Tree"
Range("B24").Value = ""
Case Is = "Custom"
Range("B24").Value = ""
End Select
End Sub
问题是,每当我更改工作表上的任何单元格值时,Excel都会提示“获取运行时1004:对象'_Worksheet'的方法'范围'失败”,而没有指定哪一行代码,然后强制退出程序。请参阅此处的表格。任何帮助是极大的赞赏!
解决方案
我发现我在使用
Private Sub Worksheet_Change(ByVal Target As Range)
在不使用 intersect() 的情况下,我本质上是在处理一个不存在的范围。简单的修复如下:
If Not Intersect(Target, Range("B2")) Is Nothing Then
之后,打开和关闭事件变得相关,以防止在更改选定单元格的值时出现无限循环。感谢您的提示!
推荐阅读
- java - Google 聊天卡 API 无法提及用户
- python - 基于列而不是行索引/索引的散景链接/刷亮
- vaadin - Vaadin & Shiro 导航
- spring - 由于我没有在资源文件夹中保留任何文件,为什么我们需要映射到资源文件夹以加载所有静态资源?
- asp.net-mvc - MVC 路由到虚拟文件夹中的 Angular 应用程序
- c# - 带有 System.Data.Sqlite PK 的 EntityFramework 6 在插入时被覆盖
- pentaho - 结果集溢出发生 jpivot
- java - 如何使用 Azure Java SDK 发送和接收消息
- python - ModuleNotFoundError:没有名为“merlin.tradelogic”的模块
- python - Python 3.7 Anaconda:“ImportError:无法从‘PyQt5’导入名称‘QtWebKitWidgets’”