引用前一个调暗的activecell时出错(运行时错误'1004')

时间:2016-04-01 03:48:29

标签: excel vba excel-vba select runtime-error

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

轶事 ,我犯了选择范围和使用活动细胞的主要罪过(部分原因是我不知道这会如何起作用),我试图通过分配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的用户提供以前的“已解决”指南,包括放置工作表名称并重新选择此等,但无济于事。

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

热烈的问候,

RB。

[更新]

感谢帮助人员,一旦发现问题,解决方案很简单,范围错误是尝试在错误选择的工作表上选择活动单元格的结果。

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

1 个答案:

答案 0 :(得分:1)

问题在于:

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,它位于“控制”工作表上(参见前面的2行)。然后,7行之后,你这样做:

Sheets("Parent and Child view").Select

现在,Active Sheet 是“父和子视图”,在您调用PrevCell.Select之前不会更改。 PrevCell是(见上文)工作表“控件”上的Range,它不是活动工作表。如果您尝试选择活动工作表上没有的Range,Excel将抛出1004。

你对自上而下重写的本能是有道理的 - 几乎不可能破译你想要的代码所做的所有对活动对象的引用以及通过选择导航的内容。我建议在不使用Select,Active *或任何其他全局对象的情况下自上而下重写。