引用前一个调暗活动单元时出错(运行时错误“1004”)

我目前正在重新使用一些旧的代码作为循环,而不是160个不同的macros(字面上)。

有趣的是 ,我犯了select范围和使用活动单元格的主要罪恶(部分原因是我不知道这将如何工作,否则),我试图通过分配单元格=单元格等重build,但我不确定这将如何工作,我已经回到了我所知道的。

代码如下:

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方法失败。

我已经尝试了以前使用select的“已解决”指南,包括放置工作表名称并重新select此等,但无济于事。

任何帮助或解决方法将非常感激。

温暖的问候,

RB。

[更新]

感谢帮助的人,解决方法很简单,一旦问题被确定,范围错误是尝试select不正确select的工作表上的活动单元格的结果。

道德是,不要使用select,但如果你必须,至less使你的代码严密。

问题在这里:

 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 (请参阅前两行)。 然后,7行后,你这样做:

 Sheets("Parent and Child view").Select 

现在,活动工作是“父级和子级视图”,在调用PrevCell.Select之前不会更改。 PrevCell是(见上文)工作表上的Range “控制” ,而不是活动工作表 。 如果您尝试select不在活动工作表上的Range ,Excel将抛出1004。

你对自上而下重写的本能是很有保证的 – 这是几乎不可能破译你打算这个代码与所有对活动对象的引用和通过select进行导航。 我build议不要使用Select,Active *或任何其他全局对象来重写。