【问题标题】:VBA Error: "The object invoked has disconnected from its clients"VBA 错误:“调用的对象已与其客户端断开连接”
【发布时间】:2014-06-03 03:11:21
【问题描述】:

我正在尝试编写一个将 x/y 坐标与它们适合的椭圆相匹配的宏。我在代码中的“Else”行收到自动化错误。我已经查看了很多其他帖子,但我无法弄清楚我的代码有什么问题。非常感谢任何帮助。谢谢!

Private Sub CommandButton1_Click()
Dim XR As Integer
Dim XC As Integer
Dim YR As Integer
Dim YC As Integer
Dim areaR As Integer
Dim areaC As Integer
Dim hR As Integer
Dim hC As Integer
Dim kR As Integer
Dim kC As Integer
Dim aR As Integer
Dim aC As Integer
Dim bR As Integer
Dim bC As Integer
Dim angleR As Integer
Dim angleC As Integer
Dim matchR As Integer
Dim matchC As Integer
XR = 2
XC = 1
YR = 2
YC = 2
Do Until ThisWorkbook.Sheets("Sheet1").Cells(XR, XC).Value = ""
ThisWorkbook.Sheets("Sheet1").Activate
areaR = 2
areaC = 6
hR = 2
hC = 7
kR = 2
kC = 8
aR = 2
aC = 9
bR = 2
bC = 10
angleR = 2
angleC = 11
matchR = XR
matchC = 12
    Do Until ThisWorkbook.Sheets("Sheet1").Cells(hR, hC).Value = ""
        If (((((ThisWorkbook.Sheets("Sheet1").Cells(XR, XC).Value) _
             - (ThisWorkbook.Sheets("Sheet1").Cells(hR, hC).Value)) * _
             Cos((ThisWorkbook.Sheets("Sheet1").Cells(angleR, angleC).Value)) _
             + ((ThisWorkbook.Sheets("Sheet1").Cells(YR, YC).Value) - _
             (ThisWorkbook.Sheets("Sheet1").Cells(kR, kC).Value)) * Sin _
             ((ThisWorkbook.Sheets("Sheet1").Cells(angleR, angleC).Value))) ^ 2) _
             / ((Cells(aR, aC).Value) ^ 2)) + (((((Cells(XR, XC).Value) - _
             (Cells(hR, hC).Value)) * Sin((ThisWorkbook.Sheets("Sheet1").Cells _
             (angleR, angleC).Value)) - ((ThisWorkbook.Sheets("Sheet1").Cells(YR, YC).Value) _
             - (ThisWorkbook.Sheets("Sheet1").Cells(kR, kC).Value)) _
             * Cos((Cells(angleR, angleC).Value))) ^ 2) / ((Cells(bR, bC).Value) ^ 2)) _
             <= 1 Then
             ThisWorkbook.Sheets("Sheet1").Cells(matchR, matchC).Value = _
             ThisWorkbook.Sheets("Sheet1").Cells(areaR, areaC)
       Else
             areaR = areaR + 1
             hR = hR + 1
             kR = kR + 1
             aR = aR + 1
             bR = bR + 1
             angleR = angleR + 1
       End If
    Loop
   XR = XR + 1
   YR = YR + 1
Loop

结束子

【问题讨论】:

标签: vba excel


【解决方案1】:

这是很多代码,使用单元格引用值进行直接数学运算非常难以阅读......甚至对你来说也是如此。

这可能不是一个很好的答案,但是如果您在循环中创建变量(是的,更多变量),那么您的代码将更易于所有人阅读,并且很可能会出现您的错误。

因此,不要在计算中使用ThisWorkbook.Sheets("Sheet1").Cells(XR, XC).Value,而是首先执行以下操作:X = ThisWorkbook.Sheets("Sheet1").Cells(XR, XC).Value

但不要止步于此。包括将自我描述您的代码和计算过程的中间变量。

这有望让您看到代码的真正作用。

isMatch = cosX <= 1
If isMatch Then

顺便说一句,我怀疑你的错误是因为你没有用工作表引用来限定 所有你的 Cells 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    相关资源
    最近更新 更多