gpt4 book ai didi

VBA脚本每次都会崩溃

转载 作者:行者123 更新时间:2023-12-02 18:58:41 27 4
gpt4 key购买 nike

我是 Excel 新手,经过一些研究,发现了一个代码,可以根据另一个单元格中输入的值在一个单元格中生成值,反之亦然。代码如下。但每次我在工作表上进行微小更改时,它都会停止工作,即使关闭并重新打开后也不会重置。

请大家帮忙提建议。谢谢!

 Private Sub Worksheet_Change(ByVal Target As Range)
Dim EF As Range, t As Range, v As Variant
Dim r As Long
Set t = Target
Set EF = Range("E:F")
If Intersect(t, EF) Is Nothing Then Exit Sub
Application.EnableEvents = False
r = t.Row
v = t.Value
If v = "" Then
Range("E" & r & ":F" & r).Value = ""
End If
If IsNumeric(v) Then
If Intersect(t, Range("F:F")) Is Nothing Then
t.Offset(0, 1).Value = v * 25.4
Else
t.Offset(0, -1).Value = v / 25.4
End If
End If
Application.EnableEvents = True
End Sub

最佳答案

为什么不起作用?

您的代码中有 application.EnableEvents=False 。当您犯错误并且事件被禁用时,它们将保持禁用状态。请尝试以下操作,以使您的代码以某种方式运行。

在模块中运行它:

Option Explicit

Sub TurnMeOn()

Application.EnableEvents = True

End Sub

要进一步处理您的代码,请确保您使用良好的错误捕获器,当 EnableEvents 存在时,它们会重置它们。

    Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Dim EF As Range
Dim t As Range
Dim v As Variant
Dim r As Long

On Error GoTo Worksheet_Change_Error

Set t = Target
Set EF = Range("E:F")

If Intersect(t, EF) Is Nothing Then Exit Sub
Application.EnableEvents = False
r = t.Row
v = t.Value
Debug.Print Target.Address

If v = "" Then
Range("E" & r & ":F" & r).Value = ""
End If

If IsNumeric(v) Then
If Intersect(t, Range("F:F")) Is Nothing Then
t.Offset(0, 1).Value = v * 25.4
Else
t.Offset(0, -1).Value = v / 25.4
End If
End If
Application.EnableEvents = True

On Error GoTo 0
Exit Sub

Worksheet_Change_Error:

Application.EnableEvents = True
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure Worksheet_Change of VBA Document Tabelle1"

End Sub

为了使代码正常工作,一个快速而肮脏的修复是将Set t = Target更改为Set t = Target(1,1)。因此,当粘贴多个单元格时,它始终仅适用于第一个单元格。

关于VBA脚本每次都会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42438514/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com