求VBA高手 ComboBox 自动出现在单元格,选择值后自动赋值给当前单元格的问题 50
VBA代码如下:PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)TT=Cells(Target.Row,Ta...
VBA代码如下:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
TT = Cells(Target.Row, Target.Column).Address
' MsgBox TT
If Target.Column = 6 Then
With Me.ComboBox1
'.Visible = True
' .Width = Target.Width
' .Height = Target.Height
.Left = Target.Left
.Top = Target.Top
.Clear
.AutoSize = True
.AddItem "张三!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
.AddItem "李斯"
.AddItem "王武"
.AddItem "陶喆"
End With
End If
End Sub
Private Sub ComboBox1_Change()
If ComboBox1.Text <> "" Then
Range(TT) = ComboBox1.Text
'MsgBox TT
End If
'Me.ComboBox1.Visible = False
End Sub
其中TT是全局变量
Public TT As String
现在存在的问题是,我点击第6列,然后选择一个值后,再点选下一个第6列的其他单元格,下拉选框要点击2次才出现,请高手帮我解决问题.我使用的是excel 2010.
如果把ComboBox1_Change去掉就不会间隔出现下拉选框
还有另外一个问题就是怎么ComboBox1.top 调整到自动出现在单击的单元格下面而不是盖住单元格?
PS:请不要跟我说用 数据有效性做,可以用的话我一早就用了.
我的意图是做类似数据有效性的下拉列表, 除了可以选择下拉列表中的条件填充单元格,另外也可以自己填写自定义的内容到单元格里面. 展开
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
TT = Cells(Target.Row, Target.Column).Address
' MsgBox TT
If Target.Column = 6 Then
With Me.ComboBox1
'.Visible = True
' .Width = Target.Width
' .Height = Target.Height
.Left = Target.Left
.Top = Target.Top
.Clear
.AutoSize = True
.AddItem "张三!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
.AddItem "李斯"
.AddItem "王武"
.AddItem "陶喆"
End With
End If
End Sub
Private Sub ComboBox1_Change()
If ComboBox1.Text <> "" Then
Range(TT) = ComboBox1.Text
'MsgBox TT
End If
'Me.ComboBox1.Visible = False
End Sub
其中TT是全局变量
Public TT As String
现在存在的问题是,我点击第6列,然后选择一个值后,再点选下一个第6列的其他单元格,下拉选框要点击2次才出现,请高手帮我解决问题.我使用的是excel 2010.
如果把ComboBox1_Change去掉就不会间隔出现下拉选框
还有另外一个问题就是怎么ComboBox1.top 调整到自动出现在单击的单元格下面而不是盖住单元格?
PS:请不要跟我说用 数据有效性做,可以用的话我一早就用了.
我的意图是做类似数据有效性的下拉列表, 除了可以选择下拉列表中的条件填充单元格,另外也可以自己填写自定义的内容到单元格里面. 展开
1个回答
展开全部
使用动态数据有效性取代combobox可以解决上面的所有问题。
数据有效性取自工作表格2
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim s As String
Dim i As Integer
Dim n As Integer
n = Worksheets(2).Range("A500").End(xlUp).Row
If n = 1 Then
s = Worksheets(2).Range("A1")
Else
s = Worksheets(2).Range("A1")
For i = 2 To Worksheets(2).Range("A500").End(xlUp).Row
s = s & "," & Worksheets(2).Range("A" & i)
Next i
End If
If Target.Column = 6 Then
With Target.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=s
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.IMEMode = xlIMEModeNoControl
.ShowInput = True
.ShowError = True
End With
End If
End Sub
数据有效性取自工作表格2
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim s As String
Dim i As Integer
Dim n As Integer
n = Worksheets(2).Range("A500").End(xlUp).Row
If n = 1 Then
s = Worksheets(2).Range("A1")
Else
s = Worksheets(2).Range("A1")
For i = 2 To Worksheets(2).Range("A500").End(xlUp).Row
s = s & "," & Worksheets(2).Range("A" & i)
Next i
End If
If Target.Column = 6 Then
With Target.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=s
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.IMEMode = xlIMEModeNoControl
.ShowInput = True
.ShowError = True
End With
End If
End Sub
追问
数据有效性可以不能解决我的问题吧?我后面补充了,我要填的内容是2中情况,如果在下拉列表可以找到,则直接选择,如果下拉列表找不到,则自己手工填写.数据有效性不能填充我自己手工填写的内容吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询