从WS已经声明和设置的范围select避免运行时错误

我有这个代码,它是工作正常,如果我运行macros而Sheet1被选中或激活。
但是,当其他纸张被选中时,它将失败。 为什么?
我得到一个:

运行时错误:select范围级别的方法失败

当我Set ws = ThisWorkbook.Sheets("Sheet1")时是否覆盖

 Sub test() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") With ws lrow = .Range("A" & .Rows.Count).End(xlUp).Row .Range("A1:M" & lrow).Select End With End Sub 

我如何改进代码并避免Runtime Error
我错过了什么?
任何帮助将非常感激。

本身。 它包含公式,所以我想保留从公式获得的值的数据格式并将其粘贴为值。 – L42 1分钟前

就像我提到的,你可以避免使用。在大多数情况下select。

这是你正在尝试?

更换

 .Range("A1:M" & lrow).Select 

 .Range("A1:M" & lrow).Value = .Range("A1:M" & lrow).Value 

或者,也许这个?

 Sub test() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") With ws lrow = .Range("A" & .Rows.Count).End(xlUp).Row .Range("A1:M" & lrow).Copy .Range("A1:M" & lrow).PasteSpecial xlPasteValues End With End Sub