我在excel中构建了一个随机数生成器,它输出到工作簿中另一个工作表中的另一列。该宏在A1,000,000单位处被截止。当我在工作期间全天运行时,我可以接近200,000行输出。当我跑过夜而早上回来时,它被冷冻(没有回应),我认为这意味着它只是在击中切断之前自行冷冻。
我看了一些其他帖子,但他们并没有完全回答我的问题 (Excel Not Responding During Macro) (Excel not responding after running macro)。
有什么方法可以让它从Not Responding中解脱出来,只是禁用宏并查看输出?
为什么会这样?
这是我的代码:
Sub Macro2()
'
' Macro2 Macro
'
' Keyboard Shortcut: Ctrl+q
'
Do
Do
Do
Range("H12").Select
Range("H12").ClearContents
Loop Until Range("K10") = "MATCH" And Range("K11") = "GOOD"
Range("H2:H8").Select
Selection.Copy
Range("P1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("P1:P5").Select
Application.CutCopyMode = False
ActiveWorkbook.Worksheets("NUMBER GENERATOR").sort.SortFields.Clear
ActiveWorkbook.Worksheets("NUMBER GENERATOR").sort.SortFields.Add Key:=Range( _
"P1:P5"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("NUMBER GENERATOR").sort
.SetRange Range("P1:P5")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Loop Until Range("P11") = "GOOD" And Range("P12") = 1
Range("P9").Select
Selection.Copy
Sheets("Sheet1").Select
Sheets("Sheet1").Range("A1").Select
Range("A" & Rows.Count).End(xlUp).Offset(1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, Transpose:=False
Sheets("NUMBER GENERATOR").Select
Range("H12").Select
Loop Until Sheets("Sheet1").Range("A1000000") <> ""
End Sub
答案 0 :(得分:3)
Select
。例如,两行
Range("H12").Select
Range("H12").ClearContents
可以简单地替换为:
Range("H12").ClearContents
更重要的是,7行
Range("H2:H8").Select
Selection.Copy
Range("P1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("P1:P5").Select
Application.CutCopyMode = False
可以用单行代替
Range("P1:P7").Value = Range("H2:H8").Value
类似的评论适用于Select
的其他用途。在宏运行时进行这些更改并关闭屏幕更新应该有很大帮助(无论是否有足够的帮助都很难说,因为不清楚你实际在做什么)。