2012-12-31 56 views
-1

我想知道是否有人可以幫助我。將數據移動到頂端

爲了保持給定的'輸入範圍',我試圖將一個腳本從用戶選擇的一行或多行中刪除單元格內容。然後,如果填充從第7行開始的列「A」,則將包含數據的所有行移至電子表格的頂部。

我已經把下面的代碼從行中刪除了單元格內容,但我無法弄清楚如何移動'向上移動'包含數據的行以將其放在另一個下面,省略任何空行數據之間。

Sub DelRow() 
    Dim msg 

     Sheets("Input").Protect "password", UserInterFaceOnly:=True 
     Application.EnableCancelKey = xlDisabled 
     Application.EnableEvents = False 
     msg = MsgBox("Are you sure you want to delete this row?", vbYesNo) 
     If msg = vbNo Then Exit Sub 
     With Selection 
      Application.Intersect(.Parent.Range("A:R"), .EntireRow).Interior.ColorIndex = xlNone 
      Application.Intersect(.Parent.Range("S:AD"), .EntireRow).Interior.ColorIndex = 37 
      Application.Intersect(.Parent.Range("AF:AQ"), .EntireRow).Interior.ColorIndex = 42 
      Selection.SpecialCells(xlCellTypeConstants).ClearContents 
     End With 
     Application.EnableEvents = True 

End Sub 

我已經把下面所示的「排序」微距,雖然這個工程包含數據連續兩行,它不會爲我用我的「刪除」宏行工作。

例如,如果我填充「輸入範圍」的第一行和第二行,則代碼將使用列「B」作爲排序標準正確排序電子表格。但是,如果我刪除第一行的內容,因此創建一個空白行,'Sort'腳本不會向上移動第二行。

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Application.EnableCancelKey = xlDisabled 
    With Sheets("Input") 
     If .Range("A7").Value = "" Then Exit Sub 
     .Range("B7:AS400").Sort Key1:=Range("$B$1"), _ 
     Order1:=xlAscending, _ 
     Header:=xlGuess, _ 
     OrderCustom:=1, _ 
     MatchCase:=False, _ 
     Orientation:=xlTopToBottom, _ 
     DatOption1:=xlSortNormal 
    End With 
End Sub 

我只是想知道一個人是否有可能來看看這個請,並提供如何,我需要適應我的代碼,這樣我可以添加排序功能的一些指導。

許多的感謝和親切的問候

+0

回答你的問題,然後重新閱讀您的問題...你實際上是試圖刪除整個行,或只是其中的一部分之後? –

+0

Hi @Daniel Cook,感謝您花時間回覆我的帖子。我不刪除行,因爲我需要'輸入範圍'保持不受限制,所以我將刪除單元格內容。非常感謝和親切的問候 – IRHM

回答

0

以下更多的在互聯網上搜索,我發現下面的文章: http://www.access-programmers.co.uk/forums/showthread.php?t=178521

利用這一點,我已經修改了我的「刪除行」代碼到以下是完美的作品:

Sub DelRow() 
    Dim msg 

     Sheets("Input").Protect "handsoff", UserInterFaceOnly:=True 
     Application.EnableCancelKey = xlDisabled 
     Application.EnableEvents = False 
     msg = MsgBox("Are you sure you want to delete this row?", vbYesNo) 
     If msg = vbNo Then Exit Sub 
     With Selection 
      Application.Intersect(.Parent.Range("A:R"), .EntireRow).Interior.ColorIndex = xlNone 
      Application.Intersect(.Parent.Range("S:AD"), .EntireRow).Interior.ColorIndex = 37 
      Application.Intersect(.Parent.Range("AF:AQ"), .EntireRow).Interior.ColorIndex = 42 
      Selection.SpecialCells(xlCellTypeConstants).ClearContents 
     End With 
     Application.EnableEvents = True 
      With Range("A7:AS400" & Cells(Rows.Count, "A").End(xlUp).Row) 
      .Sort Key1:=Range("B7"), _ 
      Order1:=xlAscending, _ 
      Header:=xlNo, _ 
      OrderCustom:=1, _ 
      MatchCase:=False, _ 
      Orientation:=xlTopToBottom, _ 
      DataOption1:=xlSortNormal 
End With 

End Sub 

非常感謝所有的人,提供幫助。

非常感謝和新年快樂。

親切的問候

0

要刪除基於你的代碼行,你最好的選擇是這樣的:

Selection.Delete Shift:=xlUp

如果你想確保整個行被刪除,那麼你要這樣:

Selection.EntireRow.Delete Shift:=xlUp

至於事後整理,如果是neces薩利你應該看看Range.Sort


編輯:如果你要刪除的行的一部分,但具體你可以做這樣的事情:

Range(Cells(Selection.Row,5),Cells(Selection.Row,8)).Delete Shift:=xlUp這將適用刪除對列E-H

+0

嗨@Daniel Cook,根據我原來的評論回答。我不想刪除該行,因爲我需要維護一個固定的「輸入範圍」。除非有另一種方式這樣做,我非常高興能夠展示,但我知道實現這一目標的唯一方法就是清除細胞內容。但是,如果可能,請儘可能將包含datato的行移動到頂部,以便在conatin數據之間沒有空白行。非常感謝和親切的問候。 – IRHM

+0

您好@Daniel Cook,非常感謝您回覆我。我已經把我已經包含在原始文章中的'排序'腳本放在一起。如果我添加兩個包含數據的連續行,則排序正確使用列「B」作爲排序標準。但是,如果我最初使用「刪除」宏,則單元格的內容將被正確刪除,因此會創建一個空行,但排序功能不會將第二行向上移動,從而刪除空行。我希望這有幫助。非常感謝和親切的問候 – IRHM

+0

Hi @Daniel Cook,請查看我發佈的答案。親切的問候 – IRHM

0

嘗試將標題更改爲xlNo而不是xlGuess。 Excel可能會「認爲」你有一個標題行,它不會包含在要排序的行中,所以你的空白頂行將停留在那裏。

也就是說,改變 Header:=xlGuessHeader:=xlNo

+0

嗨@Lord彼得,謝謝你花時間回覆我的帖子。請參閱我發佈的ansewer。親切的問候 – IRHM