为什么NumberFormat在“ThisWorkbook”中工作而不在Worksheet中?

Excel中的这个VBA脚本在'ThisWorkbook'input时效果很好,但是当我在特定的WorkSheet(我想将它链接到一个button)中input时,它不起作用,它会在这一行上提供一个错误:

 ActiveSheet.Range(Cells(intStartRow, cell.Column), Cells(lonLowRow, cell.Column)).NumberFormat = "m/d/yyyy" The error given is: 1004 

有没有人有一个想法,为什么和如何补救? 谢谢!!

 Sub proefje() Dim strTitleRow As String Dim arrDates() As String Dim arrTimes() As String Dim intStartRow As Integer Dim lonLowRow As Long strTitleRow = "D5:AW5" arrDates = Split("Last update,Last recovery test,Date installed,Key valid until", ",") arrTimes = Split("Time", ",") intStartRow = 6 lonLowRow = ActiveSheet.Range("BB3").Value + ActiveSheet.Range("BE3").Value 'Date/Time job start ActiveSheet.Range(strTitleRow).Select For Each cell In Selection If IsInArray(cell.Value, arrDates) Then ActiveSheet.Range(Cells(intStartRow, cell.Column), Cells(lonLowRow, cell.Column)).NumberFormat = "m/d/yyyy" End If If IsInArray(cell.Value, arrTimes) Then ActiveSheet.Range(Cells(intStartRow, cell.Column), Cells(lonLowRow, cell.Column)).NumberFormat = "[$-F400]h:mm:ss AM/PM" End If Next cell End Sub Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1) End Function 

在Worksheet模块的上下文中, Cells对象(除非另有限定)引用Me.Cells ,即代码所在的工作表。 看到这个简单的例子,我把它放在Sheet1模块,当Sheet2是ActiveSheet时,这将引发1004错误。

 Sub sheet1Macro() MsgBox ActiveSheet.Range(Cells(1, 1), Cells(1, 2)).Address End Sub 

你有这样的构造,它使用ActiveSheet ,它可能(或可能不)是相同的工作表。 如果MeActiveSheet不是相同的表,那么错误是预期的,因为你不能定义跨越多个工作表这样的范围。

 ActiveSheet.Range(Cells(intStartRow, cell.Column), Cells(lonLowRow, cell.Column)).NumberFormat = "m/d/yyyy" End If 

解决方法:将代码放在标准模块中,或者完全限定范围对象,如:

 With ActiveSheet .Range(.Cells(intStartRow, cell.Column), .Cells(lonLowRow, cell.Column)).NumberFormat = "m/d/yyyy" End With 

进一步阅读:

如何避免在Excel VBAmacros中使用select