thanhtam348
Thành viên thường trực
- Tham gia
- 9/3/07
- Bài viết
- 288
- Được thích
- 62
Ở sheet "Phieu" bỏ mẹc mẹc cột F, G, H, côt Đơn giá lấy một cột thôi ( sao bạn lấy 2 cột : "hổng" hiểu!!!)Nhờ các bạn cho tôi ít thời gian chỉnh dùm công thức của bảng in bằng VBA.
Rất cám ơn.
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim Ws As Worksheet, Vung As Range, Cll, I As Integer
Set Ws = Sheets("DL")
Set Vung = Ws.Range(Ws.[f3], Ws.[f5000].End(xlUp)).Offset(0, -2)
Range("c8:o26").ClearContents
With Vung
.Resize(, 16).AutoFilter Field:=1, Criteria1:="="
.Offset(1).FormulaR1C1 = "=R[-1]C"
.AutoFilter
End With
Ws.[d5000].End(xlUp).Clear
For Each Cll In Vung
If Cll = [f2] Then
With [c26].End(xlUp)(2)
.Value = Cll.Offset(0, 3) & ", " & Cll.Offset(0, 5)
For I = 6 To 15
.Offset(0, I - 5) = Cll.Offset(0, I)
Next
End With
End If
Next
With Vung
.Offset(0, 1).Resize(, 15).AutoFilter 1, "="
.Offset(1).ClearContents
.AutoFilter
End With
Application.ScreenUpdating = True
End Sub
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect([E6], Target) Is Nothing Then
Dim Sh As Worksheet, Rng As Range, sRng As Range
Dim MaKH As String, MyAdd As String: Dim Rw As Long
MaKH = Range("KhHg").Find([E6].Value, , xlFormulas, xlWhole).Offset(, -1).Value
[C8].Resize(19, 17).ClearContents
Set Sh = Sheets("DL"): Set Rng = Sh.Range(Sh.[D2], Sh.[d65500].End(xlUp))
Set sRng = Rng.Find(MaKH)
1
If Not sRng Is Nothing Then
Sh.[F65500].End(xlUp).Offset(1, -2).Value = "GPE.COM"
MyAdd = sRng.Address
Do
If sRng.Offset(1).Value = "" Then
Rw = Sh.Range(sRng, sRng.End(xlDown)).Rows.Count - 1
With [c27].End(xlUp).Offset(1)
.Resize(Rw).Value = sRng.Offset(, 3).Resize(Rw).Value
.Offset(, 3).Resize(Rw, 7).Value = sRng.Offset(, 6).Resize(Rw, 7).Value
.Offset(, 11).Resize(Rw, 3).Value = sRng.Offset(Rw, 13).Resize(, 3).Value
End With
ElseIf sRng.Offset(1).Value <> sRng.Value Then
With [c27].End(xlUp).Offset(1)
.Value = sRng.Offset(, 3).Value
.Offset(, 3).Resize(, 7).Value = sRng.Offset(, 6).Resize(, 7).Value
.Offset(, 11).Resize(, 3).Value = sRng.Offset(, 13).Resize(, 3).Value
End With
End If
Set sRng = Rng.FindNext(sRng)
Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
Sh.[F65500].End(xlUp).Offset(1, -2).Value = ""
2
End If
End If
End Sub
Bạn có thể giúp thêm sự kiện để khi in bảng tính được thu hẹp lại đến dòng cuối của loại hàng thôi, trông sẽ gọn hơn?
Cám ơn bạn.
1 [c8].Resize(27).EntireRow.Hidden = False
2 Range([c28], [c28].End(xlUp).Offset(2)).EntireRow.Hidden = True
Chép cái này vào nút thay cái cũ nhéThật tình cám ơn bạn nha! - chờ nảy giờ, bạn có thể giúp thêm sự kiện để khi in bảng tính được thu hẹp lại đến dòng cuối của loại hàng thôi, trông sẽ gọn hơn?
Cám ơn bạn.
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Cells.EntireRow.Hidden = False
Dim Ws As Worksheet, Vung As Range, Cll, I As Integer, K As Integer
Set Ws = Sheets("DL")
Set Vung = Ws.Range(Ws.[f3], Ws.[f5000].End(xlUp)).Offset(0, -2)
Range("c8:o26").ClearContents
With Vung
.Resize(, 16).AutoFilter Field:=1, Criteria1:="="
.Offset(1).FormulaR1C1 = "=R[-1]C"
.AutoFilter
End With
Ws.[d5000].End(xlUp).Clear
For Each Cll In Vung
If Cll = [f2] Then
With [c26].End(xlUp)(2)
.Value = Cll.Offset(0, 3) & ", " & Cll.Offset(0, 5)
For I = 6 To 15
.Offset(0, I - 5) = Cll.Offset(0, I)
Next
End With
End If
Next
With Vung
.Offset(0, 1).Resize(, 15).AutoFilter 1, "="
.Offset(1).ClearContents
.AutoFilter
End With
K = Range([c8], [c8].End(xlDown)).Rows.count
Range(K + 9 & ":26").EntireRow.Hidden = True
Application.ScreenUpdating = True
End Sub
Bạn "hổng" hiểu chỗ náo thì đổi màu chỗ đó, mình mới biết mà giải thích chứConcogia ơi !
Mình còn mơ hồ về VBA lắm, bạn có thể giải thích thêm được không?
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim Ws As Worksheet, Vung As Range, Cll, I As Integer
Set Ws = Sheets("DL")
Set Vung = Ws.Range(Ws.[f3], Ws.[f5000].End(xlUp)).Offset(0, -2)
Range("c826").ClearContents
With Vung
.Resize(, 16).AutoFilter Field:=1, Criteria1:="="
.Offset(1).FormulaR1C1 = "=R[-1]C"
.AutoFilter
End With
Ws.[d5000].End(xlUp).Clear
For Each Cll In Vung
If Cll = [f2] Then
With [c26].End(xlUp)(2)
.Value = Cll.Offset(0, 3) & ", " & Cll.Offset(0, 5)
For I = 6 To 15
.Offset(0, I - 5) = Cll.Offset(0, I)
Next
End With
End If
Next
With Vung
.Offset(0, 1).Resize(, 15).AutoFilter 1, "="
.Offset(1).ClearContents
.AutoFilter
End With
Application.ScreenUpdating = True
End Sub
Chân thành cảm ơn !
Tìm đoạn này trong codeXin cám ơn concogia vả HYen17 , còn chút thắc mắc dùm giúp cho: Từ Sheet "DL", cột "O" (ĐVT) có những loại mà mình cố ý xóa trắng nó đi vì lý do khách hàng thay đổi ý định, nhưng không xóa hết hàng vì mình đã định giá, để lở KH có lấy lại thì số liệu vẩn còn, vậy làm cách nào tách nó ra khi đưa vào bảng in?
Cám ơn các bạn.
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Cells.EntireRow.Hidden = False
Dim Ws As Worksheet, Vung As Range, Cll, I As Integer, K As Integer
Set Ws = Sheets("DL") [COLOR=red]< tôi đổi tên Sheet chổ nầy[/COLOR]
Set Vung = Ws.Range(Ws.[f3], Ws.[f5000].End(xlUp)).Offset(0, -2)
Range("c8:o26").ClearContents
With Vung
.Resize(, 16).AutoFilter Field:=1, Criteria1:="="
.Offset(1).FormulaR1C1 = "=R[-1]C"
.AutoFilter
End With
Ws.[d5000].End(xlUp).Clear
For Each Cll In Vung
If Cll = [f2] And Cll.Offset(0, 11) <> "" Then
With [c26].End(xlUp)(2)
.Value = Cll.Offset(0, 3) & ", " & Cll.Offset(0, 5)
For I = 6 To 15
.Offset(0, I - 5) = Cll.Offset(0, I)
Next
End With
End If
Next
With Vung
.Offset(0, 1).Resize(, 15).AutoFilter 1, "="
.Offset(1).ClearContents
.AutoFilter
End With
K = Range([c8], [c8].End(xlDown)).Rows.Count
Range(K + 9 & ":26").EntireRow.Hidden = True
Application.ScreenUpdating = True
End Sub
Híc, cái file mà mình "zí" chị Hải Yến làm cũng là của bạn chứ của aiTôi lại gặp rắc rối mới: Khi còn trong File các bạn đưa lên thì code chạy tốt, nhưng khi tôi copy code vào file của tôi - tôi đổi tên Sheet thì nó không lấy dược dử liệu qua bảng in, nhờ các bạn xem lại cho giải đáp dùm.
Mã:Private Sub CommandButton1_Click() Application.ScreenUpdating = False Cells.EntireRow.Hidden = False Dim Ws As Worksheet, Vung As Range, Cll, I As Integer, K As Integer Set Ws = Sheets("DL") [COLOR=red]< tôi đổi tên Sheet chổ nầy[/COLOR] Set Vung = Ws.Range(Ws.[f3], Ws.[f5000].End(xlUp)).Offset(0, -2) Range("c8:o26").ClearContents With Vung .Resize(, 16).AutoFilter Field:=1, Criteria1:="=" .Offset(1).FormulaR1C1 = "=R[-1]C" .AutoFilter End With Ws.[d5000].End(xlUp).Clear For Each Cll In Vung If Cll = [f2] And Cll.Offset(0, 11) <> "" Then With [c26].End(xlUp)(2) .Value = Cll.Offset(0, 3) & ", " & Cll.Offset(0, 5) For I = 6 To 15 .Offset(0, I - 5) = Cll.Offset(0, I) Next End With End If Next With Vung .Offset(0, 1).Resize(, 15).AutoFilter 1, "=" .Offset(1).ClearContents .AutoFilter End With K = Range([c8], [c8].End(xlDown)).Rows.Count Range(K + 9 & ":26").EntireRow.Hidden = True Application.ScreenUpdating = True End Sub
Xin gặp lại concogia, HYen17 và các bạn, bạn cho xin thủ tục để bỏ nó vào sự kiện của Sheet mà không dùng nút lệnh. Cám ơn bạn.