Võ Thiếu Gia
Thành viên hoạt động
- Tham gia
- 19/7/08
- Bài viết
- 105
- Được thích
- 54
Dear các anh/chị,
Tình hình là mình cũng chưa rành lắm về VBA. Nhưng do nhu cầu công việc lặp đi lặp lại, nên nhờ các anh/chị tạo giúp mình đoạn code như trong fike đính kèm.
Thanks & Best Regards
VTG
copy thui hả? ko dem đi dâu dán hết hả?
Dear Let'sGâuGâu,
Mình chỉ cần Copy thôi. Dán là dán qua file khác bạn ạ
đụng ba cái định dạng ngày oải thiệt...........Find hoài mà nó ko thấy............hichic
xài đỡ cái này nha..........................
Thanks Nhapmon,
Nhưng mình chỉ cần Copy từ Cột C đến cột AB
đụng ba cái định dạng ngày oải thiệt...........Find hoài mà nó ko thấy............hichic
xài đỡ cái này nha..........................
Private Sub ComboBox1_Change()
Dim strDate As String, lDate As Long, aTmp, rFind As Range, rCopy As Range
On Error Resume Next
strDate = ComboBox1.Value
aTmp = Split(strDate, "/")
lDate = CLng(DateSerial(aTmp(2), aTmp(1), aTmp(0)))
With Range("A2:AB10000")
.Resize(, 1).NumberFormat = "dd/mm/yyyy"
Set rFind = .Resize(, 1).Find(Format(lDate, "dd/mm/yyyy"), , xlValues, xlWhole)
If Not rFind Is Nothing Then
Set rCopy = Intersect(.Cells, rFind.EntireRow)
'[COLOR=#ff0000][B]rCopy.Select[/B][/COLOR]
[COLOR=#ff0000][B]rCopy.Copy[/B][/COLOR]
End If
End With
End Sub
bạn sửa đoạn code combobox1_change lại một chút là được
Private Sub ComboBox1_Change()
ngay = Format(ComboBox1.Value, "dd/mm")
Cells.Find(What:=ngay, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(, 2).Resize(9, 26).copy
End Sub
thêm cái màu đỏ vô, đổi 28-->26
Find Method đối với dữ liệu dạng Date có chút rắc rối. Phải tìm nó theo dạng chuổi và đúng theo format mà vùng cần tìm đang thiết lập.
Ví dụ: Vùng A:A đang thiết lập Custom Format theo dạng dd/mm thì bạn phải tìm chuổi theo dạng này
Vậy, tổng quát ta sẽ:
1> Chuyển format vùng cần tìm sang 1 kiểu gì đó tùy ý
2> Lấy giá trị trong ComboBox, chuyển thành Date thật sự, xong, dùng hàm Format chuyển nó thành kiểu chuổi giống như đã format ở bước 1
Bây giờ là có thể Find thoải mái
Ví dụ:
Chổ màu đỏ bạn muốn thế nào tùy ý nhéMã:Private Sub ComboBox1_Change() Dim strDate As String, lDate As Long, aTmp, rFind As Range, rCopy As Range On Error Resume Next strDate = ComboBox1.Value aTmp = Split(strDate, "/") lDate = CLng(DateSerial(aTmp(2), aTmp(1), aTmp(0))) With Range("A2:AB10000") .Resize(, 1).NumberFormat = "dd/mm/yyyy" Set rFind = .Resize(, 1).Find(Format(lDate, "dd/mm/yyyy"), , xlValues, xlWhole) If Not rFind Is Nothing Then Set rCopy = Intersect(.Cells, rFind.EntireRow) '[COLOR=#ff0000][B]rCopy.Select[/B][/COLOR] [COLOR=#ff0000][B]rCopy.Copy[/B][/COLOR] End If End With End Sub
Thanks Nhapmon,
Nhưng mình chỉ cần Copy từ Cột C đến cột AB
Private Sub ComboBox1_Change()
Dim strDate As String, lDate As Long, aTmp, rFind As Range, rCopy As Range
strDate = ComboBox1.Value
aTmp = Split(strDate, "/")
lDate = CLng(DateSerial(aTmp(2), aTmp(1), aTmp(0)))
With Range("A2:AB10000")
.Resize(, 1).NumberFormat = "dd/mm/yyyy"
Set rFind = .Resize(, 1).Find(Format(lDate, "dd/mm/yyyy"), , xlValues, xlWhole)
If Not rFind Is Nothing Then
Set rCopy = Intersect(.Cells, .Offset(, 2), rFind.EntireRow)
Set rCopy = rCopy.Resize(rFind.MergeArea.Rows.Count)
rCopy.Copy
End If
End With
End Sub
ndu ơi,
Mình vẫn không thể hiểu.
Anh giúp chỉ VTG đoạn code đó làm như thế nào đi
Thanks
Dear các anh/chị,
Tình hình là mình cũng chưa rành lắm về VBA. Nhưng do nhu cầu công việc lặp đi lặp lại, nên nhờ các anh/chị tạo giúp mình đoạn code như trong fike đính kèm.
Thanks & Best Regards
VTG
Ah, nếu vậy thì phải sửa đôi chút (do có merge cell)
-----------------------------------------------Mã:Private Sub ComboBox1_Change() Dim strDate As String, lDate As Long, aTmp, rFind As Range, rCopy As Range strDate = ComboBox1.Value aTmp = Split(strDate, "/") lDate = CLng(DateSerial(aTmp(2), aTmp(1), aTmp(0))) With Range("A2:AB10000") .Resize(, 1).NumberFormat = "dd/mm/yyyy" Set rFind = .Resize(, 1).Find(Format(lDate, "dd/mm/yyyy"), , xlValues, xlWhole) If Not rFind Is Nothing Then Set rCopy = Intersect(.Cells, .Offset(, 2), rFind.EntireRow) Set rCopy = rCopy.Resize(rFind.MergeArea.Rows.Count) rCopy.Copy End If End With End Sub
Cho code vào Sheet 1 thôi: Sự kiện Change của ComboBox
Bạn thử cái này xem có được không nhé.
Sub test()
Dim k As Long
With Sheet1.Range("A4:AB10000")
k = .Parent.DropDowns(Application.Caller).Value
.Resize(9, .Columns.Count - 2).Offset((k - 1) * 10, 2).Copy
End With
End Sub
Bạn cho code vào file XLSX thì lấy đếch gì mà chạy (lưu file 1 phát, lập tức code bị mất sạch)Dear Anh NDU,
Mình đưa code vào nhưng không hiểu sao không chạy được.
Với định dạng ngày mình muốn giữ y như cũ có được không.
Chi tiết anh xem trong file đính kèm nha
Thanks
Dear Anh NDU,
Mình đưa code vào nhưng không hiểu sao không chạy được.
Với định dạng ngày mình muốn giữ y như cũ có được không.
Còn một chi tiết nữa: Là khi ngày ở cột A:A thay đổi, tì code vẫn chạy được luôn anh.
Chi tiết anh xem trong file đính kèm nha
Thanks
Bạn cho code vào file XLSX thì lấy đếch gì mà chạy (lưu file 1 phát, lập tức code bị mất sạch)
Bạn bảo tôi xem file ở bài nào đây?Dear Anh NDU,
Mình đã chuyển qua 97-2003 mà vẫn không chạy được: Run time error 9
Anh xem trong file đính kèm giúp mình nhé
Bạn bảo tôi xem file ở bài nào đây?
Bạn chuyển định dạng file thành XLSM hoặc XLS, cho code vào trong đó rồi thử nghiệm. Nếu bị lỗi hãy đưa lên đây
Chán quá!
Dear ANh NDU,
Không hiểu sao mình không thể tải file lên được.
Mình đã chuyển qua XLS, xong khi tải lên thì mạng báo là Error. Sorry anh vì sự bất tiện này
Bạn nén file lại rồi upload. Có lẽ file excel của bạn có dung lượng lớn hơn 97kb.Dear ANh NDU,
Không hiểu sao mình không thể tải file lên được.
Mình đã chuyển qua XLS, xong khi tải lên thì mạng báo là Error. Sorry anh vì sự bất tiện này
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2