2017-04-09 52 views
0

我有一個用戶窗體在工作表上移動對象(員工姓名),以便管理人員可以將員工移動到不同的部門(工作表上的不同行組)。我遇到的問題是,當我定義屬於員工姓名的初始行,然後通過Selection.Cut和Selection.Insert Shift:= xlDown移動該行時,我無法再調用員工行的新位置,因爲這已經改變,任何後續的代碼行仍然可以識別userform代碼中標識的初始僱員行。定義變量(長)在子程序內更改未更新

Dim UserRow As Long 
Dim UserMatrix As String 

Dim CCIRow As Long 
Dim CCIRange As String 
Dim CEMRow As Long 
Dim CEMRange As String 
Dim MANRow As Long 
Dim MANRange As String 

UserRow = Application.WorksheetFunction.Match(UserName, Range("A1:A300"), 0) 
UserMatrix = "B" & UserRow 

    CCIRow = Application.WorksheetFunction.Match("CCI/MDI", Range("A1:A300"), 0) + 1 
    Let CCIRange = "A" & CCIRow 
    CEMRow = Application.WorksheetFunction.Match("CE/Marketing", Range("A1:A300"), 0) + 1 
    Let CEMRange = "A" & CEMRow 
    MANRow = Application.WorksheetFunction.Match("Management", Range("A1:A300"), 0) + 1 
    Let MANRange = "A" & MANRow 
    OTHRow = Application.WorksheetFunction.Match("Other", Range("A1:A300"), 0) + 1 

Sheet3.Rows(UserRow).Select 
Selection.Cut 

If UserDept = "CCI/MDI" Then 
Sheet3.Rows(CCIRow).Select 
    Selection.Insert Shift:=xlDown 

    Sheet3.Range(UserMatrix).Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Selection.Clear                

    Sheet3.Range("MATRIX_ROW").Select 
    Selection.Copy                

    Sheet3.Range(UserMatrix).Select 
    Selection.PasteSpecial PASTE:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

Sheet3.Range(CCIRange).Select 
    Range(ActiveCell, Cells(ActiveCell.End(xlDown).Row, ActiveCell.End(xlToRight).Column)).Sort _ 
     key1:=Range(CCIRange), order1:=xlAscending 
End If 

If UserDept = "CE/Marketing" Then 
Sheet3.Rows(CEMRow).Select 
    Selection.Insert Shift:=xlDown 

    Sheet3.Range(UserMatrix).Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Selection.Clear                

    Sheet3.Range("MATRIX_ROW").Select 
    Selection.Copy                

    Sheet3.Range(UserMatrix).Select 
    Selection.PasteSpecial PASTE:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

Sheet3.Range(CEMRange).Select 
    Range(ActiveCell, Cells(ActiveCell.End(xlDown).Row, ActiveCell.End(xlToRight).Column)).Sort _ 
     key1:=Range(CEMRange), order1:=xlAscending 
End If 

If UserDept = "Management" Then 
Sheet3.Rows(MANRow).Select 
    Selection.Insert Shift:=xlDown 

    Sheet3.Range(UserMatrix).Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Selection.Clear 

    Sheet3.Range("MATRIX_ROW").Select 
    Selection.Copy 

    Sheet3.Range(UserMatrix).Select 
    ActiveCell.Offset(0, 1).Select 
    Selection.PasteSpecial PASTE:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

Sheet3.Range(MANRange).Select 
    Range(ActiveCell, Cells(ActiveCell.End(xlDown).Row, ActiveCell.End(xlToRight).Column)).Sort _ 
     key1:=Range(MANRange), order1:=xlAscending 
End If 

我的問題:有沒有我可以在子程序中更新定義維度變量(即點心)的價值,因爲它改變了什麼辦法?謝謝你的幫助!

+0

THANK YOU!移動後重置維度正是解決了我的問題!在我開發的應用程序中有很多事情發生,而這個小snipet讓我非常沮喪。我欠你一杯啤酒,我的朋友! – markddelorme

+0

我已經發布了我的評論作爲答案,以防其他人在將來遇到同樣的問題。 – YowE3K

回答

0

如果您問的是否可以更改UserRow的值,那麼答案是「是」。 您只需爲其分配粘貼位置的行號值即可。

我很難理解代碼有這麼多Select,ActiveCellSelection位,但它可能類似於UserRow = CCIRow

(或者,你可以通過在移動後再次使用UserRow = Application.WorksheetFunction.Match(UserName, Range("A1:A300"), 0)聲明重置。)