Excel VBA - 多级动态数据有效性设置实例集锦(2)

2019-08-01 23:55

Set r1 = Sheet2.[a:a].Find(bm, , , 1) If Not r1 Is Nothing Then n = r1.Row

If Sheet2.Cells(n, 1).MergeArea.Rows.Count > 1 Then n1 = Sheet2.Cells(n, 1).MergeArea.Rows.Count Arr1 = Sheet2.Cells(n, 2).Resize(n1, 1) ReDim Arr2(1 To n1, 1 To 1) [c5].Resize(n1, 1) = Arr1 For i = 1 To n1

Set r2 = Sheets(yf).[a:a].Find(Arr1(i, 1), , , 1) If Not r2 Is Nothing Then

Arr2(i, 1) = Sheets(yf).Cells(r2.Row, 2) End If Next

[d5].Resize(n1, 1) = Arr2 End If End If Else

Dim m&

m = Sheets(yf).[b65536].End(xlUp).Row: n = 4 Arr1 = Sheets(yf).Cells(2, 1).Resize(m - 1, 2) For i = 1 To UBound(Arr1) If Arr1(i, 1) = \ n = n + 1

Cells(n, 4) = Arr1(i, 2) End If Next End If

Sheet1.Activate End Sub

5,多条件一对多查询动态数据有效性 by:山菊花

‘http://club.excelhome.net/viewthread.php?tid=375115&extra=&page=1 ‘山菊花_多条件一对多查询数据有效性代码.xls

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub

If Target.Row < 3 Or Target.Column = 1 Or Target.Column > 5 Then Exit Sub If Target = \Dim nRow%, cTxt$, pm$, nL%

pm = Range(\With Sheets(\数据源\

nRow = .Range(\arr = .Range(\dm = .Range(\

If Target.Column = 5 Then

nL = Sheets(\数据源\End If End With

For i = 1 To nRow - 2

Select Case Target.Column Case 2

If InStr(arr(i, 3), pm) > 0 Then If cTxt = \ cTxt = arr(i, 1) Else

cTxt = \现货,途中\ Exit For End If End If Case 3

If InStr(arr(i, 3), pm) > 0 And arr(i, 1) = Target.Value Then cTxt = cTxt & IIf(cTxt = \ End If Case 4

If InStr(arr(i, 3), pm) > 0 And arr(i, 1) = Target.Offset(, -1).Value And arr(i, 2) = Target.Value Then

For j = 4 To 9

If arr(i, j) <> \

cTxt = cTxt & IIf(cTxt = \ Exit For End If Next End If Case 5

If InStr(arr(i, 3), pm) > 0 And arr(i, 1) = Target.Offset(, -2).Value And arr(i, 2) = Target.Offset(, -1).Value And arr(i, nL) <> \ cTxt = arr(i, nL) Exit For End If End Select Next

If InStr(cTxt, \

With Target.Offset(, 1).Validation .Delete

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:=cTxt End With End If

Target.Offset(, 1) = Split(cTxt & \End Sub

‘http://club.excelhome.net/viewthread.php?tid=300082&extra=&page=1 Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range, nRow%, L%, R%, cTxt$, ds, m Set ds = CreateObject(\定义字典 On Error Resume Next

'Application.EnableEvents = False ’如果不需要自动填充,请删除该行代码前面的注释符号 For Each Rng In Target

L = Rng.Column '当前单元格列号 R = Rng.Row '当前单元格行号 If R >= 12 And L <= 4 Then

If Rng = \当清除单元格数据时 With Rng.Offset(, 1).Resize(1, 5 - L)

.Validation.Delete '删除右向所有单元格的数据有效性 .ClearContents '清除右向所有单元格内容 End With Else

nRow = Sheets(\资料1\资料行数 zl = Sheets(\资料1\把资料保存到数组z1中 For i = 1 To nRow '循环数组各行

If (Range(\(Range(\\

cTxt = zl(i, L + 1)

ds.Add cTxt, m + 1 '把数据增加到字典中 If Err.Number = 0 Then m = m + 1 End If Err.Clear End If Next

cTxt = Join(ds.Keys, \

Rng.Offset(, 1).Validation.Delete '删除数据有效性 If m > 0 Then

With Rng.Offset(, 1).Validation .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,

Operator:=xlBetween, Formula1:=cTxt '设置数据有效性 End With

Rng.Offset(, 1).Value = Split(cTxt, \自动填充右一列单元格 Else

Rng.Offset(, 1).Resize(1, 5 - L).ClearContents '清除右边数据 End If

'如果不需要自动填充,则删除上一行代码,并解除注释代码

' Rng.Offset(, 1).ClearContents ’如果不需要自动填充,请删除这段代码前面的注释符号'

' For i = L + 2 To 5 ' With Cells(R, i)

' .Validation.Delete ' .ClearContents ' End With ' Next End If End If Next

'Application.EnableEvents = True’如果不需要自动填充,请删除该行代码前面的注释符号 End Sub

6,在选中Excel单元格时自动展开数据有效性的下拉菜单 by:ningyuanchao小蜜蜂

‘http://club.excelhome.net/thread-559942-1-1.html

Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column < 3 Then SendKeys \End Sub

7,不同工作簿的数据有效性by:zhaogang1960

‘http://club.excelhome.net/thread-565913-1-1.html ‘装配排产.xls

Dim arr, d As Object

Private Sub Workbook_Open() Dim cnn As Object Dim SQL As String, i&

Set cnn = CreateObject(\

cnn.Open \

Source=\装配产能.xls\请自己修改路径 SQL = \ arr = cnn.Execute(SQL).GetRows cnn.Close

Set cnn = Nothing

Set d = CreateObject(\ For i = 0 To UBound(arr, 2) d(arr(1, i)) = i Next

With Sheet1 .[iv:iv] = \

.[iv1].Resize(d.Count) = WorksheetFunction.Transpose(d.Keys) With .[b2:b65536].Validation .Delete

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=\ End With End With End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name <> \ If Target.Count > 1 Then Exit Sub

If Intersect(Target, [b2:b65536]) Is Nothing Then Exit Sub If Target = \

If d Is Nothing Then Workbook_Open

Target.Offset(, -1) = arr(0, d(Target.Value)) Target.Offset(, 2) = arr(3, d(Target.Value)) Target.Offset(, 3) = arr(5, d(Target.Value)) End Sub

8,2级动态数据有效性(字典+数组)

‘2013-7-1

Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Target.Column > 2 Then Exit Sub

Dim d, i&, Myr&, Arr, r%, Arr1(), cp$, ks&, js&, j& Set d = CreateObject(\Myr = [h65536].End(xlUp).Row Arr = Range(\ For i = 1 To UBound(Arr) If Arr(i, 1) <> \

d(Arr(i, 1)) = d(Arr(i, 1)) & Arr(i, 2) & \


Excel VBA - 多级动态数据有效性设置实例集锦(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:梯度、散度、旋度的关系

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: