Code Tính "Ton" và "TongHop" (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

NguyenthiH

Thành viên mới đăng ký
Tham gia
11/12/16
Bài viết
965
Được thích
175
Giới tính
Nữ
Chào mọi người em có file này nhờ mọi người viết Code để tính "Ton" sheet!Ton và Code tình "TongHop" sheet!TongHop.
Trong file mong mọi người mở Sheet!Ton và Sheet!TongHop ra, em có ghi chú cách tính trong 2 Sheet đó ah.
Mong các mọi người giúp đỡ
 

File đính kèm

Lần chỉnh sửa cuối:
Em thử code mới của Anh thì thấy còn thua code cũ, khi dùng phím 40(xuống) thì nó chọn luôn, và khi chọn lần hai bằng click vào combobox1 thì nó lại không Dropdown,
Nói chung code cũ là được rồi chỉ không double click được thôi.(thì bỏ code Double click)
Trong code cũ tính sữa là :
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Address = "$C$5" Then
    ComboBox1.Visible = True
    ComboBox1.Activate
    ComboBox1.DropDown
    [B][COLOR=#ff0000]ComboBox1.SelStart = 0
    ComboBox1.SelText = Len(.Text)  [/COLOR][/B][COLOR=#0000ff]<- de phủ khối để gỏ từ vào tìm nhanh, nhưng không được[/COLOR]
  Else
    If ComboBox1.Visible = True Then
      ComboBox1.Visible = False
    End If
    If Target.Address = "$G$5" Then
      If Not IsArray(DHarr) Then Call DHCreatList:   ComboBox2.List = DHarr
      ComboBox2.Visible = True
      ComboBox2.Activate
      ComboBox2.DropDown
    Else
      If ComboBox2.Visible = True Then
        ComboBox2.Visible = False
      End If
    End If
  End If
End Sub
Mong Anh giúp.
trong code mới khi chọn combobox1, bạn bấm phím delete thì sẽ hiện đủ các Pl, khi gỏ vào thì nó sẽ tạo list mới theo đúng điều kiện mới gỏ, bạn dùng chuột chọn vào list để chọn PL
muốn hiện danh sách tương tự thì bạn thay code nầy, trong đó số 6 bạn có thể gia giảm hoặc tăng lên
Mã:
Private Sub ComboBox1_Change()
[COLOR=#0000ff]  Dk = UCase(Left(ComboBox1.Value, [/COLOR][COLOR=#ff0000]6[/COLOR][COLOR=#0000ff]))[/COLOR]
  Call PLCreatList
  ComboBox1.List = PLarr
  ComboBox1.DropDown
End Sub
 
Upvote 0
Code mới của anh cũng chưa đúng, vì tới lần thứ 2 thì cũng không delete được, em có tham khảo code lọc trong "tạo combobox thông minh" của anh QuangHai1969, tạo một TextBox và Một ListBox để tìm nhanh. Trong ListBox chưa lọc duy nhất, mong Anh HieuCD giúp lọc duy nhất vào ListBox, và cũng lọc duy nhất vào ComboBox1(của đơn hang)
Khi chọn xong phụ lieu trong listBox nhấn Enter thì nhảy qua G5(combobox1) và chọn tiếp trong combobox1 thì mới chạy code ChiTietCreat()
Và cũng mong anh giúp em khi chọn trong combobox1 cua shet!Ton thì lọc theo cột F của Sheet!Ton(trong sheet em có ghi chú)
Mong anh HieuCD giúp em.
Em xin đưa File mới.
 

File đính kèm

Upvote 0
Code mới của anh cũng chưa đúng, vì tới lần thứ 2 thì cũng không delete được, em có tham khảo code lọc trong "tạo combobox thông minh" của anh QuangHai1969, tạo một TextBox và Một ListBox để tìm nhanh. Trong ListBox chưa lọc duy nhất, mong Anh HieuCD giúp lọc duy nhất vào ListBox, và cũng lọc duy nhất vào ComboBox1(của đơn hang)
Khi chọn xong phụ lieu trong listBox nhấn Enter thì nhảy qua G5(combobox1) và chọn tiếp trong combobox1 thì mới chạy code ChiTietCreat()
Và cũng mong anh giúp em khi chọn trong combobox1 cua shet!Ton thì lọc theo cột F của Sheet!Ton(trong sheet em có ghi chú)
Mong anh HieuCD giúp em.
Em xin đưa File mới.
không biết file bị gì cứ chạy code là tắt excel
 
Upvote 0
Sao máy em chạy code đâu có gì đâu.
Mong anh xem giúp.
 
Upvote 0
Sao em tạo code khi chọn xong tên phụ lieu thì ComboBox1(của đơn hang) Active, và ComboBox1_Active thì nạp list đơn hang và Dropdown mà không được. Mong mọi người xem giúp:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address = "$C$5" Then
    Call thaydoi
Else
    Call Hide
End If
Application.ScreenUpdating = True
End Sub
Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then
    ActiveCell.Value = ActiveSheet.ListBox1.Value
    Call Hide
   [B][COLOR=#ff0000] ComboBox1.Activate[/COLOR][/B]
  End If
End Sub
Private Sub TextBox1_Change()
  Call loc
End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
With ActiveSheet.ListBox1
Select Case KeyCode
   Case 9
      If .ListCount = 0 Then
         Hide
         [C3].Activate
      Else
         .Activate
         .ListIndex = 0
      End If
   Case 37
      Hide
      [C3].Activate
   Case 38
      Hide
      [C3].Activate
   Case 39
      Hide
      [C3].Activate
   Case 40
      If .ListCount = 0 Then
         Hide
         [C3].Activate
      Else
         .Activate
         .ListIndex = 0
      End If
   Case 46
      Hide
      [C3].ClearContents
      [C3].Activate
   End Select
End With
End Sub
[B][COLOR=#ff0000]Private Sub ComboBox1_Active()
  Call DHCreatList
  ComboBox1.List = DHarr
  ComboBox1.DropDown
End Sub[/COLOR][/B]
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then ChiTietCreat
End Sub
Private Sub ChiTietCreat()
  Dim Narr(), Xarr(), Arr(), i As Long, k As Long, nh As String, dk1 As String, dk2 As String
  dk1 = Range("C5").Value:  dk2 = Range("G5").Value
  With Sheets("Nhap")
    Narr = .Range("A2", .Range("B2").End(xlDown)).Resize(, 5).Value
    nh = Left(.Range("E1").Value, 4) & "-"
  End With
  With Sheets("Xuat")
    Xarr = .Range("A2", .Range("D2").End(xlDown)).Resize(, 7).Value
  End With
  ReDim Arr(1 To UBound(Narr) + UBound(Xarr), 1 To 5)
  For i = 1 To UBound(Narr)
    If dk1 = Narr(i, 2) And dk2 = Narr(i, 5) Then
      k = k + 1
      Arr(k, 1) = Narr(i, 1):       Arr(k, 3) = Narr(i, 1)
      Arr(k, 2) = nh & Narr(i, 5):  Arr(k, 4) = Narr(i, 4)
    End If
  Next i
  For i = 1 To UBound(Xarr)
    If dk1 = Xarr(i, 4) And dk2 = Xarr(i, 7) Then
      k = k + 1
      Arr(k, 1) = Xarr(i, 1):       Arr(k, 3) = Xarr(i, 1)
      Arr(k, 2) = Xarr(i, 2) & " " & Xarr(i, 3): Arr(k, 5) = Xarr(i, 6)
    End If
  Next i
  Range("A9:G" & 1000).Borders.LineStyle = 0
  Range("A9:G" & 1000).ClearContents
  If k Then
    Range("B9").Resize(k, 5) = Arr
    Range("B9:F9").Resize(k).Sort [B9], 1, [E9], , 2, Header:=xlNo
    Range("A9").Value = 1
    Range("A9").Resize(k).DataSeries
    Range("A9:G9").Resize(k).Borders.LineStyle = 1
    Range("B9").Resize(k).NumberFormat = "dd/mm/yyyy"
    Range("D9").Resize(k).NumberFormat = "dd/mm/yyyy"
    Range("E9").Resize(k, 3).NumberFormat = " #,##0 ;[red]( #,##0 )"
    Range("G9").Value = Range("E9").Value - Range("F9").Value
    If k > 1 Then
      For i = 10 To 8 + k
        Range("G" & i) = Range("G" & i - 1) + Range("E" & i) - Range("F" & i)
      Next i
    End If
  End If
End Sub
Private Sub DHCreatList()
  Dim Narr(), Xarr(), sList As Object, i As Long, Tmp As Variant
  With Sheets("Nhap")
    Narr = .Range("B2", .Range("B2").End(xlDown)).Resize(, 4).Value
  End With
  With Sheets("Xuat")
    Xarr = .Range("D2", .Range("D2").End(xlDown)).Resize(, 4).Value
  End With
  Set sList = CreateObject("System.Collections.ArrayList")
  For i = 1 To UBound(Narr)
    If [C5].Value = Narr(i, 1) Then
      Tmp = Narr(i, 4)
      If Len(Tmp) Then
        If Not sList.Contains(Tmp) Then sList.Add Tmp
      End If
    End If
  Next i
  For i = 1 To UBound(Xarr)
    If [C5].Value = Xarr(i, 1) Then
      Tmp = Xarr(i, 4)
      If Len(Tmp) Then
        If Not sList.Contains(Tmp) Then sList.Add Tmp
      End If
    End If
  Next i
  sList.Sort
  ReDim DHarr(1 To sList.count, 1 To 1)
  For i = 0 To sList.count - 1
    DHarr(i + 1, 1) = sList(i)
  Next i
End Sub
 
Upvote 0
bỏ hết code trước
Mã:
Dim Narr As Variant, Xarr As Variant
Private Sub Worksheet_Activate()
  Call CreatData
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
  'Application.ScreenUpdating = False
  If Target.Address = "$C$5" Then
    'Call loc
  End If
  'Application.ScreenUpdating = True
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Arr As Variant
'Application.ScreenUpdating = False
If Target.Address = "$C$5" Then
    Call Show_Text_ListBox
    Arr = PLCreatList(ActiveSheet.TextBox1.Value)
    ListBox1.List = Arr
Else
    Call Hide_Text_ListBox
End If


If Target.Address = "$G$5" Then
  If ComboBox1.Visible = False Then
    Arr = DHCreatList(Range("C5").Value)
    ComboBox1.List = Arr
    ComboBox1.Visible = True
    ComboBox1.Activate
    ComboBox1.DropDown
    ComboBox1.Value = ComboBox1.List(0)
  End If
Else
  If ComboBox1.Visible = True Then ComboBox1.Visible = False
End If
'Application.ScreenUpdating = True
End Sub


Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then
    ActiveCell.Value = ActiveSheet.ListBox1.Value
    Call Hide_Text_ListBox
    Range("G5").Select
  End If
End Sub


Private Sub TextBox1_Change()
  Dim Arr As Variant
    Arr = PLCreatList(ActiveSheet.TextBox1.Value)
    ListBox1.List = Arr
End Sub


Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
With ActiveSheet.ListBox1
Select Case KeyCode
   Case 9
      If .ListCount = 0 Then
         Hide_Text_ListBox
         [C3].Activate
      Else
         .Activate
         .ListIndex = 0
      End If
   Case 37
      Hide_Text_ListBox
      [C3].Activate
   Case 38
      Hide_Text_ListBox
      [C3].Activate
   Case 39
      Hide_Text_ListBox
      [C3].Activate
   Case 40
      If .ListCount = 0 Then
        Hide_Text_ListBox
         [C3].Activate
      Else
         .Activate
         .ListIndex = 0
      End If
   Case 46
      Hide_Text_ListBox
      [C3].ClearContents
      [C3].Activate
   End Select
End With
End Sub
Private Sub ComboBox1_Change()
  Range("G5").Value = ComboBox1.Value
  Call ChiTietCreat
End Sub
Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  Range("C6").Select
End Sub


Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then Range("C6").Select
End Sub
Private Sub Show_Text_ListBox()
If ActiveSheet.TextBox1.Visible = False Then
  With ActiveSheet.TextBox1
    .Visible = True
    .Left = ActiveCell.Left:        .Top = ActiveCell.Top
    .Width = ActiveCell.Width:      .Height = ActiveCell.Height
    .Value = "":                    .Activate
  End With
End If
If ActiveSheet.ListBox1.Visible = False Then
  With ActiveSheet.ListBox1
    .Visible = True
    .Left = ActiveCell.Offset(1).Left:  .Top = ActiveCell.Offset(1).Top
    .Width = ActiveCell.Offset(1).Width
  End With
End If
End Sub


Private Sub Hide_Text_ListBox()
  If TextBox1.Visible = True Then TextBox1.Visible = False: TextBox1.Value = ""
  If ListBox1.Visible = True Then ListBox1.Visible = False
End Sub


Private Sub CreatData()
  With Sheets("Nhap")
    Narr = .Range("A2", .Range("B2").End(xlDown)).Resize(, 5).Value
  End With
  With Sheets("Xuat")
    Xarr = .Range("A2", .Range("D2").End(xlDown)).Resize(, 7).Value
  End With
End Sub


Private Function PLCreatList(DK As String)
  Dim oList As Object, i As Long, Tmp As Variant
  Set oList = CreateObject("System.Collections.ArrayList")
  If IsEmpty(Narr) Then CreatData
  For i = 1 To UBound(Narr)
    Tmp = Application.Proper(Narr(i, 2))
    If UCase(Tmp) Like UCase(DK) & "*" Or DK = "" Then
      If Len(Tmp) Then
        If Not oList.Contains(Tmp) Then oList.Add Tmp
      End If
    End If
  Next i
  For i = 1 To UBound(Xarr)
    Tmp = Application.Proper(Xarr(i, 4))
    If UCase(Tmp) Like UCase(DK) & "*" Or DK = "" Then
      If Len(Tmp) Then
        If Not oList.Contains(Tmp) Then oList.Add Tmp
      End If
    End If
  Next i
  If oList.Count Then
    oList.Sort
    PLCreatList = oList.ToArray
  Else
    PLCreatList = Array("", "")
  End If
End Function


Private Function DHCreatList(DK As String)
  Dim sList As Object, i As Long, Tmp As Variant
  Set sList = CreateObject("System.Collections.ArrayList")
  If IsEmpty(Narr) Then CreatData
  For i = 1 To UBound(Narr)
    If DK = Application.Proper(Narr(i, 2)) Then
      Tmp = UCase(Narr(i, 5))
      If Len(Tmp) Then
        If Not sList.Contains(Tmp) Then sList.Add Tmp
      End If
    End If
  Next i
  For i = 1 To UBound(Xarr)
    If DK = Application.Proper(Xarr(i, 4)) Then
      Tmp = UCase(Xarr(i, 7))
      If Len(Tmp) Then
        If Not sList.Contains(Tmp) Then sList.Add Tmp
      End If
    End If
  Next i
  If sList.Count Then
    sList.Sort
    DHCreatList = sList.ToArray
  Else
    DHCreatList = Array("", "")
  End If
End Function


Private Sub ChiTietCreat()
  Dim Arr As Variant, i As Long, k As Long, nh As String, dk1 As String, dk2 As String
  If IsEmpty(Narr) Then CreatData
  dk1 = Range("C5").Value:  dk2 = Range("G5").Value
  ReDim Arr(1 To UBound(Narr) + UBound(Xarr), 1 To 5)
  For i = 1 To UBound(Narr)
    If dk1 = Application.Proper(Narr(i, 2)) And dk2 = UCase(Narr(i, 5)) Then
      k = k + 1
      Arr(k, 1) = Narr(i, 1):       Arr(k, 3) = Narr(i, 1)
      Arr(k, 2) = nh & Narr(i, 5):  Arr(k, 4) = Narr(i, 4)
    End If
  Next i
  For i = 1 To UBound(Xarr)
    If dk1 = Application.Proper(Xarr(i, 4)) And dk2 = UCase(Xarr(i, 7)) Then
      k = k + 1
      Arr(k, 1) = Xarr(i, 1):       Arr(k, 3) = Xarr(i, 1)
      Arr(k, 2) = Xarr(i, 2) & " " & Xarr(i, 3): Arr(k, 5) = Xarr(i, 6)
    End If
  Next i
  Range("A9:G" & 1000).Borders.LineStyle = 0
  Range("A9:G" & 1000).ClearContents
  If k Then
    Range("B9").Resize(k, 5) = Arr
    Range("B9:F9").Resize(k).Sort [B9], 1, [E9], , 2, Header:=xlNo
    Range("A9").Value = 1
    Range("A9").Resize(k).DataSeries
    Range("A9:G9").Resize(k).Borders.LineStyle = 1
    Range("B9").Resize(k).NumberFormat = "dd/mm/yyyy"
    Range("D9").Resize(k).NumberFormat = "dd/mm/yyyy"
    Range("E9").Resize(k, 3).NumberFormat = " #,##0 ;[red]( #,##0 )"
    Range("G9").Value = Range("E9").Value - Range("F9").Value
    If k > 1 Then
      For i = 10 To 8 + k
        Range("G" & i) = Range("G" & i - 1) + Range("E" & i) - Range("F" & i)
      Next i
    End If
  End If
End Sub
 
Upvote 0
Oh! đúng ý rồi anh HieuCD Ơi!(Mặc dù code chạy hơi chậm)
Cám Ơn anh HieuCD nhiều.
Mong anh coi giúp em trong Sheet!Ton khi chọn đơn hàng thì lọc theo đơn hàng(trong File đính kèm #22) với ah.
Cám ơn anh nhiều nhiều.
 
Upvote 0
Chắc tại máy công ty cùi bắp quá nên thấy code hơi chậm, chứ về nhà code chạy trên Laptop nhanh lắm.
Ah mà anh Hiếu chỉnh dùm cho đơn vị tính chạy theo tên phụ lieu ah (trong code mới không có giá trị của [E5])
 
Upvote 0
Sao kỳ quá anh Hiếu ơi, Anhcoi dùm em lại file coi sao code không chạy.
Mở File lên, trong Sheet!ChiTiet ở TextBox1 là "Bao Đựng Nhãn Giặt" có tồn là 1155, lúc này em Click vào TextBox1 gỏ "Nhãn chính" thì trong ListBox1 có "Nhãn chính Novelty", em dung phím xuống chọn "Nhãn Chính Novelty" và Enter thì code không chạy(vì bang chi tiết vẫn là số lieu của "Bao Đựng nhãn Giặt" có số lượng tồn là 1155. và lan6n2 này em click vào TextBox1 và gỏ "Day Treo" thì trong ListBox1 có "Dây Treo Thẻ Bài" em dung phím xuống chọn "Day treo Thẻ Bài" và Enter thì code cũng không chạy.
Mong anh xem lại dùm.
 

File đính kèm

Upvote 0
xóa sub TON() trước, chép code vào Sheet TON
Mã:
Private Sub ComboBox2_GotFocus()
  On Error Resume Next
  If Not IsArray(ComboBox2.List) Then Call CreaTon
  ComboBox2.DropDown
End Sub


Private Sub ComboBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then
    Call LocTon
    Range("F1").Select
  End If
End Sub


Sub CreaTon()
Dim Darr(), Arr(), i As Long, k As Long, d As Long, R As Long, Tmp As String
With CreateObject("Scripting.Dictionary")
  Darr = Range("F2", Range("F2").End(xlDown)).Value
  For i = 1 To UBound(Darr)
    Tmp = Darr(i, 1)
    If Not .Exists(Tmp) Then .Add Tmp, ""
  Next i
  ComboBox2.List = .keys
End With
End Sub


Private Sub LocTon()
Dim Rng As Range, LastR As Long, Dk As String, i As Long
Dk = ComboBox2.Value
Range("F2:F" & 10000).EntireRow.Hidden = False
LastR = Range("B2").End(xlDown).Row
If Dk = "" Then Exit Sub
For i = 2 To LastR
  If Range("F" & i).Value <> Dk Then
    If Rng Is Nothing Then
      Set Rng = Range("F" & i)
    Else
      Set Rng = Union(Rng, Range("F" & i))
    End If
  End If
Next i
If Not Rng Is Nothing Then Rng.EntireRow.Hidden = True
End Sub


Sub Ton()
Dim Narr(), Xarr(), Arr(), DH(), i As Long, k As Long, d As Long, R As Long, Tmp As String
With CreateObject("Scripting.Dictionary")
  With Sheets("Nhap")
    Narr = .Range("B2", .Range("B2").End(xlDown)).Resize(, 4).Value
  End With
  With Sheets("Xuat")
    Xarr = .Range("D2", .Range("D2").End(xlDown)).Resize(, 4).Value
  End With
  ReDim Arr(1 To UBound(Narr) + UBound(Xarr), 1 To 6)
  For i = 1 To UBound(Narr)
    Tmp = Narr(i, 1) & "#" & Narr(i, 2) & "#" & Narr(i, 4)
    If Not .Exists(Tmp) Then
      k = k + 1: .Add Tmp, k
      Arr(k, 1) = Narr(i, 1): Arr(k, 2) = Narr(i, 2)
      Arr(k, 3) = Narr(i, 3): Arr(k, 5) = Narr(i, 3)
      Arr(k, 6) = Narr(i, 4)
      Tmp = Narr(i, 4)
      If Not .Exists(Tmp) Then .Add Tmp, "": ReDim Preserve DH(d): DH(d) = Tmp: d = d + 1:
    Else
      R = .Item(Tmp)
      Arr(R, 3) = Arr(R, 3) + Narr(i, 3)
      Arr(R, 5) = Arr(R, 3)
    End If
  Next i
  For i = 1 To UBound(Xarr)
    Tmp = Xarr(i, 1) & "#" & Xarr(i, 2) & "#" & Xarr(i, 4)
    If Not .Exists(Tmp) Then
      k = k + 1: .Add Tmp, k
      Arr(k, 1) = Xarr(i, 1): Arr(k, 2) = Xarr(i, 2)
      Arr(k, 4) = Xarr(i, 3): Arr(k, 5) = Arr(k, 5) - Xarr(i, 3)
      Arr(k, 6) = Xarr(i, 4)
    Else
      R = .Item(Tmp)
      Arr(R, 4) = Arr(R, 4) + Xarr(i, 3)
      Arr(R, 5) = Arr(R, 5) - Xarr(i, 3)
    End If
  Next i
End With
With Sheets("Ton")
  .Range("A2:F10000").ClearContents
  .Range("A2").Resize(k, 6) = Arr
  .Range("A2").Resize(k, 6).Borders.LineStyle = 1
  .Range("C2").Resize(k, 3).NumberFormat = "#,##0.00_);[Red](#,##0.00)"
  .ComboBox2.List = DH
End With
End Sub
 
Upvote 0
Sao kỳ quá anh Hiếu ơi, Anhcoi dùm em lại file coi sao code không chạy.
Mở File lên, trong Sheet!ChiTiet ở TextBox1 là "Bao Đựng Nhãn Giặt" có tồn là 1155, lúc này em Click vào TextBox1 gỏ "Nhãn chính" thì trong ListBox1 có "Nhãn chính Novelty", em dung phím xuống chọn "Nhãn Chính Novelty" và Enter thì code không chạy(vì bang chi tiết vẫn là số lieu của "Bao Đựng nhãn Giặt" có số lượng tồn là 1155. và lan6n2 này em click vào TextBox1 và gỏ "Day Treo" thì trong ListBox1 có "Dây Treo Thẻ Bài" em dung phím xuống chọn "Day treo Thẻ Bài" và Enter thì code cũng không chạy.
Mong anh xem lại dùm.
máy mình không bị, chạy bình thường chép lại code tính đơn vị
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$5" Then
  For i = 1 To UBound(Narr)
    If Narr(i, 2) = Target.Value Then
      [E5] = Narr(i, 3)
      Exit Sub
    End If
  Next i
End If
End Sub
 
Upvote 0
Cám ơn anh Hiếu!
Ý anh nói bỏ Sub tính Ton trong Module hôm trước anh làm cho em??
Em vẫn để có được không? Vì em vẫn muốn xem tổng (khi nhấn vào "Ngôi Sao" )
Code trong sheet!Ton chỉ chạy lần đầu tiên, lần thứ hai nhấp vào ComboBox2 nó chỉ trơ ra không chạy code.
Trong Sheet!ChiTiet, anh chỉnh cho ListBox1 có 4 dòng vì em thấy nó hiện có 1 dòng (mặc dù em đã kéo ListBox1 ra)
 
Upvote 0
Cám ơn anh Hiếu!
Ý anh nói bỏ Sub tính Ton trong Module hôm trước anh làm cho em??
Em vẫn để có được không? Vì em vẫn muốn xem tổng (khi nhấn vào "Ngôi Sao" )
Code trong sheet!Ton chỉ chạy lần đầu tiên, lần thứ hai nhấp vào ComboBox2 nó chỉ trơ ra không chạy code.
Trong Sheet!ChiTiet, anh chỉnh cho ListBox1 có 4 dòng vì em thấy nó hiện có 1 dòng (mặc dù em đã kéo ListBox1 ra)
mình có tạo sub ton mới nen phải bỏ sheet ton trước, bạn bấm chuột phải vào ngôi sao và chọn lại sub ton mới
comboxox2, bấm lần 2 thì bạn bấm vào mủi tên đổ xuống, mới hiên danh sách 4 DH,
bạn có thể dùng phím mủi tên lên xuống để tìm DH cũng được
 
Upvote 0
Em gửi lại File, Anh có thể sữa trực tiếp trên File này dùm em với.
Sao em Click vao dấu xổ của Combobox2 trong sheet!Ton nó không ra gì hết, và nhờ anh chỉnh cho ListBox1 trong sheet!Chitiet hiện ra 4 dòng trở lên(hiện thời chỉ có một dòng)
và em thấy nếu bỏ Sub Ton trong Module đi thì gán Macro cho Shape "Ngôi Sao" không được.
Mong anh xem giúp.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em gửi lại File, Anh có thể sữa trực tiếp trên File này dùm em với.
Sao em Click vao dấu xổ của Combobox2 trong sheet!Ton nó không ra gì hết, và nhờ anh chỉnh cho ListBox1 trong sheet!Chitiet hiện ra 4 dòng trở lên(hiện thời chỉ có một dòng)
và em thấy nếu bỏ Sub Ton trong Module đi thì gán Macro cho Shape "Ngôi Sao" không được.
Mong anh xem giúp.
muốn chỉnh Oject, trên menu Developer, bạn chọn Design Mode sau đó nắm kéo hoặc mở rông kích thước các object
file mình ngôi sao chạy code bình thường, hoặc bạn Insert Button mới làm nút lệnh
 

File đính kèm

Upvote 0
File của anh ở sheet!Ton đang để lọc d0n NKF16019-16020 khi em chọn đơn khác là NKF16010 bấm nút Button thì không Lọc, Vậy có cần nhả lọc để chọn đơn khác thì lọc không ANh?
Em xin lỗi. Code của anh chọn xong nhấn Enter mới lọc.
Nhưng đã lọc rồi, giờ em nhấn "Sao" thì không hiện ra tất cả lại.
Mong anh chỉnh cho khi nhấn "Sao" thí hiện ra tất cả lại.
 
Lần chỉnh sửa cuối:
Upvote 0
Chào anh Hiếu!
Code lọc theo đơn hàng trong sheet!Ton là anh dùng "Hidden" nên khi đã lọc một đơn hang rồi em quay qua nhấn "Ngôi sao" để tính "Ton" thì không hiện ra hết, nên trong code "Sub Ton" em có thêm:
Mã:
Sub Ton()
Dim Narr(), Xarr(), Arr(), DH(), i As Long, k As Long, d As Long, R As Long, Tmp As String
With CreateObject("Scripting.Dictionary")
  With Sheets("Nhap")
    Narr = .Range("B2", .Range("B2").End(xlDown)).Resize(, 4).Value
  End With
  With Sheets("Xuat")
    Xarr = .Range("D2", .Range("D2").End(xlDown)).Resize(, 4).Value
  End With
  ReDim Arr(1 To UBound(Narr) + UBound(Xarr), 1 To 6)
  For i = 1 To UBound(Narr)
    Tmp = Narr(i, 1) & "#" & Narr(i, 2) & "#" & Narr(i, 4)
    If Not .Exists(Tmp) Then
      k = k + 1: .Add Tmp, k
      Arr(k, 1) = Narr(i, 1): Arr(k, 2) = Narr(i, 2)
      Arr(k, 3) = Narr(i, 3): Arr(k, 5) = Narr(i, 3)
      Arr(k, 6) = Narr(i, 4)
      Tmp = Narr(i, 4)
      If Not .Exists(Tmp) Then .Add Tmp, "": ReDim Preserve DH(d): DH(d) = Tmp: d = d + 1:
    Else
      R = .Item(Tmp)
      Arr(R, 3) = Arr(R, 3) + Narr(i, 3)
      Arr(R, 5) = Arr(R, 3)
    End If
  Next i
  For i = 1 To UBound(Xarr)
    Tmp = Xarr(i, 1) & "#" & Xarr(i, 2) & "#" & Xarr(i, 4)
    If Not .Exists(Tmp) Then
      k = k + 1: .Add Tmp, k
      Arr(k, 1) = Xarr(i, 1): Arr(k, 2) = Xarr(i, 2)
      Arr(k, 4) = Xarr(i, 3): Arr(k, 5) = Arr(k, 5) - Xarr(i, 3)
      Arr(k, 6) = Xarr(i, 4)
    Else
      R = .Item(Tmp)
      Arr(R, 4) = Arr(R, 4) + Xarr(i, 3)
      Arr(R, 5) = Arr(R, 5) - Xarr(i, 3)
    End If
  Next i
End With
With Sheets("Ton")
  .Range("A2:F10000").ClearContents
  .Range("A2").Resize(k, 6) = Arr
  .Range("A2").Resize(k, 6).Borders.LineStyle = 1
  .Range("C2").Resize(k, 3).NumberFormat = "#,##0.00_);[Red](#,##0.00)"
  .ComboBox2.List = DH
 [B][COLOR=#ff0000] .Range("F2:F" & 10000).EntireRow.Hidden = False  [/COLOR][COLOR=#0000ff]<-----them cho nay ah[/COLOR][COLOR=#ff0000][/COLOR][/B]
End With
End Sub
vậy có được không vì em chả biết tí căn bản nào về code.
Em chỉ làm theo dạng trắc nghiệm.
Mong anh có cách nào khác hay hơn chỉ em với.
 
Upvote 0
File của anh ở sheet!Ton đang để lọc d0n NKF16019-16020 khi em chọn đơn khác là NKF16010 bấm nút Button thì không Lọc, Vậy có cần nhả lọc để chọn đơn khác thì lọc không ANh?
Em xin lỗi. Code của anh chọn xong nhấn Enter mới lọc.
Nhưng đã lọc rồi, giờ em nhấn "Sao" thì không hiện ra tất cả lại.
Mong anh chỉnh cho khi nhấn "Sao" thí hiện ra tất cả lại.
nhấn sao nhiệm vụ chính là cập nhật dữ liệu sheet Ton từ sheet Nhap và Xuat
bạn muốn hiện tất cả (bỏ lọc) thì chọn dòng đầu của list(trống không có gì) hoặc xóa trống trong combobox và enter.
chỉnh lại 2 code
Mã:
Sub CreaTon()
Dim Darr(), Arr(), i As Long, k As Long, d As Long, R As Long, Tmp As String
With CreateObject("Scripting.Dictionary")
  Darr = Range("F2", Range("F2").End(xlDown)).Value
  [COLOR=#ff0000].Add Tmp, ""[/COLOR]
  For i = 1 To UBound(Darr)
    Tmp = Darr(i, 1)
    If Not .Exists(Tmp) Then .Add Tmp, ""
  Next i
  ComboBox2.List = .keys
End With
End Sub


Sub Ton()
Dim Narr(), Xarr(), Arr(), DH(), i As Long, k As Long, d As Long, R As Long, Tmp As String
With CreateObject("Scripting.Dictionary")
  With Sheets("Nhap")
    Narr = .Range("B2", .Range("B2").End(xlDown)).Resize(, 4).Value
  End With
  With Sheets("Xuat")
    Xarr = .Range("D2", .Range("D2").End(xlDown)).Resize(, 4).Value
  End With
  ReDim Arr(1 To UBound(Narr) + UBound(Xarr), 1 To 6)
  For i = 1 To UBound(Narr)
    Tmp = Narr(i, 1) & "#" & Narr(i, 2) & "#" & Narr(i, 4)
    If Not .Exists(Tmp) Then
      k = k + 1: .Add Tmp, k
      Arr(k, 1) = Narr(i, 1): Arr(k, 2) = Narr(i, 2)
      Arr(k, 3) = Narr(i, 3): Arr(k, 5) = Narr(i, 3)
      Arr(k, 6) = Narr(i, 4)
      Tmp = Narr(i, 4)
[COLOR=#ff0000]      If Not .Exists(Tmp) Then
        .Add Tmp, "":     d = d + 1
        ReDim Preserve DH(d): DH(d) = Tmp
      End If[/COLOR]
    Else
      R = .Item(Tmp)
      Arr(R, 3) = Arr(R, 3) + Narr(i, 3)
      Arr(R, 5) = Arr(R, 3)
    End If
  Next i
  For i = 1 To UBound(Xarr)
    Tmp = Xarr(i, 1) & "#" & Xarr(i, 2) & "#" & Xarr(i, 4)
    If Not .Exists(Tmp) Then
      k = k + 1: .Add Tmp, k
      Arr(k, 1) = Xarr(i, 1): Arr(k, 2) = Xarr(i, 2)
      Arr(k, 4) = Xarr(i, 3): Arr(k, 5) = Arr(k, 5) - Xarr(i, 3)
      Arr(k, 6) = Xarr(i, 4)
    Else
      R = .Item(Tmp)
      Arr(R, 4) = Arr(R, 4) + Xarr(i, 3)
      Arr(R, 5) = Arr(R, 5) - Xarr(i, 3)
    End If
  Next i
End With
With Sheets("Ton")
  .Range("A2:F10000").ClearContents
  .Range("A2").Resize(k, 6) = Arr
  .Range("A2").Resize(k, 6).Borders.LineStyle = 1
  .Range("C2").Resize(k, 3).NumberFormat = "#,##0.00_);[Red](#,##0.00)"
  .ComboBox2.List = DH
[COLOR=#ff0000]  .ComboBox2.Value = ""
  .Range("F2:F" & 10000).EntireRow.Hidden = False[/COLOR]
End With
End Sub
 
Upvote 0
Cám Ơn anh Hiếu nhiều!
Sao em thấy ListBox1 trong Sheet!ChiTiet không ổn định sao ấy.
Mặc dù em đã vào trong Develop -> Design Mode -> kéo ListBox1 ra cho hiện 5 dòng, mà khi mở file lên làm tiếp lần thừ hoặc mở file lần thử 3 thì ListBox1 chỉ còn hiện có 1 dòng.
Hay xung đột code sao đó.
Không hiểu nỗi.
 
Upvote 0
Cám Ơn anh Hiếu nhiều!
Sao em thấy ListBox1 trong Sheet!ChiTiet không ổn định sao ấy.
Mặc dù em đã vào trong Develop -> Design Mode -> kéo ListBox1 ra cho hiện 5 dòng, mà khi mở file lên làm tiếp lần thừ hoặc mở file lần thử 3 thì ListBox1 chỉ còn hiện có 1 dòng.
Hay xung đột code sao đó.
Không hiểu nỗi.
file chạy trên Excel 2007 không bị nên cũng không biết bị gì
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom