簡體   English   中英

Excel / VBA:在一行中的單元格中循環並為每列分配相同的功能

[英]Excel/VBA: Loop through cells in a row and assign the same function for each column

我的vba知識很差(從今天開始),我正在嘗試構建以下功能。 網絡搜索未返回我想要的內容,可能是因為搜索字詞太常見了。

我有這樣的事情:

  • A1 =名稱(用作定義名稱以構建下拉列表)
  • A2 =列表條目1
  • ...
  • A10 =可能直到列表條目9

然后在vba中,我有:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DropDownName As String
DropDownName = Trim(Range("A1").Value)
With Range("A11").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
         Operator:=xlBetween, Formula1:="=" & DropDownName
End With
End Sub

然后對一整列重復此操作,唯一的變化是列表名稱和內容。 這個想法是,如果用戶添加帶有新列表的新列,它將自動將下拉菜單放置在該列的第11行中。

問題是我不知道將這段代碼應用於所有列(第11行)的簡單方法。我認為這很容易,可能是一個循環,但是我無法解決或找到解決方案! 我已經看到了一系列單元格的循環示例,但沒有看到一行中的所有單元格,或者一行中所有填充的單元格的循環示例。

我敢肯定,對於整個功能,還可以進行其他改進,例如從單元格內容自動生成列表,而不是使用“定義名稱”菜單選項(一個問題是列表長度可能會有所不同列,然后可以添加/更改/刪除新項目,因此不只是A2:A10)。 也可以隨意建議。

提前致謝。

!!!!更新!!!!

好吧,經過一些進一步的研究,在@Raystafarian的提示下,我將其更改為:

Private Sub Worksheet_Change(ByVal Target As Range)

...other code...

Dim DropDownName As String
Dim DropDownNameColumn As Long

DropDownNameColumn = ActiveCell.Column

If Target.Address <> Range(Cells(1, DropDownNameColumn), Cells(10, DropDownNameColumn)).Address Then
    DropDownName = Trim(Target.Range(Target.Column & "1").Value)

    With Target.Range(Cells(11, DropDownNameColumn)).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
            Operator:=xlBetween, Formula1:="=" & DropDownName
    End With

End If

但是,我的電子表格不會更新-如果我更改了第1行和第10行之間的B列中的單元格,則它應該使用名為B1內容的經過驗證的列表更新B11列。

相反,什么也沒有發生。

我使用它來工作,主要是我沒有用單元格位置的.Address值索引Range。

If Target.Address <> Range(Cells(10, Target.Column), Cells(30, Target.Column)).Address Then
    DropDownName = Trim(Cells(10, Target.Column))

    With Range(Cells(31, Target.Column).Address).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
            Operator:=xlBetween, Formula1:="=" & DropDownName
    End With
End If

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM