我需要能夠在用戶嘗試自動填充列時執行某些代碼,或者能夠在執行Worksheet_Change期間檢測到它是自動填充。我有一些代碼可以改變自動填充單元格的值。問題在於,每次我一次編輯多個單元格時,此代碼就會觸發。VBA Excel自動填充事件
Private Sub Worksheet_Change(ByVal Target As range)
If Target.Rows.count > 1 Then
我需要能夠在用戶嘗試自動填充列時執行某些代碼,或者能夠在執行Worksheet_Change期間檢測到它是自動填充。我有一些代碼可以改變自動填充單元格的值。問題在於,每次我一次編輯多個單元格時,此代碼就會觸發。VBA Excel自動填充事件
Private Sub Worksheet_Change(ByVal Target As range)
If Target.Rows.count > 1 Then
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Or Target.Column <> 1 Then Exit Sub
MsgBox Target.Address ' your code goes here
End Sub
所以,如果一個以上的小區改變的代碼將無法激活,或者如果它不列發生一個
據我所知,我可能是錯的,但有沒有簡單的方法,你可以捕獲自動填充事件。
Target.Rows.count
是檢查自動填充是否爲不可靠的方式,因爲在許多情況下Target.Rows.count
將大於1。例如
如果你真的想要陷害自動填充,那麼你必須處理所有上述情況,並消除縮小範圍以確定的可能性它確實是一個Autofill事件。
在更改事件期間您有2個區域,大部分選定區域的大小與正在更改區域的大小相匹配。在DragFill操作期間,選擇區域完全包含正在更改的區域,但也包含作爲拖動填充源的區域。源也填充選定區域的一個邊緣。
Application.SheetChange += Sheet_Change;
private void Sheet_Change(object Sh, Range Target)
{
//See if the size of the target matches the size of the current selection.
//Selection size must be greater that one cell
//Changed cells must be in the same dimension as the unchanged cells. e.g. unchanged area must fill one edge of the rectangle
var selection = (Application.Selection as Range);
Rect selectionArea = new Rect(selection.Column, selection.Row, selection.Columns.Count, selection.Rows.Count);
Rect changedArea = new Rect(Target.Column, Target.Row, Target.Columns.Count, Target.Rows.Count);
var isDragFill = false;
if (selectionArea.Contains(changedArea)
&& (selectionArea.Width > 1 || selectionArea.Height > 1)
&& (selectionArea.Width == changedArea.Width || selectionArea.Height == changedArea.Height)
&& selectionArea != changedArea)
isDragFill = true;
if (!blockNextChange)
{
if (isDragFill)
{
//Re-entrancy check in the case the value changes in this block
blockChanges = true;
bool isHorizontal = selectionArea.Height == changedArea.Height;
{
if (isHorizontal)
{
DragFillHorizontal(Target, selection, selectionArea, changedArea);
}
else
{
DragFillVertical(Target, selection, selectionArea, changedArea);
}
}
blockChanges = false;
}
}
}
在我的情況下,沒有公式附加,現在的基本情況是用戶拖動頭(這是一些字符串)。我只是檢查是否有一列,多行和所有行都具有相同的值。 – FreeCandies
只有存在公式時,自動填充功能纔有用。試試這個...輸入一些東西,比如說單元格A1到A15。現在在單元格B1中輸入一些內容,並在光標變爲「+」號時雙擊單元格的右下角;) –