这是我正在使用的代码,我遇到了这个问题.我是Excel的新手,我无法弄清楚出了什么问题.
Private Sub cmdRecord_Click()
Sheets("BxWsn Simulation").Range("Result").Select //This is the line with the problem, as excel told me.
Selection.Copy
Sheets("Reslt Record").Select
Sheets("Reslt Record").Range("A5000").End(xlUp).Offset(1).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Sheets("CuCon Simulator").Select
Application.CutCopyMode = False
Range("Improvement").Select
End Sub
Run Code Online (Sandbox Code Playgroud)
错误是Range类的Select方法通过VBA失败,错误1004.任何想法?
谢谢.
编辑:
所以我只是将代码更改为
Sheets("BxWsn Simulation").Select
Range("Result").Select
Run Code Online (Sandbox Code Playgroud)
我相信这就是你的意思,让它活跃起来?但是我仍然得到对象'_Worksheet'的方法'范围'失败,错误1004
GSe*_*erg 28
我相信你在这里遇到同样的问题.
工作表必须处于活动状态才能在其上选择范围.
另外,不要省略工作表名称限定符:
Sheets("BxWsn Simulation").Select
Sheets("BxWsn Simulation").Range("Result").Select
Run Code Online (Sandbox Code Playgroud)
要么,
With Sheets("BxWsn Simulation")
.Select
.Range("Result").Select
End WIth
Run Code Online (Sandbox Code Playgroud)
这是一样的.
Dic*_*ika 15
这个特定问题的正确答案是"不要选择".有时您必须选择或激活,但99%的情况下您不必选择或激活.如果您的代码看起来像
Select something
Do something to the selection
Select something else
Do something to the selection
Run Code Online (Sandbox Code Playgroud)
您可能需要重构并考虑不选择.
对象'_Worksheet'的错误,方法'范围'失败,错误1004,你得到的是因为带有按钮的工作表没有名为"Result"的范围.返回对象的大多数(可能是所有)属性都具有默认的Parent对象.在这种情况下,您使用Range属性返回Range对象.由于您不限定Range属性,因此Excel使用默认值.
默认的Parent对象可以根据具体情况而有所不同.如果你的代码是一个标准的模块中,那么ActiveSheet将是默认的家长和Excel会尝试解决ActiveSheet.Range("结果").您的代码位于工作表的类模块中(带有按钮的工作表).当在那里使用非限定引用时,默认Parent是附加到该模块的表单.在这种情况下,它们是相同的,因为单击该按钮必须处于活动状态,但情况并非总是如此.
当Excel给出包含'_Object'之类的文本的错误时(你说'_Worksheet'),它总是引用默认的Parent对象 - 下划线给出了它.通常,修复它的方法是通过明确父类来限定引用.但是在不需要时选择和激活的情况下,最好只重构代码.
这是编写代码而无需任何选择或激活的一种方法.
Private Sub cmdRecord_Click()
Dim shSource As Worksheet
Dim shDest As Worksheet
Dim rNext As Range
'Me refers to the sheet whose class module you're in
'Me.Parent refers to the workbook
Set shSource = Me.Parent.Worksheets("BxWsn Simulation")
Set shDest = Me.Parent.Worksheets("Reslt Record")
Set rNext = shDest.Cells(shDest.Rows.Count, 1).End(xlUp).Offset(1, 0)
shSource.Range("Result").Copy
rNext.PasteSpecial xlPasteFormulasAndNumberFormats
Application.CutCopyMode = False
End Sub
Run Code Online (Sandbox Code Playgroud)
当我在一个类模块中,就像你正在使用的工作表的类模块一样,我总是尝试用这个类来做事.所以我使用Me.Parent而不是ActiveWorkbook.它使代码更具可移植性,并在事情发生变化时防止意外问题.
我确定你现在的代码在几毫秒内运行,所以你可能不在乎,但避免选择肯定会加速你的代码,你不必设置ScreenUpdating.随着代码的增长或处于不同的情况,这可能会变得很重要.
归档时间: |
|
查看次数: |
95165 次 |
最近记录: |