使用下拉列表更改列中的所有单元格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用下拉列表更改列中的所有单元格相关的知识,希望对你有一定的参考价值。

我正在尝试使用下拉列表替换列中的所有单元格以使用excel宏。我也在尝试使用动态范围,因为我不知道列表有多长。这是我现在的代码:

Dim sht As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range

Set sht = Worksheets("*Name of main sheet*")
Set StartCell = Range("A1")

'Find Last Row and Column
LastRow = sht.Cells(sht.Rows.Count, StartCell.Column).End(xlUp).Row
LastColumn = sht.Cells(StartCell.Row, sht.Columns.Count).End(xlToLeft).Column

'Select Range

Worksheets("*Name of main sheet*").Activate

'replace "J2" with the cell you want to insert the drop down list
With Range(StartCell, sht.Cells(LastRow, LastColumn))
    .Delete
    'replace "=A1:A6" with the range the data is in.
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
         Operator:=xlBetween, Formula1:="=Sheet1!A1:A6"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With

我在一个名为Sheet1的单独选项卡中创建了包含所有下拉选项的列表。

答案

.Validation的末尾添加With Range(StartCell, sht.Cells(LastRow, LastColumn))并使用$来保持行参考固定

所以整个With-End块成为:

With Range(StartCell, sht.Cells(LastRow, LastColumn)).Validation
    .Delete
    'replace "=A1:A6" with the range the data is in.
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
         Operator:=xlBetween, Formula1:="=Sheet1!A$1:A$6"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With

如果你需要保持下拉列表动态与Sheet1列A不是空值,那么你可以如下:

Dim LastRow As Long
Dim LastColumn As Long

Dim sourceSht As Worksheet
Set sourceSht = Worksheets("Sheet1")

With Worksheets("Name of main sheet")
    LastRow = .Cells(.Rows.Count, 1).End(xlUp).row
    LastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
    With .Range("A1", .Cells(LastRow, LastColumn)).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
             Operator:=xlBetween, Formula1:="=" & sourceSht.name & "!" & sourceSht.Range("A1", sourceSht.Cells(sourceSht.Rows.Count, 1).End(xlUp)).Address(True, False)
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End With

以上是关于使用下拉列表更改列中的所有单元格的主要内容,如果未能解决你的问题,请参考以下文章

将公式应用于单元格下拉列表的脚本

从相邻下拉列表的单元格中输入数据时,如何删除填充颜色?

根据所选列中的文本调整行高

下拉列表内容怎么设置?

有没有办法在 ag 网格中的 2 个单元格渲染器之间传递数据?

使用 Google 表格下拉菜单更改单元格背景颜色而不是文本