2016-02-28 76 views
1

我已經爲VBA中的一個命令按鈕編寫了代碼,該代碼使用(列)範圍作爲輸入並具有(列)範圍作爲輸出。我想爲引用其他列的其他命令按鈕使用相同的代碼。我不想重複整個代碼,因爲只有列的引用發生更改。VBA - 使用子或函數

我不能找出如何定義此代碼作爲函數或在其上執行B,C,d的列代碼其他命令按鈕的代碼,我不能稱之爲「子等

這是代碼。它消除重複,並添加字符串「重命名」到列表中的每個元素:

Private sub rename_column_A_Click() 

    'copy values of sheet1 column A to active sheet 
    Range("A1:A30").Value = Worksheets("sheet1").Range("A1:A30").Value 

    'remove duplicates, keeping first value as column header 
    Columns("A:A").Select 
    ActiveSheet.Range("$A$2:$A$30").RemoveDuplicates Columns:=Array(1), _ 
    Header:=xlNo 
    Range("A" & 2).Select 

    'add string to each element of list 
    For i = 2 To 30 
     If Not Range("A" & i).Value = "" Then 
      Range("A" & i).Value = "rename " & Range("A" & i).Value 
     End If 
    Next i 

End Sub 
+0

爲什麼不聲明你的子,所以它需要一個範圍參數? –

回答

0

像約翰·科爾曼建議,你可以有你的小組採取一系列參數:

Private Sub rename_column_A_Click() 
    ProcessRange "A" 
End Sub 
Private Sub rename_column_B_Click() 
    ProcessRange "B" 
End Sub 

Sub ProcessRange(ColAddress As String) 
    'copy values of sheet1 column A to active sheet 
    Range(ColAddress & "1:" & ColAddress & "30").Value = Worksheets("sheet1").Range(ColAddress & "1:" & ColAddress & "30").Value 

    'remove duplicates, keeping first value as column header 
    ActiveSheet.Range("$" & ColAddress & ":$" & ColAddress & "$30").RemoveDuplicates Columns:=Array(1), Header:=xlNo 

    'add string to each element of list 
    For i = 2 To 30 
     If Not Range(ColAddress & i).Value = "" Then 
      Range(ColAddress & i).Value = "rename " & Range(ColAddress & i).Value 
     End If 
    Next i 
End Sub 

我取下的兩個Select代碼行。我不認爲你需要他們。

+0

這個解決方案非常有用。非常感謝。 – Karen

+1

嗨@凱倫如果這個或任何答案已經解決了您的問題,請點擊複選標記考慮[接受它](http://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 – ZwoRmi

+0

Hi @ZwoRmi,明白了。謝謝你的提示。 – Karen