Liên hệ QC

tuankiet139075

Thành viên mới
Tham gia
8/6/18
Bài viết
16
Được thích
3
Nhờ các thành viên GPE giúp đỡ mình file này.
File của mình gồm 2 sheet.
Ở Sheet (THANG 6) có cột A là ngày trong tháng, từ CỘt B -> Cột L tương ứng với phòng của Khách Sạn.
Những ô nào có khách đặt phòng rồi thì mình điền tên vào
vd: PHONG đặt phòng 101 ngày 01-06-2018 và 02-06-2018 ( tạm hiểu ngày đi là 3-6-2018)
TUAN: ĐẶT NGUYÊN CĂN (NC) Từ ngày 05-06-18 và ngày 06-06-2018 ( tạm hiểu ngày đi là 7-6-2018)
MONG MUỐN:
1/ Khi nhập tên khách đã đặt phòng ở bên sheet (THANG6) VÀ khi bấm button CẬP NHẬT thì sẽ copy Thông tin qua sheet (THONG TIN) giống như ví dụ mình đã điền vào .
2/ Nếu cùng 1 tên mà đặt hết tất cả các phòng thì Mã phòng bên sheet (Thong tin) là "NC".
Đó là thông tin và mong muốn cần giúp đỡ của mình, mong mọi người bỏ chút thời gian giúp đỡ.
Cảm ơn tất cả mọi người.
 

File đính kèm

  • KS TUANKIET.xlsx
    32.1 KB · Đọc: 69
Lần chỉnh sửa cuối:
Chào anh batman1!
Em đã test nếu số lượng khách khi update qua sheet THONG TIN lớn hơn 31 dòng thì nó báo lỗi, em dính kèm file anh và mọi người xem lại giúp em nhé.
1. Tôi quên không nhân với 12

Nếu ngày nào cũng có 12 khach đặt phòng chỉ 1 ngày thì trong 31 ngày có 31*12 = 372 khách - tức 372 dòng trong THONG TIN.

Nhưng tôi khuyên không sửa thành 372. Bạn chỉ dùng 1 tháng nhưng code của tôi muốn mềm dẻo, tùy biến, có tham vọng thích hợp với dữ liệu hiện hành. Nếu một ngày đẹp trời bạn muốn làm 2 tháng liền (61 ngày) hoặc 3 tháng (1 quí) thì 372 kia tèo.

Tôi chỉ quên nhân với 12 thôi.

Bạn hãy tìm và sửa thành
Mã:
ReDim result(1 To 12 * (UBound(Arr) - 2), 1 To 6)

Nếu bạn sửa thành 372 là bạn thu hẹp khả năng của code của tôi đấy.

2. Trong module của THONG TIN tôi quên chưa xóa code. Code này lúc đầu tôi định đề nghị nhập dữ liệu ở THONG TIN rồi code bắn chúng sang DAT PHÒNG - tức làm ngược lại.

Phải chuột trên thẻ THONG TIN ở thanh sheet ở dưới cùng trong cửa sổ -> chọn "View code". Xóa toàn bộ code Worksheet_Change
Bài đã được tự động gộp:

Em đã sửa và chạy ok rồi, em hiểu rằng 372=12*31.
Hãy đọc bài của tôi và sửa thành
Mã:
ReDim result(1 To 12 * (UBound(Arr) - 2), 1 To 6)

Không dùng 372
Còn theo code của anh batman1 thì UBound(Arr) - 2 NGHĨA LÀ SAO VẬY Ạ?
Cảm ơn!
Trong sheet DAT PHONG dữ liệu khách bắt đầu từ dòng 5, từ cột B nhưng vì tôi không truy cập liên tục xuống sheet mà lấy toàn bộ dữ liệu vào mảng rồi xử lý trong đó nên tôi phải lấy từ dòng 3 (có cả mã phòng) - tức dư 2 dòng, và từ cột A (có ngày tháng). Vậy thì số các dòng ngày tháng chỉ là Ubound(Arr) - 2 (trừ 2 do lấy dư 2 dòng) thôi. Cụ thể là tháng 6 có 30 ngày nên dữ liệu chỉ tới dòng 34. Do code lấy từ dòng 3 nên mảng Arr có 32 dòng - Ubound(Arr) = 32. UBound(Arr) - 2 = 32 - 2 = 30 - tức số ngày trong tháng 6.
 
Lần chỉnh sửa cuối:
Upvote 0
Thường thì khách hàng ở 2 ngày trở lên thì có thể dễ gặp trường hợp chiếm dụng fòng nào đó xuyên suốt từ cuối tháng trước sang đầu tháng sau.

Như vậy trên báo cáo sẽ không đủ thông tin thực chất về khách

???
 
Upvote 0
Thường thì khách hàng ở 2 ngày trở lên thì có thể dễ gặp trường hợp chiếm dụng fòng nào đó xuyên suốt từ cuối tháng trước sang đầu tháng sau.

