gpt4 book ai didi

vba - 我的代码有效,但 Excel 停止响应。代码中没有错误消息

转载 作者:行者123 更新时间:2023-12-04 20:31:18 25 4
gpt4 key购买 nike

我需要一些帮助才能使我的 conde 更简单。
我开始在 VBA 上编写代码并构建自己的脚本,有时它们可​​以正常工作。
但它们总是太大而且比它可能的复杂得多。

这是每次我运行脚本时 Excel 崩溃的一种情况。
有人可以帮助我使这段代码更简单吗?

    Sub Cleaning_Mirexs()

Application.ScreenUpdating = False

Dim UltCel As Range
Dim Mirex As String
Dim Glip As String

Mirex = "S"
Glip = "UP"

Set UltCel = Cells(Rows.Count, 2).End(xlUp)

' Moving Data for treatment

Range("R2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("X2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.TextToColumns Destination:=Range("X2"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="-", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True

' Mirex Formicide Data

Range("$Y2").Select

Do While ActiveCell <> UltCel
If InStr(1, ActiveCell.Text, Mirex) Then
ActiveCell.FormulaR1C1 = ""
ActiveCell.Offset(0, -1).Select
ActiveCell.Clear
ActiveCell.FormulaR1C1 = "IS FORMICIDA MIREX-S" & ActiveCell.Value
ActiveCell.Offset(1, 1).Select

ElseIf ActiveCell.Offset(xlDown) Then

End If

Loop

' Glip Herbicide Data

Range("Y2").Select

Do While ActiveCell <> UltCel
If InStr(1, ActiveCell.Text, Glip) Then
ActiveCell.Formula = ""
ActiveCell.Offset(0, -1).Select
ActiveCell.Clear
ActiveCell.FormulaR1C1 = "HB GLIP-UP" & ActiveCell.Value
ActiveCell.Offset(1, 1).Select

ElseIf ActiveCell.Offset(1, 0).Select Then

End If

Loop

' Light Tractor Data
Range("X2").Select

Do While ActiveCell <> UltCel
If InStr(1, ActiveCell.Text, "Tratores leves") Then
ActiveCell.Clear
ActiveCell.FormulaR1C1 = "Tratores leves" & ActiveCell.Value
ActiveCell.Offset(1, 0).Select

ElseIf ActiveCell.Offset(1, 0).Select Then

End If

Loop

' Heavy Tractor Data
Range("X2").Select

Do While ActiveCell <> UltCel
If InStr(1, ActiveCell.Text, "Tratores pesados") Then
ActiveCell.Clear
ActiveCell.FormulaR1C1 = "Tratores pesados" & ActiveCell.Value
ActiveCell.Offset(1, 0).Select

ElseIf ActiveCell.Offset(1, 0).Select Then

End If

Loop

' back to original place after data treatment
Range("X2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("X2").Select
Selection.PasteSpecial Paste:=xlPasteValues


Application.ScreenUpdating = True

MsgBox "Success!"

End Sub

我希望代码可以一次运行所有内容,但是我编写脚本的方式就像是为每个数据集单独运行一样。

好吧,就在这里!让我们找点乐子 :)

谢谢!

玛丽亚

enter image description here

最佳答案

好的,我试图解决这个问题,但我有几个关于你在这里想要完成的问题......例如:

ActiveCell.Clear
ActiveCell.FormulaR1C1 = "Tratores pesados" & ActiveCell.Value

在这里你只是清除你的 ActiveCell ,然后添加一些文本,后跟 ActiveCell.Value现在什么都不是,因为您刚刚清除了它。我不确定你的意图是什么。

你也有
ElseIf ActiveCell.Offset(1, 0).Select Then
End If

我认为它没有任何功能,我很困惑只是试图理解为什么这是必要的,所以我省略了它。

我也摆脱了你的 Do/Loop s 并将它们替换为 For循环,更可靠。我也摆脱了 Select/Activate在大多数情况下,因为那些效率低下。

我也改了 UltCelLong对于 For循环。

如果其他人想要编辑这个继续,我确定我错过了一些东西(比如我不确定 .TextToColumns 位:
Sub Cleaning_Mirexs()

Application.ScreenUpdating = False

Dim UltCel As Long
Dim Mirex As String, Glip As String
Dim i As Long

Mirex = "S"
Glip = "UP"

UltCel = Cells(Rows.Count, 2).End(xlUp)

'Moving Data for treatment
Range("X2:X" & UltCel).Value = Range("R2:R" & UltCel).Value
Range("X2:X" & UltCel).TextToColumns Destination:=Range("X2"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="-", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True

For i = 2 To UltCel
If InStr(Range("X" & i).Value, Mirex) Then
Range("X" & i).Value1 = "IS FORMICIDA MIREX-S"
ElseIf InStr(Range("X" & i).Value, Glip) Then
Range("X" & i).Value = "HB GLIP-UP"
ElseIf InStr(Range("X" & i).Value, "Tratores leves") Then
Range("X" & i).Value = "Tratores leves"
ElseIf InStr(Range("X" & i).Value, "Tratores pesados") Then
Range("X" & i).Value = "Tratores pesados"
End If
Next i

For i = 2 To UltCel
If InStr(Range("Y" & i).Value, Mirex) Then
Range("Y" & i).Value1 = "IS FORMICIDA MIREX-S"
ElseIf InStr(Range("Y" & i).Value, Glip) Then
Range("Y" & i).Value = "HB GLIP-UP"
ElseIf InStr(Range("Y" & i).Value, "Tratores leves") Then
Range("Y" & i).Value = "Tratores leves"
ElseIf InStr(Range("Y" & i).Value, "Tratores pesados") Then
Range("Y" & i).Value = "Tratores pesados"
End If
Next i

'back to original place after data treatment
Range("X2:X" & UltCel).Value = Range("X2:X" & UltCel).Value
Range("Y2:Y" & UltCel).Value = Range("Y2:Y" & UltCel).Value

Application.ScreenUpdating = True

MsgBox "Success!"

End Sub

关于vba - 我的代码有效,但 Excel 停止响应。代码中没有错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50156709/

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