【发布时间】:2013-03-13 11:29:05
【问题描述】:
我们目前在 Excel 工作簿中有一些 VB 代码,它允许选择多个数据验证(列表下拉列表)选项,然后对于从列表中选择的每个下拉项目,它会在行尾输出选项,每列一个选项。
即:从下拉列表中选择 Apples、Bananas 和 Cherries 将输出 Apples |香蕉 | Cherries(其中 | 是列分隔符)位于第一个单元格为空的行的末尾。
我们的代码是:-
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo exitHandler
Dim rngDV As Range
Dim iCol As Integer
If Target.Count > 1 Then GoTo exitHandler
On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler
If rngDV Is Nothing Then GoTo exitHandler
If Intersect(Target, rngDV) Is Nothing Then
'do nothing
Else
Application.EnableEvents = False
If Target.Column = 3 Then
If Target.Value = "" Then GoTo exitHandler
If Target.Validation.Value = True Then
iCol = Cells(Target.Row, Columns.Count).End(xlToLeft).Column + 1
Cells(Target.Row, iCol).Value = Target.Value
Else
MsgBox "Invalid entry"
Target.Activate
End If
End If
End If
exitHandler:
Application.EnableEvents = True
End Sub
然而,我们希望在此 VB 代码中进行修改,而不是使用选定的数据验证填充行尾的单元格。我们想填充列标题与从下拉列表中选择的选项匹配的列下的单元格。
即:在下拉列表中选择的苹果将填充该行上标有“苹果”的列下的单元格。在下拉列表中选择的樱桃将填充该行上标有“樱桃”的列下的单元格。理想情况下,通过填充,我们会为该单元格着色或在其中放置一个 X,而不是重复所选项目的名称。
如果有人能建议我们在上面的代码中需要修改什么,将不胜感激。
【问题讨论】:
-
你能发一个示例文件吗?
-
如何发布示例文件?我应该把它上传到 Dropbox 或类似网站并提供一个链接吗?
-
是的 - Dropbox 很好。
-
给你布雷特。谢谢参观。如果您查看“已排序”工作表上的代码,您将看到 VBA 代码。您将看到 C 列包含数据验证,我可以在其中选择多个选项,在此示例中,基于此标准,我希望自动填充/着色相应的列 D-M(尽管最终这里会有很多列)。按照目前的情况,它将每个选择的选项添加到下一个可用的空闲列 (AI),然后每列添加一个选项。 dl.dropbox.com/u/8388505/guest-posts.xlsx谢谢
-
#Update# 我现在已经删除了上面的链接文件(我认为它没有包含代码,因为我将它保存为 .xls)。