use*_*353 2 excel vba excel-vba
我创建了以下代码.宏应该简单地将单元格A2:G3000乘以1,以便格式从文本变为数字.我写的宏是这样做的,但仅适用于活动工作表.我在学习它时使用了For Each/Next循环.
有人可以帮我在代码中找到错误吗?
Sub Format_Change()
Dim sht As Worksheet
For Each sht In Worksheets
Range("M2").Select
ActiveCell.FormulaR1C1 = "=RC[-12]*1"
Range("M2").Select
Selection.AutoFill Destination:=Range("M2:W2"), Type:=xlFillDefault
Range("M2:W2").Select
Selection.AutoFill Destination:=Range("M2:W3000"), Type:=xlFillDefault
Range("M2:W3000").Select
Selection.Copy
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("M2").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Application.CutCopyMode = False
Selection.ClearContents
Next sht
End Sub
Run Code Online (Sandbox Code Playgroud)
尝试下面的代码,如@Vityata指出,有真的没有必要使用这么多的Select
和Selection
,它减缓代码下降了不少.
试试下面的代码版本:
Option Explicit
Sub Format_Change()
Dim sht As Worksheet
For Each sht In Worksheets
With sht
.Range("M2").FormulaR1C1 = "=RC[-12]*1"
.Range("M2").AutoFill Destination:=.Range("M2:W2"), Type:=xlFillDefault
.Range("M2:W2").AutoFill Destination:=.Range("M2:W3000"), Type:=xlFillDefault
.Range("M2:W3000").Copy
.Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
.Range(.Range("M2"), .Range("M2").CurrentRegion).ClearContents
End With
Next sht
End Sub
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
45 次 |
最近记录: |