Sub Sample()
Dim ws As Worksheet
Dim dvRng As Range, rng As Range
Dim strList As String
Dim MyAr() As String
Set ws = ThisWorkbook.Sheets("Sheet1")
Set dvRng = ws.Range("A1") ' Case A
'Set dvRng = ws.Range("C1") ' Case B
'Set dvRng = ws.Range("E1") ' Case C
'~~> Get the formula in the data validation
strList = dvRng.Validation.Formula1
'~~> Check if it has an = sign for Case A and Case C
If InStr(1, strList, "=") Then
strList = Replace(strList, "=", "")
Set rng = Range(strList)
rng.Copy Sheet2.Range("A1")
Else
'~~> Case B
If InStr(1, strList, ",") Then
MyAr = Split(strList, ",")
Sheet2.Range("A1:A" & UBound(MyAr) + 1).Resize.Value = Application.Transpose(MyAr)
Else
Sheet2.Range("A1").Value = strList
End If
End If
End Sub
2 回答
在“数据验证”列表中,您可以拥有这3种方案 .
A) 一个公式,它引用同一工作表中的范围
B) 使用逗号直接键入的列表
C) 一个公式,它引用来自相同/另一个工作表的命名范围
现在我们需要迎合所有三种情况,以防我们想要检索该列表 .
要访问数据验证单元列表,您必须使用
Rng.Validation.Formula1
看到这段代码 .
我已对代码进行了评论,因此您不应该遇到任何问题 . 如果你这样做,那么干脆问:)
除非有人有更好的想法,否则我已将每个项目选择到不同的单元格中,然后将其复制到csv文件中,我可以将其导入到表格中 .