【发布时间】:2021-08-17 07:27:12
【问题描述】:
我在这里有点新,但这是我想要做的。
我有一本书,假设它是一本用于库存的仓库簿,我们的企业有不同的部门,我有包含所有货物的主表和一些涵盖这些部门的表,用于在它们之间分配货物。
我的想法是为书中的每个项目类型设置一个下拉列表,用于单独的部门,所以我需要宏来为每个项目分配/重新分配命名范围。
I have 2 columns first with stock number and second with serial number ,我需要将所有相同的序列号放入其中一个库存号的命名范围内。如果我有两个或多个序列号,我需要将一组序列号放入一个库存号的指定范围内。 库存编号在 C 列,序列号在 D 列 我试过这段代码
Private Sub CommandButton2_Click()
Dim LastRow As Long
Dim r As Range
LastRow = Cells(Rows.Count, "C").End(xlUp).Row
For Each r In Range("C2:C" & LastRow)
Range(r.Offset(0, 1), r.Offset(0, 1)).Name = r.Value
Next r
End Sub
但这并不是真正的工作,并且每个指定的库存编号范围只分配一个序列号
================================================ ================== 所以我运行了你在更新版本中提出的这段代码并遇到了一些问题
Private Sub CommandButton2_Click()
Dim this As Worksheet: Set this = Sheets("ALFA")'renamed this for my book'
Dim that As Worksheet: Set that = Sheets("STORAGE")'renamed that for my book'
serialNumbers = that.Range(that.Columns(3), that.Columns(4))'Could not find method Unique(and there is no mentions about'
'it in MS documentation) for Application object so i changed it to just Range'
For r = 2 To this.UsedRange.Rows.Count
buffer = ""
comma = ""
stockNumber = this.Cells(r, 3)
For x = 2 To UBound(serialNumbers)
If serialNumbers(x, 1) = stockNumber Then
buffer = buffer & comma & serialNumbers(x, 2)
comma = ","
End If
Next
this.Cells(r, 4).Validation.Delete
this.Cells(r, 4).Validation.Add _'After doing everything it strucks with Run time error 1004
Type:=xlValidateList, _ '/Application-defined or object-defined error in this
AlertStyle:=xlValidAlertStop, _'hole'
Formula1:=buffer 'block'
Next
End Sub
有时代码只会将我的 excel 应用程序挂起至少 3 分钟,我认为这是因为单元格可以查找没有限制,最终它会尝试对 D:D 中的所有单元格进行验证检查
【问题讨论】:
-
不确定每个命名范围的多个值和覆盖值是什么意思。它应该只为
D2:D & LastRow中的每个单元格提供C中相应单元格的名称。不过,我不确定这会有什么帮助。 -
我的意思是,如果每个类别的值不是单一的,则每个命名范围都应该有一个数组。我们可以在 DDG_33 的示例中看到这一点
-
您为什么要找到 LastCol?我没看到你用它。据我所知,您的代码将遍历 C2:C 中的每个单元格,然后在 (D) 上方的一列上创建一个命名范围,范围的名称是 C 列中的任何内容。您是否正在尝试做?例如,如果 C2 包含“test”,则此代码将在 D2 调用 test 中创建一个命名范围,您可以引用它并使用该引用(例如,公式中的 =test 或 Range("test").value ) 将返回 D2 中的任何内容,但此代码不会更改 D2 的值,只是命名它。
-
我从别人的代码中使用过 LastCol,我同意这是不必要的。它满足了多列的需求,但不是我的需求
-
@Chris Strickland 另外,我的代码正如你所说,但每个命名范围有超过 1 个值,所以它只是替换最后一个值。