簡體   English   中英

引用先前變暗的活動單元時發生錯誤(運行時錯誤“ 1004”)

[英]Error when referring to a previous dimmed activecell (Run-time Error '1004')

我目前正在重新使用一些較舊的代碼以使其循環,而不是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,但是如果必須的話,請至少使代碼緊密。

問題在這里:

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 ,該Range 不是活動表 如果您嘗試選擇不在活動工作表上的Range ,則Excel將拋出1004。

您對自上而下進行重寫的直覺是非常有必要的-幾乎不可能破譯該代碼打算對所有對活動對象的引用以及通過選擇進行導航所做的工作。 我建議不使用Select,Active *或任何其他全局對象進行自上而下的重寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM