引用先前变暗的活动单元格时出错(运行-次错误“1004”)
Error when referring to a previous dimmed activecell (Run-time Error '1004')
我目前正在将一些旧代码重新用于循环而不是 160 个不同的宏(字面意思)。
轶事,我犯了 select 范围和使用活动单元格的主要错误(部分原因是我不知道这将如何工作),我试图通过分配 cell = cell 等来重建它,但是我不确定这将如何工作,我已经回到我所知道的。
代码如下:
Sub Refined_Code()
' Turn off the usual system hogs.
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
ActiveWorkbook.ForceFullCalculation = False
' Dim some ranges for use later on.
Dim BU As Range
Set BU = Sheets("Control").Range("C3")
Dim PorT As Range
Set PorT = Sheets("Control").Range("C8")
Dim BUStart As Range
Set BUStart = Sheets("Control").Range("D3")
Dim MasterData As Range
Set MasterData = Sheets("Parent and Child view").Range("Y6:Y180")
Dim MasterPaste As Range
Set MasterPaste = Sheets("Parent and Child view").Range("F6")
Dim BUlist As Range
Set BUlist = Sheets("Parent and Child view").Range("I106:AR116")
Dim PrevCell As Range
' Selects sheet "parent and child view" clears the data from the range, then selects the "Control' sheet.
Sheets("Parent and Child view").Select
Range("F6:R1000").Select
Selection.ClearContents
Sheets("Parent and Child view").Range("G6") = "G6"
Sheets("Control").Select
' Look up the datavalidated cell in D3 and find the right column
Range("G106:AR106").Select
Selection.Find(What:=BUStart.Value, After:=ActiveCell).Activate
ActiveCell.Select
Selection.Offset(1, 0).Select
' This will lookup the Range in D3, and commence running the macro chain.
Do While (Selection.Offset(1, 0) <> "")
Application.Calculation = xlCalculationManual
Sheets("Control").Select
BU.Value = ActiveCell.Value
Set PrevCell = ActiveCell
Application.Calculation = xlCalculationAutomatic
If InStr(1, ActiveCell, " ") = 1 Then
PorT.Value = "Target"
Else
PorT.Value = "Plan"
End If
Sheets("Parent and Child view").Select
MasterData.Copy
MasterPaste.Select
ActiveCell.End(xlToRight).Select
ActiveCell.Offset(0, 1).Select
ActiveCell.PasteSpecial xlPasteValues
PrevCell.Select
Selection.Offset(1, 0).Select
Loop
MsgBox "Finished"
End Sub
代码似乎在线崩溃
PrevCell.Select
具有 运行 时间错误“1004”select 范围 class 方法失败。
我已经尝试遵循以前 'solved' 为使用过 select 的人提供的指南,包括放置作品sheet 名称和重新 select 等等,但是无济于事。
任何帮助或解决方法将不胜感激。
热烈的问候,
RB.
[更新]
感谢大家的帮助,一旦确定了问题,解决方案就很简单了,范围错误是尝试 select 错误 selected sheet 上的 activecell 的结果].
道德是,不要使用 select,但如果必须使用,至少要使代码紧凑。
问题在这里:
MasterPaste.Select
ActiveCell.End(xlToRight).Select
ActiveCell.Offset(0, 1).Select
ActiveCell.PasteSpecial xlPasteValues
PrevCell.Select
您已将 MasterPaste 设置为 Sheets("Parent and Child view").Range("F6")
。但是在循环的这一部分...
Sheets("Control").Select
BU.Value = ActiveCell.Value
Set PrevCell = ActiveCell
...您将 PrevCell 设置为 ActiveCell
,它位于 "Control" Worksheet 上(请参阅前面的 2 行)。然后,7 行之后,你这样做:
Sheets("Parent and Child view").Select
现在,ActiveSheet 是 "Parent and Child view",在您调用 PrevCell.Select
之前它不会改变。 PrevCell
是(见上文)工作中的 Range
sheet "Control" 而不是活跃的 sheet。 Excel 如果您尝试 select 不在活动作品 sheet.
上的 Range
将抛出 1004
您对自上而下重写的直觉是有充分理由的 - 几乎不可能破译您打算使用此代码对活动对象的所有引用和通过 selection 的导航所做的事情。我建议在不使用 Select、Active* 或任何其他全局对象的情况下自上而下重写。
我目前正在将一些旧代码重新用于循环而不是 160 个不同的宏(字面意思)。
轶事,我犯了 select 范围和使用活动单元格的主要错误(部分原因是我不知道这将如何工作),我试图通过分配 cell = cell 等来重建它,但是我不确定这将如何工作,我已经回到我所知道的。
代码如下:
Sub Refined_Code()
' Turn off the usual system hogs.
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
ActiveWorkbook.ForceFullCalculation = False
' Dim some ranges for use later on.
Dim BU As Range
Set BU = Sheets("Control").Range("C3")
Dim PorT As Range
Set PorT = Sheets("Control").Range("C8")
Dim BUStart As Range
Set BUStart = Sheets("Control").Range("D3")
Dim MasterData As Range
Set MasterData = Sheets("Parent and Child view").Range("Y6:Y180")
Dim MasterPaste As Range
Set MasterPaste = Sheets("Parent and Child view").Range("F6")
Dim BUlist As Range
Set BUlist = Sheets("Parent and Child view").Range("I106:AR116")
Dim PrevCell As Range
' Selects sheet "parent and child view" clears the data from the range, then selects the "Control' sheet.
Sheets("Parent and Child view").Select
Range("F6:R1000").Select
Selection.ClearContents
Sheets("Parent and Child view").Range("G6") = "G6"
Sheets("Control").Select
' Look up the datavalidated cell in D3 and find the right column
Range("G106:AR106").Select
Selection.Find(What:=BUStart.Value, After:=ActiveCell).Activate
ActiveCell.Select
Selection.Offset(1, 0).Select
' This will lookup the Range in D3, and commence running the macro chain.
Do While (Selection.Offset(1, 0) <> "")
Application.Calculation = xlCalculationManual
Sheets("Control").Select
BU.Value = ActiveCell.Value
Set PrevCell = ActiveCell
Application.Calculation = xlCalculationAutomatic
If InStr(1, ActiveCell, " ") = 1 Then
PorT.Value = "Target"
Else
PorT.Value = "Plan"
End If
Sheets("Parent and Child view").Select
MasterData.Copy
MasterPaste.Select
ActiveCell.End(xlToRight).Select
ActiveCell.Offset(0, 1).Select
ActiveCell.PasteSpecial xlPasteValues
PrevCell.Select
Selection.Offset(1, 0).Select
Loop
MsgBox "Finished"
End Sub
代码似乎在线崩溃
PrevCell.Select
具有 运行 时间错误“1004”select 范围 class 方法失败。
我已经尝试遵循以前 'solved' 为使用过 select 的人提供的指南,包括放置作品sheet 名称和重新 select 等等,但是无济于事。
任何帮助或解决方法将不胜感激。
热烈的问候,
RB.
[更新]
感谢大家的帮助,一旦确定了问题,解决方案就很简单了,范围错误是尝试 select 错误 selected sheet 上的 activecell 的结果].
道德是,不要使用 select,但如果必须使用,至少要使代码紧凑。
问题在这里:
MasterPaste.Select
ActiveCell.End(xlToRight).Select
ActiveCell.Offset(0, 1).Select
ActiveCell.PasteSpecial xlPasteValues
PrevCell.Select
您已将 MasterPaste 设置为 Sheets("Parent and Child view").Range("F6")
。但是在循环的这一部分...
Sheets("Control").Select
BU.Value = ActiveCell.Value
Set PrevCell = ActiveCell
...您将 PrevCell 设置为 ActiveCell
,它位于 "Control" Worksheet 上(请参阅前面的 2 行)。然后,7 行之后,你这样做:
Sheets("Parent and Child view").Select
现在,ActiveSheet 是 "Parent and Child view",在您调用 PrevCell.Select
之前它不会改变。 PrevCell
是(见上文)工作中的 Range
sheet "Control" 而不是活跃的 sheet。 Excel 如果您尝试 select 不在活动作品 sheet.
Range
将抛出 1004
您对自上而下重写的直觉是有充分理由的 - 几乎不可能破译您打算使用此代码对活动对象的所有引用和通过 selection 的导航所做的事情。我建议在不使用 Select、Active* 或任何其他全局对象的情况下自上而下重写。