2015-06-17 32 views
0

我對VBA比較新,我需要幫助。如果目標範圍變大,相交不起作用

我有一個工作表內的私人小組,我希望它自動填充鄰近動態命名範圍的公式,如果範圍的大小發生變化。

(編輯)我正在將數據從另一個工作表粘貼到這一列A-M中。我的動態範圍定義爲= OFFSET($ A $ 1,1,0,COUNTA($ A:$ A)-1,13)。如果列M中沒有數據,並且我有目的地計算列M的最後一行,則第一個If語句應該退出該子集,因爲我想填充N:O中的公式,以便它們覆蓋與列相同的行數M.

這是我的代碼,它的工作原理是如果範圍的大小變小(即如果我從底部刪除行),但不是如果它變得更大,我不能解決原因!

Private Sub Worksheet_Change(ByVal Target As Range) 

If Me.Range("M2").Value = "" Then 

    MsgBox "No Data!" 

    Exit Sub 

Else 

    If Intersect(Target, Me.Range("rngOracleInvoices")) Is Nothing Then 
    Application.EnableEvents = False 

     Dim Lrows As Long 

     Lrows = Me.Cells(Me.Rows.Count, "N").End(xlUp).Row 

     Me.Range(Me.Cells(3, 14), Me.Cells(Lrows, "O")).ClearContents 
     Me.Range("N2:O2").AutoFill Destination:=Me.Range("N2:O" & Me.Range("M" & Me.Rows.Count).End(xlUp).Row) 

    End If 

End If 

Application.EnableEvents = True 

End Sub 

我把最後一位到一個單獨的宏來測試它是否適用於自己的,由於某種原因,當我運行它,自動填充去一路攀升至第1行,並覆蓋公式,很奇怪,因爲我使用了很多代碼,而且之前從來沒有這樣做過。我做了什麼??!!

而且,如果有更好的辦法做到我會很感激,如果有人可以讓我知道它是什麼,因爲我只是拼湊,從比特我一起在論壇上:)

由於發現了自動填充,

SOPH

+1

M列是什麼? – Rory

+0

列M是我的數據範圍的最後一列,所以如果單元格M2爲空,我想退出子 –

回答

0

在此行Me.Range("N2:O2").AutoFill Destination:=Me.Range("N2:O" & Me.Range("M" & Me.Rows.Count).End(xlUp).Row)您計算在列中號所以你的最後一行,如果它是空的它會給你1和自動填充在行公式1

所以通過計算它的好列開始(我的猜測是Ø

你也可以簡單地定義一個整型變量,以測試它,如果它不如2,將其改回2,3, 4或任何你想要的。

對於您的動態範圍,我們可能需要一些精度。

而對於AutoFill,你可以只選擇手動範圍N2:02和右下角方形(拖動自動填充的一個),然後雙擊,並且只要它會自動填充,因爲在相鄰的數據細胞! (試一試;))

+0

您可以編輯您的問題並將其包含在其中,以便其他人也可以看到它! – R3uK

+0

我正在將數據從另一個工作表粘貼到這一列A-M中。我的動態範圍定義爲= OFFSET($ A $ 1,1,0,COUNTA($ A:$ A)-1,13)。如果列M中沒有數據,並且我有目的地計算列M的最後一行,則第一個If語句應該退出該子集,因爲我想填充N:O中的公式,以便它們覆蓋與列相同的行數M,那是不對的? –

+0

抱歉,我從未在此論壇上發佈過! –