ngmcuongbl
Thành viên chính thức


- Tham gia
- 19/12/08
- Bài viết
- 73
- Được thích
- 2
Em làm list down tìm kiếm được theo bài của a.e trên diễn đàn này, nhưng khi mở ra thì màn hình bị thu nhỏ mất các nút phóng to, thu nhỏ...và không thể thêm sheet mới được (như hình), nhờ a.c khắc phục giúp, xin cám ơn!
Private priArray
Private priIsFocus As Boolean
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 And Target.Row > 6 And Target.Column = 2 Then
Dim e As Long
Dim sh As Worksheet
Set sh = Sheets("DMHANG")
If Not IsArray(priArray) Then
e = sh.Range("A" & Rows.Count).End(xlUp).Row
priArray = sh.Range("A6:C" & e).Value2
End If
Call HienComboBox
Else
Call AnComboBox
End If
End Sub
Private Sub ComboBox1_Change()
If priIsFocus Then Exit Sub
If ComboBox1.MatchFound Then
ActiveCell.Value = ComboBox1.Text
ActiveCell.Offset(, 2).Value = ComboBox1.Column(2)
Else
ActiveCell.Value = ""
ActiveCell.Offset(, 2).Value = ""
End If
End Sub
Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
On Error Resume Next
Select Case KeyCode
Case 16, 17, 37 To 40
Case 9
ActiveCell.Offset(, 1).Activate
Case 13
ActiveCell.Offset(1).Activate
Case Else
If IsArray(priArray) Then
Dim strValue As String
strValue = LCase(ComboBox1.Text)
ComboBox1.ListRows = 20
If Trim(strValue) > "" Then
Dim ArrFilter, GetRow()
Dim c As Long, i As Long, n As Long, r As Long
For r = 1 To UBound(priArray, 1)
If LCase(priArray(r, 1)) Like "*" & strValue & "*" Then
n = n + 1
ReDim Preserve GetRow(1 To n)
GetRow(n) = r
End If
Next
If n Then
Dim u As Byte
u = UBound(priArray, 2)
ReDim ArrFilter(1 To n, 1 To u)
For r = 1 To n
For c = 1 To u
ArrFilter(r, c) = priArray(GetRow(r), c)
Next
Next
ComboBox1.List = ArrFilter
Else
ComboBox1.Clear
ComboBox1.ListRows = 0
End If
ComboBox1.DropDown
Else
If ComboBox1.ListCount <> UBound(priArray) Then
ComboBox1.List = priArray
ComboBox1.DropDown
End If
End If
End If
End Select
End Sub
Private Sub HienComboBox()
priIsFocus = True
With ComboBox1
.Visible = False
.Visible = True
.Left = ActiveCell.Left
.Top = ActiveCell.Top
.Width = ActiveCell.Width
.ListWidth = ActiveCell.Resize(, 3).Width + 12
.ColumnWidths = .Width - 4 & "," & ActiveCell.Offset(, 1).Width
.Height = ActiveCell.Height
.List = priArray
.Text = ActiveCell.Value
.Activate
.SelStart = 0
.SelLength = Len(.Text)
End With
priIsFocus = False
End Sub
Private Sub AnComboBox()
With ComboBox1
If .Visible Then
.Visible = False
End If
End With
End Sub
Em đã khắc phục được!
Private priArray
Private priIsFocus As Boolean
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 And Target.Row > 6 And Target.Column = 2 Then
Dim e As Long
Dim sh As Worksheet
Set sh = Sheets("DMHANG")
If Not IsArray(priArray) Then
e = sh.Range("A" & Rows.Count).End(xlUp).Row
priArray = sh.Range("A6:C" & e).Value2
End If
Call HienComboBox
Else
Call AnComboBox
End If
End Sub
Private Sub ComboBox1_Change()
If priIsFocus Then Exit Sub
If ComboBox1.MatchFound Then
ActiveCell.Value = ComboBox1.Text
ActiveCell.Offset(, 2).Value = ComboBox1.Column(2)
Else
ActiveCell.Value = ""
ActiveCell.Offset(, 2).Value = ""
End If
End Sub
Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
On Error Resume Next
Select Case KeyCode
Case 16, 17, 37 To 40
Case 9
ActiveCell.Offset(, 1).Activate
Case 13
ActiveCell.Offset(1).Activate
Case Else
If IsArray(priArray) Then
Dim strValue As String
strValue = LCase(ComboBox1.Text)
ComboBox1.ListRows = 20
If Trim(strValue) > "" Then
Dim ArrFilter, GetRow()
Dim c As Long, i As Long, n As Long, r As Long
For r = 1 To UBound(priArray, 1)
If LCase(priArray(r, 1)) Like "*" & strValue & "*" Then
n = n + 1
ReDim Preserve GetRow(1 To n)
GetRow(n) = r
End If
Next
If n Then
Dim u As Byte
u = UBound(priArray, 2)
ReDim ArrFilter(1 To n, 1 To u)
For r = 1 To n
For c = 1 To u
ArrFilter(r, c) = priArray(GetRow(r), c)
Next
Next
ComboBox1.List = ArrFilter
Else
ComboBox1.Clear
ComboBox1.ListRows = 0
End If
ComboBox1.DropDown
Else
If ComboBox1.ListCount <> UBound(priArray) Then
ComboBox1.List = priArray
ComboBox1.DropDown
End If
End If
End If
End Select
End Sub
Private Sub HienComboBox()
priIsFocus = True
With ComboBox1
.Visible = False
.Visible = True
.Left = ActiveCell.Left
.Top = ActiveCell.Top
.Width = ActiveCell.Width
.ListWidth = ActiveCell.Resize(, 3).Width + 12
.ColumnWidths = .Width - 4 & "," & ActiveCell.Offset(, 1).Width
.Height = ActiveCell.Height
.List = priArray
.Text = ActiveCell.Value
.Activate
.SelStart = 0
.SelLength = Len(.Text)
End With
priIsFocus = False
End Sub
Private Sub AnComboBox()
With ComboBox1
If .Visible Then
.Visible = False
End If
End With
End Sub
Bài đã được tự động gộp:
Em đã khắc phục được!
File đính kèm
Lần chỉnh sửa cuối: