VBA Excel 2010 – 使用范围时运行时1004错误
我有一个问题引用范围在我的VBA程序。 以下代码片段显示了我的原始代码:
With Worksheets("Overall 6 mo") .Columns("A:G").ColumnWidth = 13.57 .Range("A1:Z100").Rows.RowHeight = 15 .Columns("F:G").NumberFormat = "0.00%" .Range("B3:G3") = Worksheets("TEMPLATE").Range("A3:F3").Value .Range("F4:G100") = Worksheets("TEMPLATE").Range("E4:F100").Formula .Range("A1").NumberFormat = "@" .Range("A1") = .Name End With
这会在通过第3行之后抛出“运行时1004应用程序定义或对象定义的错误”。于是我改变了
.Range("A1:Z100").Rows.RowHeight = 15
至
.Rows.RowHeight = 15
关键是要使我需要使用的细胞具有15的高度,所以这种改变不会伤害我的程序。 而现在,它将允许,但是然后在下一行再次引用相同的错误。 所以我想弄明白为什么它不允许我使用.range? 或者至less我可以修复它?
更新:我已经认识到,我不能在我的工作簿中的任何地方使用.Range方法(不只是在上面的实例中)。 什么会禁用我使用。范围无处不在?
UPDATE2:它现在不再允许我在第二行中使用.Columns方法。 我没有做任何事情,只是通过它几次。 这个东西有什么问题?
更新3:似乎当我重新启动excel时,它将允许我运行工作表“总体6个月”的代码一次,然后开始抛出每次错误后。 我已经包含了表单其余部分的代码。
Option Explicit Private Sub Worksheet_Activate() Application.ScreenUpdating = False Dim shIndex As Integer Dim rowIndex As Integer Dim myLastRow As Integer Dim shLastRow As Integer Dim col As Integer myLastRow = Worksheets("Overall 6 mo").Cells(65536, 1).End(xlUp).Row ' Format Worksheet Sheets("Overall 6 mo").Cells.Clear With Worksheets("Overall 6 mo") .Columns.ColumnWidth = 13.57 .Rows.RowHeight = 15 .Columns("F:G").NumberFormat = "0.00%" .Range("B3:G3") = Worksheets("TEMPLATE").Range("A3:F3").Value .Range("F4:G100") = Worksheets("TEMPLATE").Range("E4:F100").Formula .Range("A1").NumberFormat = "@" .Range("A1") = .Name End With ' Clear current sheet data myLastRow = Worksheets("Overall 6 mo").Cells(65536, 2).End(xlUp).Row Worksheets("Overall 6 mo").Range(Cells(4, 1), Cells(myLastRow, 7)).Clear ' Compile data from last six months and add to and display on "Overall 6 mo" sheet For shIndex = Worksheets.Count - 5 To Worksheets.Count Worksheets(shIndex).Activate myLastRow = Worksheets("Overall 6 mo").Cells(65536, 2).End(xlUp).Row shLastRow = Worksheets(shIndex).Cells(65536, 1).End(xlUp).Row Worksheets("Overall 6 mo").Cells(myLastRow + 1, 1).Value _ = MonthName(Month(CDate(Worksheets(shIndex).Name)), False) Worksheets(shIndex).Range("A4:D" & shLastRow) _ .Copy (Worksheets("Overall 6 mo").Cells(myLastRow + 1, 2)) Next shIndex ' Call UpdateChart to clear and re-add Quality and Cost charts to wks Call UpdateCharts(Worksheets("Overall 6 mo").Index) Worksheets("Overall 6 mo").Activate Application.ScreenUpdating = True
结束小组
您可以使用以下方式进行行高更改:
.Range("A1:Z100").RowHeight = 15
你可以使用范围复制方法
Worksheets("TEMPLATE").Range("A3:F3").Copy .Range("B3") Worksheets("TEMPLATE").Range("E4:F100").Copy .Range("F4")
更新:
Option Explicit Private Sub Worksheet_Activate() Dim oSh As Worksheet Dim shIndex As Long Dim rowIndex As Long Dim myLastRow As Long Dim shLastRow As Long Application.ScreenUpdating = False Set oSh = ThisWorkbook.Worksheets("Overall 6 mo") ' Format Worksheet With oSh .Cells.Clear .Columns.ColumnWidth = 13.57 .Rows.RowHeight = 15 .Columns("F:G").NumberFormat = "0.00%" .Range("A1").NumberFormat = "@" .Range("A1") = .Name .Range("B3:G3") = Worksheets("TEMPLATE").Range("A3:F3").Value .Range("F4:G100") = Worksheets("TEMPLATE").Range("E4:F100").Formula End With ' Clear current sheet data oSh.Range(oSh.Cells(4, 1), oSh.Cells(GetLastRow(oSh, 2), 7)).Clear ' Compile data from last six months and add to and display on "Overall 6 mo" sheet For shIndex = Worksheets.Count - 5 To Worksheets.Count 'Worksheets(shIndex).Activate myLastRow = GetLastRow(oSh, 2) shLastRow = GetLastRow(Worksheets(shIndex), 1) oSh.Cells(myLastRow + 1, 1).Value = MonthName(Month(CDate(Worksheets(shIndex).Name)), False) Worksheets(shIndex).Range("A4:D" & shLastRow).Copy oSh.Cells(myLastRow + 1, 2) Next shIndex ' Call UpdateChart to clear and re-add Quality and Cost charts to wks Call UpdateCharts(oSh.Index) oSh.Activate Set oSh = Nothing Application.ScreenUpdating = True End Sub Private Function GetLastRow(oSheet As Worksheet, lngColumn As Long) As Long GetLastRow = oSheet.Cells(oSheet.UsedRange.SpecialCells(xlLastCell).Row + 1, lngColumn).End(xlUp).Row End Function
与索引1(或小于Worksheets.Count – 5)相同的工作簿中的“模板”? 我已经注释掉Worksheets(shIndex).Activate
似乎没有必要每次都在For循环运行这个子。
RowHeight
适用于整行 ,而不是行的一部分。
所以使用
.Range("A1:A100").EntireRow.RowHeight = 15
要么
.Range("1:100").RowHeight = 15