2012-01-11 116 views
0

我不知道這是否可行。在excel中對錶單進行排序

我有一個具有兩片的工作簿時, 「輸入」 和 「輸出」

USER1在 「輸入板」 填充

列A =名
列B =年齡
C列=位置
列d =海特
..
..

然後在 「輸出」 片列A爲S等從列A中的值複製的「輸入」片材和用戶2使用用戶1已經進入

列B =眼睛顏色
C欄=頭髮的顏色
列d =數的值更詳細地填充手指
..
..

所以我希望你的想法,用戶1進入一些細節,然後用戶2確實與一些工作,然後在「輸出紙張進入更多的細節。列A是將這兩者鏈接在一起的「索引」值。

我的問題是,如果用戶2輸入了詳細信息,然後返回到「輸入」工作表並進行排序,「輸出」工作表中的值將不再匹配,因爲列A將更改爲反映排序操作,其餘的將保持不變。

是否可以鏈接工作表之間的行,或者創建將在兩個工作表上運行並保持一致性的排序代碼。

這不一定適用於用戶嘗試的臨時搜索,我只想在「輸入」表單上放置一個按鈕,例如「按名稱排序」,「按位置排序」等。

問候

亞倫

回答

1

如果您是確定與具有預設排序,一個解決方案是從片A和片B兩個值鏡像到片C,然後只是那種,並重新使用新的排序結果填充表A和B中的值。

I.e.

Sheet1     | Sheet 2       | Sheet 3 (Hidden and named) 
         |         | 
Name  Age etc,  | Eye Colour Hair colour etc. | =Sheet1!A1 ... =Sheet2!A1 

那麼你的排序按鈕將調用子是這樣的:

Dim rngSortRange As Range, rngStartCell As Range, rngEndCell As Range 
Set rngStartCell = Worksheets("Sheet_3_Name_Goes_Here").Range("A1") 
Set rngEndCell = Worksheets("Sheet_3_Name_Goes_Here").Range(_ 
    rngStartCell.End(xlToRight).Column, _ 
    rngStartCell.End(xlDown).Row) 
Set rngSortRange = Worksheets("Sheet_3_Name_Goes_Here").Range(rngStartCell, rngEndCell) 
rngSortRange.Sort Key1:=<Column Number Here>, Order1:=xlAscending, Header:=xlYes 
rngSortRange.Range(rngStartCell, _ 
        Worksheets("Sheet_3_Name_Goes_Here").Range(_ 
        Worksheets("Sheet 1").Range("A1").End(xlToRight).Column, _ 
        rngEndCell.Row _ 
        ) _ 
        ).Copy 
Worksheets("Sheet 1").Paste 
rngSortRange.Range(Worksheets("Sheet_3_Name_Goes_Here").Range(
        rngStartCell.Column + Worksheets("Sheet 1").Range("A1").End(xlToRight).Column, _ 
        rngStartCell.Row _ 
        ), _ 
        rngEndCell _ 
        ).Copy 
Worksheets("Sheet 2").Paste 

這可能需要一些工作(例如,你可能需要事後重置表Sheet 3,您可能需要pastevalues而不僅僅是貼,否則你最終會粘貼自引用公式),但基本思想應該起作用。

+0

我看着這個,但爲了讓我想要這麼多的代碼,如果它需要改變 – DevilWAH 2012-01-23 16:51:12