Nếu mình hiểu đúng thì bạn làm thế nàyMình đang gặp phải 1 vấn đề cần nhờ các bác chỉ giáo.Mình có 1 file gồm 2 cột, cột A là cột mã, cột B là số lượng.Câu hỏi là làm cách nào để khi gõ số lượng vào cột B sẽ sinh ra số dòng tương ứng với số lượng gõ vào cột B.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$2" Then
Range("A2:A" & [b2] + 1).FillDown
End If
End Sub
Nếu mình hiểu đúng thì bạn làm thế này
RightClick vào Sheet1 ==> View Code chép "thằng" này vào
Nhập số lượng ở B2Mã:Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$2" Then Range("A2:A" & [b2] + 1).FillDown End If End Sub
Hiện tại mình chưa biết làm cách nào hay hơn, tạm thời như thế này, trong bảng dữ liệu cứ "thằng" nào ở cột G có dữ liệu thi nó sẽ theo đó mà chèn dòng & dữ liệu vào đồng thời nó sẽ "thịt" tuốt tuồn tuột những em khác, bạn chú ý chỗ này nhéMình đưa file thực tế lên bạn test dùm nhé, đây là file để mình in tem thông tin sản phẩm nó sẽ thay đổi liên tục (có thể nhiều mã trên 1 file)bạn có code nào để khi thay đổi thông tin mà không cần phải làm lại như trên không vậy
Option Explicit
Sub PrintMark()
Dim Dg, j, m
Dim Cl As Range
Application.ScreenUpdating = False
Rp.Cells.Clear
Dg = 2
For Each Cl In DT.Range("G2", DT.[g65536].End(xlUp))
If Cl > 0 Then
For j = 1 To Cl
Ro.[c2:c7] = WorksheetFunction.Transpose(Range( _
Cl.Offset(, -6), Cl.Offset(, -1)))
Dg = IIf(m = 3, Dg + 7, Dg)
m = IIf(m = 3, 1, m + 1)
Ro.[B2:C7].Copy Rp.Cells(Dg, m * 3 - 1)
Next: End If: Next
End Sub
Đã làm với ý đồ tạo tem mác thì sao không làm thành Tem mác thành phẩm nhỉ?
Bạn tham khảo file của mình kèm theo xem sao. Code cũng rất đơn giản và ngắn gọn. Bạn cứ điền đủ thông tin từng loại hàng và số lượng tem là được.
(Mình dùng file mẫu của bạn nhưng không hiểu sao định dạng, Edit, lưu rất chậm)
Mã:Option Explicit Sub PrintMark() Dim Dg, j, m Dim Cl As Range Application.ScreenUpdating = False Rp.Cells.Clear Dg = 2 For Each Cl In DT.Range("G2", DT.[g65536].End(xlUp)) If Cl > 0 Then For j = 1 To Cl Ro.[c2:c7] = WorksheetFunction.Transpose(Range( _ Cl.Offset(, -6), Cl.Offset(, -1))) Dg = IIf(m = 3, Dg + 7, Dg) m = IIf(m = 3, 1, m + 1) Ro.[B2:C7].Copy Rp.Cells(Dg, m * 3 - 1) Next: End If: Next End Sub
Sub PrintMark()
Dim Cl As Range, Cl1 As Range
Application.ScreenUpdating = False
Rp.Range("A2", Rp.[f56536].End(xlUp)).Clear
Set Cl1 = Rp.[A2]
For Each Cl In DT.Range("G2", DT.[g65536].End(xlUp))
If Cl > 0 Then
Cl1.Resize(Cl, 6).Value = Range(Cl.Offset(, -6), Cl.Offset(, -1)).Value
Set Cl1 = Cl1.Offset(Cl)
End If: Next
End Sub
Nếu vậy thì chỉ cần như thế này thôi, khi nhập xong sang sheet Report là có
Mã:Sub PrintMark() Dim Cl As Range, Cl1 As Range Application.ScreenUpdating = False Rp.Range("A2", Rp.[f56536].End(xlUp)).Clear Set Cl1 = Rp.[A2] For Each Cl In DT.Range("G2", DT.[g65536].End(xlUp)) If Cl > 0 Then Cl1.Resize(Cl, 6).Value = Range(Cl.Offset(, -6), Cl.Offset(, -1)).Value Set Cl1 = Cl1.Offset(Cl) End If: Next End Sub
Nếu vậy thì chỉ cần như thế này thôi, khi nhập xong sang sheet Report là có
Mã:Sub PrintMark() Dim Cl As Range, Cl1 As Range Application.ScreenUpdating = False Rp.Range("A2", Rp.[f56536].End(xlUp)).Clear Set Cl1 = Rp.[A2] For Each Cl In DT.Range("G2", DT.[g65536].End(xlUp)) If Cl > 0 Then Cl1.Resize(Cl, 6).Value = Range(Cl.Offset(, -6), Cl.Offset(, -1)).Value Set Cl1 = Cl1.Offset(Cl) End If: Next End Sub
Sub PrintMark()
Dim Cl As Range, Cl1 As Range, Cl2 As Range
Application.ScreenUpdating = False
Rp.Range("A2", Rp.[G56536].End(xlUp)).Clear
Set Cl1 = Rp.[A2]
For Each Cl In DT.Range("H2", DT.[H65536].End(xlUp))
If Cl > 0 Then
Cl1.Resize(Cl, 7) = Range(Cl.Offset(, -7), Cl.Offset(, -1)).Value
For Each Cl2 In Cl1.Resize(Cl, 7)
If IsDate(Cl2) Then Cl2 = WorksheetFunction.Text(Cl2, "dd/mm/yyyy")
If IsNumeric(Cl2) Then Cl2 = "'" & Cl2
Next
Set Cl1 = Cl1.Offset(Cl)
End If: Next
End Sub
Mình đã kiểm tra không có công thức nào trên Rp cả (Bạn có thể dùng lệnh goto để kiểm tra). Để chắc ăn không xóa sót data bạn thay code sau giùm :
Sub PrintMark()
Dim Cl As Range, Cl1 As Range, Cl2 As Range
Application.ScreenUpdating = False
Rp.Cells.Clear
DT.[a1:g1].Copy Rp.[a1]
Set Cl1 = Rp.[A2]
For Each Cl In DT.Range("H2", DT.[H65536].End(xlUp))
If Cl > 0 Then
Cl1.Resize(Cl, 7) = Range(Cl.Offset(, -7), Cl.Offset(, -1)).Value
For Each Cl2 In Cl1.Resize(Cl, 7)
If IsDate(Cl2) Then Cl2 = WorksheetFunction.Text(Cl2, "dd/mm/yyyy")
If IsNumeric(Cl2) Then Cl2 = "'" & Cl2
Next
Set Cl1 = Cl1.Offset(Cl)
End If: Next
End Sub
Rồi Test lại xem sao
Private Sub CommandButton1_Click()
Dim prin
prin = Shell("[COLOR=red]C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE[/COLOR]", vbMaximizedFocus)
End sub