Như vậy trên báo cáo sẽ không đủ thông tin thực chất về khách

???
Code của tôi chính là sự mềm dẻo, tùy biến.
Mặc dù người hỏi yêu cầu 1 tháng nhưng code của tôi phục vụ dữ liệu nhiều tùy ý.
Nếu chỉ phục vụ 1 tháng thì chỉ cần
Mã:
Arr = sh.Range("A3:M35").Value
Nhưng tại sao tôi dùng?
Mã:
Arr = sh.Range("A3:M" & r).Value
Tôi có điên đâu? Tôi viết thế chính là để phục vụ dữ liệu nhiều tùy ý.

Tôi viết code là có suy nghĩ, không chỉ bó hẹp trong yêu cầu của người hỏi.

Khách đến đặt phòng từ 28-06 tới 13-07? Thì nhập tiếp trong cột A sau ngày 30-06 những ngày 01-07 tới 13-07 rồi nhấn cập nhật thôi.

Sau một thời gian sang tận tháng 8 không cần tháng 6 và 7 nữa? Thì hủy các dòng (delete các dòng chứ không phải chỉ xóa nội dung) ứng với tháng 6 và 7 trong sheet DAT PHONG rồi nhấn cập nhật thôi. Sheet DAT PHONG "gầy" đi thì sheet THONG TIN cũng gầy đi. Thế thôi.

Nếu cần lưu thông tin trong sheet THONG TIN của tháng 6 và 7? Thì trước khi delete các dòng tháng 6 và 7 ở sheet DAT PHONG thì trong sheet THONG TIN copy các dòng ứng với tháng 6 và 7, chúng đứng liền nhau do sắp xếp, sang sheet mới thôi.

Chính vì code của tôi phục vụ dữ liệu nhiều tùy ý nên tôi đã nói là không thể dùng 372. Dùng 372 là cố tình hạn chế khả năng code của tôi, làm nó nghèo nàn đi.
--------------
Tất nhiên khi xóa dữ liệu cũ thì tôi quên không lấy vùng đủ lớn. Vì vậy chủ chủ đề nên sửa
Mã:
Worksheets("THONG TIN").Range("A4:F34").ClearContents
thành vd.
Mã:
Worksheets("THONG TIN").Range("A4:F1000").ClearContents
 
Upvote 0
Mình nêu ra là để chủ đề tài dè chừng hay nêu tiếp vấn đề cần giải quyết thôi.

Rất vui & cám ơn bạn đã giải đáp rất chi là cặn kẻ!
 
Upvote 0
Code của tôi chính là sự mềm dẻo, tùy biến.
Mặc dù người hỏi yêu cầu 1 tháng nhưng code của tôi phục vụ dữ liệu nhiều tùy ý.
Nếu chỉ phục vụ 1 tháng thì chỉ cần
Mã:
Arr = sh.Range("A3:M35").Value
Nhưng tại sao tôi dùng?
Mã:
Arr = sh.Range("A3:M" & r).Value
Tôi có điên đâu? Tôi viết thế chính là để phục vụ dữ liệu nhiều tùy ý.

Tôi viết code là có suy nghĩ, không chỉ bó hẹp trong yêu cầu của người hỏi.

Khách đến đặt phòng từ 28-06 tới 13-07? Thì nhập tiếp trong cột A sau ngày 30-06 những ngày 01-07 tới 13-07 rồi nhấn cập nhật thôi.

Sau một thời gian sang tận tháng 8 không cần tháng 6 và 7 nữa? Thì hủy các dòng (delete các dòng chứ không phải chỉ xóa nội dung) ứng với tháng 6 và 7 trong sheet DAT PHONG rồi nhấn cập nhật thôi. Sheet DAT PHONG "gầy" đi thì sheet THONG TIN cũng gầy đi. Thế thôi.

Nếu cần lưu thông tin trong sheet THONG TIN của tháng 6 và 7? Thì trước khi delete các dòng tháng 6 và 7 ở sheet DAT PHONG thì trong sheet THONG TIN copy các dòng ứng với tháng 6 và 7, chúng đứng liền nhau do sắp xếp, sang sheet mới thôi.

Chính vì code của tôi phục vụ dữ liệu nhiều tùy ý nên tôi đã nói là không thể dùng 372. Dùng 372 là cố tình hạn chế khả năng code của tôi, làm nó nghèo nàn đi.
--------------
Tất nhiên khi xóa dữ liệu cũ thì tôi quên không lấy vùng đủ lớn. Vì vậy chủ chủ đề nên sửa
Mã:
Worksheets("THONG TIN").Range("A4:F34").ClearContents
thành vd.
Mã:
Worksheets("THONG TIN").Range("A4:F1000").ClearContents
Cảm ơn anh đã giải thích rõ ràng và thật dễ hiểu.
 
Upvote 0
Web KT

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

Back
Top Bottom