2016-12-05 85 views
0

我在下面的代碼中設置x不起作用。 Set f所做的很奇怪。我不知道爲什麼,我在我的代碼中間,這根本不起作用。我的觀點與Set f相同。任何想法爲什麼?Object required vba

Sub Macro2() 

Dim WsOuput As Worksheet 
Dim WsScenarios As Worksheet 
Dim ScenarioIDrow As Long 
Dim ScenarioIDColumn As Long 
Dim ScenarioIDinScenarios As Long 
Dim ScenarioIDinScenariosC As Long 
Dim p As String 
Dim q As String 
Dim x As Range 
Dim z As String 
Dim r As String 
Dim RgnScenarioOutput As Range 
Dim RgnScenarioScenario As Range 
Dim Findsomething As Range 
Dim FindAgain As Range 
Dim lLastRow As Long 
Dim f As Range 
Dim fAgainAddress As Range 

Set WsOutput = Worksheets("Output") 
Set WsScenarios = Worksheets("Scenarios.New") 
lLastRow = WsOutput.Cells(Rows.Count, "B").End(xlUp).Row 
r = WsOutput.Cells(lLastRow, 2).Address(RowAbsolute:=False, ColumnAbsolute:=False) 
Range("B22").Select 
    Selection.Copy 
    Sheets("Scenarios.New").Select 
    Columns("A:A").Select 

    Set f = Selection.Find(What:=Worksheets("Output").Range("B22").Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
     :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
     False, SearchFormat:=False) 

    f.Select 
    q = f.Address 
    Set x = Cells.FindNext(After:=ActiveCell).Activate 
    x.Select 
    z = x.Address 

    Range("F21:M21").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Output").Select 
    Range("AFI35").Select 
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=True 
End Sub 
+3

是'Cells.FindNext(後:= ActiveCell).Activate'返回一個對象? –

+0

FindNext.Activate是正確的語法嗎? – Chrismas007

+0

您應該重寫所有這些,而不是訴諸於'.Select'和'.Activate' –

回答

5

正如評論安德魯昌(和Chrismas007),你的問題是你Activate方法。

A Range.Activate命令不會返回一個對象(它只是激活一些東西),所以它不可能Set東西到Range.Activate

你可能想改變:

Set x = Cells.FindNext(After:=ActiveCell).Activate 

到:

Set x = Cells.FindNext(After:=ActiveCell) 
If Not x Is Nothing Then x.Activate 
+0

不愛我的語法評論? :-P – Chrismas007

+0

@ Chrismas007 - 在我的辯護中,我在你發表評論前就開始輸入答案 - 我會修改我的答案,以便給你信用;) – YowE3K

+0

@ Mat'sMug - 我很滿意你所做的修改,但嚴格來說不需要「維護原始功能」 - 無論如何通過'Set'語句後面的'x.Select'語句來實現原始功能。 – YowE3K

2

您可以使用此

Dim x As Range 
Dim f As Range 
Set f = Selection.Find(What:=Worksheets("Output").Range("B22").Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
     :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
     False, SearchFormat:=False) 

    f.Select 
    q = f.Address 
    Set x = Range("A:A").FindNext(f) 
    x.Select 
+0

這工作完美。謝謝! –

+1

@LeandroMoreira指出,如果FindNext找不到任何東西,'x.Select'會引發一個運行時錯誤91。另一個答案解決了這個問題。 –

+0

確保在x返回null/Nothing時正確處理它。由於http://stackoverflow.com/users/1188513/mats-mug已經提到你可能會遇到錯誤91. – PankajKushwaha

相關問題