Xóa sheet các file dữ liệu nằm trong cùng thư mục

Liên hệ QC

tanthanhkg

Thành viên hoạt động
Tham gia
16/8/08
Bài viết
196
Được thích
25
Em có 2 file dữ liệu có cấu trúc như nhau : sheet1 (Thông tin chung) và sheet2 là tên lớp(6A1)nằm trong cùng một thư mục.
- Xin mọi người cho em đoạn code xóa sheet1 (Thông tin chung) trong 2 file trên.
-Sau khi xóa song thì gộp 2 file trên lại thành 1 file và 1 sheet .(mỗi thông tin học sinh nằm trên 1 tờ giấy A4 như trong file kèm theo để in học bạ cho học sinh)
Em xin cảm ơn.
 

File đính kèm

  • HocBaHocSinh_DinhThuyAi.xls
    33 KB · Đọc: 8
  • HocBaHocSinh_NguyenNhatAnh.xls
    33 KB · Đọc: 6
  • ket qua.xls
    35.5 KB · Đọc: 6
Lần chỉnh sửa cuối:
Bảng tổng hợp chính là học bạ của học sinh ở file dưới này anh ơi
 

File đính kèm

  • HS_THCS_HocBaHocSinh_BuiMinhDat.xls
    29.5 KB · Đọc: 8
Upvote 0
Xin cảm ơn anh befaint về file "Print.xls" anh đã gởi cho em. File chạy tốt.
Cho em hỏi chúc xíu nhé:

- Khi nhắp chuột vào nút click trong file Print.xls mà anh gửi cho em, sau khi chọn thư mục chứa các file cần in xong thì em muốn sẽ xuất hiện thông báo "chọn sheet cần in". Sau khi chọn sheet cần in sẽ hiện ra thông báo "In trang lẻ hoặc trang chẵn hoặc in tất cả" được không ạ.
Mong anh tận tình giúp đỡ.
============================================

Sub Main()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Const extFile As String = "xls"
Dim pFolder As String, wb As Workbook, wsName As String, wbName As String
Dim arName, i As Long, aTem, pFile As String
pFolder = GetpFolder("")
If Len(pFolder) = 0 Then Exit Sub
pFolder = pFolder & "\"
arName = GetFilesInFolder(pFolder, extFile)
If typeName(arName) <> "Variant()" Then Exit Sub
wbName = VBA.UCase(ThisWorkbook.Name)
For Each aTem In arName
If Not VBA.UCase(aTem) Like wbName Then
pFile = pFolder & aTem
Set wb = Workbooks.Open(pFile)
wsName = NameSheet2Print(wb)
If Len(wsName) > 0 Then
wb.Worksheets(wsName).PrintOut 'In ngay
End If
wb.Close False
End If
Next aTem
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Function NameSheet2Print(ByVal wb As Workbook) As String
Dim ws As Worksheet
For Each ws In wb.Worksheets
If ws.Name Like "#*" Then
NameSheet2Print = ws.Name
Exit For
End If
Next ws
End Function

Public Function GetpFolder(ByVal pFolder As String) As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Select a Folder"
.AllowMultiSelect = False
.InitialFileName = pFolder
If .Show Then GetpFolder = .SelectedItems(1)
End With
End Function

Public Function GetFilesInFolder(ByVal pFolder As String, ByVal extensionFile As String)
Dim FSo As Object, objFolder As Object, objFile As Object, Result(), i As Long
Set FSo = CreateObject("Scripting.FileSystemObject")
Set objFolder = FSo.GetFolder(pFolder)
extensionFile = VBA.UCase(extensionFile)
For Each objFile In objFolder.Files
If VBA.UCase(FSo.GetExtensionName(objFile)) Like extensionFile Then
i = i + 1
ReDim Preserve Result(1 To i)
Result(i) = objFile.Name
End If
Next objFile
If i > 0 Then GetFilesInFolder = Result
End Function
 

File đính kèm

  • Print_.xls
    42.5 KB · Đọc: 4
Upvote 0
Chạy được rồi thì kết thúc chủ đề rồi...
Cho em hỏi chúc xíu nhé:
- Khi nhắp chuột vào nút click trong file Print.xls mà anh gửi cho em, sau khi chọn thư mục chứa các file cần in xong thì em muốn sẽ xuất hiện thông báo "chọn sheet cần in". Sau khi chọn sheet cần in sẽ hiện ra thông báo "In trang lẻ hoặc trang chẵn hoặc in tất cả" được không ạ.
Túm lại yêu cầu cuối cùng của bạn là gì?
Sau hơn chục bài mà bạn chưa nêu rõ được vấn đề thì chịu thua. Không tài nào làm gì tiếp được.

Hỏi bạn cái bảng tổng hợp dữ liệu của các bạn học sinh thì bạn toàn gửi cái bảng trích riêng của từng bạn học sinh. Có hiểu cái bảng tổng hợp là gì không?

-------
Bài #24 trên, không được viết hoa toàn bài. Ngoài vi phạm nội quy thì còn khiếm nhã với người đọc.
Không được gửi nhiều bài khắp diễn đàn thế. Đã gửi nội quy để đọc rồi còn cố tình vi phạm? http://www.giaiphapexcel.com/diendan/threads/76052
 
Upvote 0
Sub Main()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Const extFile As String = "xls"
Dim pFolder As String, wb As Workbook, wsName As String, wbName As String
Dim arName, i As Long, aTem, pFile As String
pFolder = GetpFolder("")
If Len(pFolder) = 0 Then Exit Sub
pFolder = pFolder & "\"
arName = GetFilesInFolder(pFolder, extFile)
If typeName(arName) <> "Variant()" Then Exit Sub
wbName = VBA.UCase(ThisWorkbook.Name)
For Each aTem In arName
If Not VBA.UCase(aTem) Like wbName Then
pFile = pFolder & aTem
Set wb = Workbooks.Open(pFile)
wsName = NameSheet2Print(wb)
If Len(wsName) > 0 Then
wb.Worksheets(wsName).PrintOut 'In ngay
End If
wb.Close False
End If
Next aTem
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Function NameSheet2Print(ByVal wb As Workbook) As String
Dim ws As Worksheet
For Each ws In wb.Worksheets
If ws.Name Like "#*" Then
NameSheet2Print = ws.Name
Exit For
End If
Next ws
End Function

Public Function GetpFolder(ByVal pFolder As String) As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Select a Folder"
.AllowMultiSelect = False
.InitialFileName = pFolder
If .Show Then GetpFolder = .SelectedItems(1)
End With
End Function

Public Function GetFilesInFolder(ByVal pFolder As String, ByVal extensionFile As String)
Dim FSo As Object, objFolder As Object, objFile As Object, Result(), i As Long
Set FSo = CreateObject("Scripting.FileSystemObject")
Set objFolder = FSo.GetFolder(pFolder)
extensionFile = VBA.UCase(extensionFile)
For Each objFile In objFolder.Files
If VBA.UCase(FSo.GetExtensionName(objFile)) Like extensionFile Then
i = i + 1
ReDim Preserve Result(1 To i)
Result(i) = objFile.Name
End If
Next objFile
If i > 0 Then GetFilesInFolder = Result
End Function

==============================
Với đoạn code như trên (kèm theo file print ở dưới) thì chạy tốt rồi.
Nhưng mà khi in ra là nó in đồng loạt hết các file luôn. Cho nên tôi thấy nó chưa khả thi và như ý muốn của bản thân.
Chạy được rồi thì kết thúc chủ đề rồi...
Túm lại yêu cầu cuối cùng của bạn là gì?
Sau hơn chục bài mà bạn chưa nêu rõ được vấn đề thì chịu thua. Không tài nào làm gì tiếp được.
Chủ đề chưa mang tính khả thi thì sao lại kết thúc được...
Tôi có thể đưa ra yêu cầu và các phương án khác cho chủ đề chứ của tôi chứ...
Sau hơn chục bài thì tôi đúc kết lại cái yêu cầu cũng như phương cuối cùng của tôi là dưới đây mà tôi đã gởi cho anh rồi ....(ở bài #23 đó)
Nó đây này còn gì nữa :
====================
Cho em hỏi chúc xíu nhé:
- Khi nhắp chuột vào nút click trong file Print.xls mà anh gửi cho em, sau khi chọn thư mục chứa các file cần in xong thì em muốn sẽ xuất hiện thông báo "chọn sheet cần in". Sau khi chọn sheet cần in sẽ hiện ra thông báo "In trang lẻ hoặc trang chẵn hoặc in tất cả" được không ạ.

===================
Vậy anh chưa đọc sao....[
 

File đính kèm

  • Print_.xls
    42.5 KB · Đọc: 3
Lần chỉnh sửa cuối:
Upvote 0
Khi nhận ra vấn đề đã thấy mình sai.
Xin nhận lỗi mọi người.
Xin thứ lỗ cho tôi.
 
Upvote 0
Khi nhận ra vấn đề đã thấy mình sai.
Xin nhận lỗi mọi người.
Xin thứ lỗ cho tôi.
tanthanhkg Mình cũng không đọc từ đầu vấn đề. Nhưng câu này thì chúc mừng bạn "NGƯỜI BIẾT NHẬN LỖI LÀ NGƯỜI KHÔNG SAI VÀ LÀ NGƯỜI VĨ ĐẠI" Bạn sẽ là người thành công trong sự nghiệp. Chào thân ái!
 
Upvote 0
@Chủ thớt:
chủ đề kia loãng quá nên không viết bài ở đó nữa...
Chốt lại là mình cần in học bạ cho các bạn học sinh (với dữ liệu ban đầu có được là lấy từ phần mềm SMAS (*)) đúng không?
Bộ Giáo dục đã yêu cầu dùng phần mềm SMAS rồi thì lấy đó làm căn cứ, nên:
- Dùng thêm Excel để giải quyết những công việc cần mà SMAS chưa đáp ứng được ngay;
- Không cần lập thêm cơ sở dữ liệu trên Excel để quản lý nữa, khi đó không cần tạo thêm mã học sinh mới làm gì (ở bài #37 anh @VetMini giải thích về cái mã dài nhoằng đó cũng có lý do chính đáng mà chưa rõ).

Quay lại yêu cầu là in học bạ. Căn cứ dữ liệu ban đầu bạn đưa thì tạm thời đưa ra 2 phương án đã nêu ở #14:
Có 2 phương án:
- Một là viết code để mở từng file và in sheet cần in. (1)
- Gộp dữ liệu ở sheet cần in trong các files thành một bảng, rồi dùng 1 form để in hàng loạt. (2).
(1) đã làm.
(2) chưa làm vì:
- Chờ xem (*) có thể cung cấp được những files có cấu trúc dữ liệu như nào?
+ Nếu là các file thông tin của các bạn học sinh riêng lẻ (như đã gửi) thì tốn thời gian gộp lại thành bảng dữ liệu tổng hợp để truyền sang mẫu in (mẫu học bạ);
+ Nếu có thể cung cấp được file thông tin tổng hợp của tất cả các bạn học sinh (theo khối/ lớp) thì sẽ nhanh hơn. Cái này đang hỏi và chờ phản hồi?

Phương án cuối: Gửi đề nghị (Sở/ Bộ...) yêu cầu bên cung cấp phần mềm xử lý.
 
Upvote 0
Dạ mừng quá...
Trước tiên em xin cảm ơn Thầy befaint đã lên tiếng.
Em xin thành thật xin lỗi Thầy.
Vì lúc trước em chưa hiểu ra vấn đề cho nên .....
Mong Thầy thông cảm cho em.
 
Upvote 0
.........Chốt lại là mình cần in học bạ cho các bạn học sinh (với dữ liệu ban đầu có được là lấy từ phần mềm SMAS (*)) đúng không?
Dạ đúng như thế ạ.

Bộ Giáo dục đã yêu cầu dùng phần mềm SMAS rồi thì lấy đó làm căn cứ, nên:
- Dùng thêm Excel để giải quyết những công việc cần mà SMAS chưa đáp ứng được ngay;
- Không cần lập thêm cơ sở dữ liệu trên Excel để quản lý nữa, khi đó không cần tạo thêm mã học sinh mới làm gì (ở bài #37 anh @VetMini giải thích về cái mã dài nhoằng đó cũng có lý do chính đáng mà chưa rõ).
Dạ em hiểu, theo em được biết thì Mã HS mà phần mềm SMAS của Viettel tạo ra rất quan trọng vì trong đó có mã trường học, mã năm học, mã tỉnh... để khi Bộ giáo dục hoặc Sở GD kiểm tra sẽ phân biệt được trường nào thuộc tỉnh nào... đại khái là như vậy...Ngoài ra Viettel còn dùng mã này để nhắn tin báo điểm hàng tuần của HS về cho phụ huynh đúng tỉnh và đúng trường.

Quay lại yêu cầu là in học bạ. Căn cứ dữ liệu ban đầu bạn đưa thì tạm thời đưa ra 2 phương án đã nêu ở #14:
(1) đã làm.
(2) chưa làm vì:
- Chờ xem (*) có thể cung cấp được những files có cấu trúc dữ liệu như nào?
+ Nếu là các file thông tin của các bạn học sinh riêng lẻ (như đã gửi) thì tốn thời gian gộp lại thành bảng dữ liệu tổng hợp để truyền sang mẫu in (mẫu học bạ);
+ Nếu có thể cung cấp được file thông tin tổng hợp của tất cả các bạn học sinh (theo khối/ lớp) thì sẽ nhanh hơn. Cái này đang hỏi và chờ phản hồi?

Phương án cuối: Gửi đề nghị (Sở/ Bộ...) yêu cầu bên cung cấp phần mềm xử lý.

+ File tổng hợp thông tin của tất cả các bạn học sinh theo lớp (HS_THCS_SoGoiTenVaGhiDiem_8A1_CN.xls).
+ File Học bạ HS (1_HS_THCS_HocBaHocSinh_LeNgocLanAnh.xls)
Ngoài ra Mã HS lại nằm ở lại nằm ở một file khác là file (BM_DanhSachHocSinh_Khoi8_8A1_THCSTanThanh.xls)
Hai file trên đều xuất từ phần mềm SMAS xuống để in.

Trường học chỉ là người sử dụng phần mềm SMAS của Viettel. Nếu mình chỉ muốn đơn giản hóa công việc của mình đang cần làm như dùng Excel để in các loại hồ sơ sổ sách cho HS mà gởi đề nghị lên thì họ không chấp nhận đâu Thầy. Vì họ chỉ việc tạo ra mẫu theo đúng qui định mà thôi còn việc in ấn như thế nào thì phía người sử dụng tự làm.
Xin Thầy giúp đỡ nhiều.
Em xin cảm ơn
 

File đính kèm

  • HS_THCS_SoGoiTenVaGhiDiem_8A1_CN.xls
    438.5 KB · Đọc: 6
  • BM_DanhSachHocSinh_Khoi8_8A1_THCSTanThanh.xls
    1.5 MB · Đọc: 7
  • 1_HS_THCS_HocBaHocSinh_LeNgocLanAnh.xls
    30 KB · Đọc: 4
Upvote 0
+ File tổng hợp thông tin của tất cả các bạn học sinh theo lớp (HS_THCS_SoGoiTenVaGhiDiem_8A1_CN.xls).
+ File Học bạ HS (1_HS_THCS_HocBaHocSinh_LeNgocLanAnh.xls)
Ngoài ra Mã HS lại nằm ở lại nằm ở một file khác là file (BM_DanhSachHocSinh_Khoi8_8A1_THCSTanThanh.xls)
Hai file trên đều xuất từ phần mềm SMAS xuống để in.
- Mã học sinh lại không chạy theo trong 2 files: (HS_THCS_SoGoiTenVaGhiDiem_8A1_CN.xls) và (1_HS_THCS_HocBaHocSinh_LeNgocLanAnh.xls) thì chịu rồi, không có mã để làm căn cứ lấy dữ liệu trong file (BM_DanhSachHocSinh_Khoi8_8A1_THCSTanThanh.xls) nên file (BM_DanhSachHocSinh_Khoi8_8A1_THCSTanThanh.xls) tạm để đó.
- Giờ phương án như này:
1/ Sử dụng các files Học bạ của từng bạn học sinh (ví dụ là files 1_HS_THCS_HocBaHocSinh_LeNgocLanAnh.xls) để tổng hợp dữ liệu thành một bảng thông tin, rồi truyền vào mẫu học bạ rồi in. (*)
2/ Hoặc: Chuyển về cách mở từng file rồi in. Tức là chỉnh file ở bài #19 thêm chỗ lựa chọn sheet cần in, với sheet cuối (nội dung học bạ có 2 trang thì thêm lựa chọn trang cần in). Vì nhận thấy các files này có cấu trúc giống nhau.

Hỏi thêm (*): Phần "Điểm trung bình hoặc xếp loại" trong file (1_HS_THCS_HocBaHocSinh_LeNgocLanAnh.xls) khi xuất từ phần mềm SMAS ra đã có sẵn luôn tương ứng như trong file (HS_THCS_SoGoiTenVaGhiDiem_8A1_CN.xls) chứ? Trong 2 files đó đính kèm trên thì không thấy có tương ứng, file GhiDiem (a) thì có, file HocBaHocSinh (b) thì không có.
Nếu không có tương ứng thì có cần lấy từ (a) vào (b) không? Hay file (b) như nào thì in luôn?
 
Upvote 0
Em cảm ơn Thầy nhiều.
- Mã học sinh lại không chạy theo trong 2 files: (HS_THCS_SoGoiTenVaGhiDiem_8A1_CN.xls) và (1_HS_THCS_HocBaHocSinh_LeNgocLanAnh.xls) thì chịu rồi, không có mã để làm căn cứ lấy dữ liệu trong file (BM_DanhSachHocSinh_Khoi8_8A1_THCSTanThanh.xls) nên file (BM_DanhSachHocSinh_Khoi8_8A1_THCSTanThanh.xls) tạm để đó.
Dạ em đã hiểu.
- Giờ phương án như này:
1/ Sử dụng các files Học bạ của từng bạn học sinh (ví dụ là files 1_HS_THCS_HocBaHocSinh_LeNgocLanAnh.xls) để tổng hợp dữ liệu thành một bảng thông tin, rồi truyền vào mẫu học bạ rồi in. (*)
2/ Hoặc: Chuyển về cách mở từng file rồi in. Tức là chỉnh file ở bài #19 thêm chỗ lựa chọn sheet cần in, với sheet cuối (nội dung học bạ có 2 trang thì thêm lựa chọn trang cần in). Vì nhận thấy các files này có cấu trúc giống nhau.
Dạ trăm sự nhờ Thầy, vạn sự nhờ Thầy...
Hai phương án trên thì phương án nào có ưu điểm tốt nhất thì em nhờ Thầy chọn dùm em, miễn sao cập nhật được dữ liệu và in thành học bạ là tốt rồi.
Hỏi thêm (*): Phần "Điểm trung bình hoặc xếp loại" trong file (1_HS_THCS_HocBaHocSinh_LeNgocLanAnh.xls) khi xuất từ phần mềm SMAS ra đã có sẵn luôn tương ứng như trong file (HS_THCS_SoGoiTenVaGhiDiem_8A1_CN.xls) chứ?
Dạ đúng rồi Thầy ơi. Khi phần mềm SMAS xuất ra có sẵn luôn.
Trong file (1_HS_THCS_HocBaHocSinh_LeNgocLanAnh.xls) có những dữ liệu gì thì bên file này (HS_THCS_SoGoiTenVaGhiDiem_8A1_CN.xls) đều có dữ liệu đó, file này chính là file tổng hợp dữ liệu để truyền dữ liệu và các file khác đó Thầy ơi.
Mới thi HK1 xong đã tổng kết HKI và kết quả đã được cập nhật vào 2 file này rồi. Để em gởi lên lại cho Thầy xem.
Thầy xem file(HS_THCS_HocBaHocSinh_LeNgocLanAnh) trong nội dung các comment em có hướng dẫn.
Trong 2 files đó đính kèm trên thì không thấy có tương ứng, file GhiDiem (a) thì có, file HocBaHocSinh (b) thì không có.
Nếu không có tương ứng thì có cần lấy từ (a) vào (b) không? Hay file (b) như nào thì in luôn?
Dạ đúng rồi chưa tương ứng là vì:
Lúc em gởi 2 file này lên thì dữ liệu ở file (b) chưa có là vì chưa thi HKI cho nên SMAS chưa cập vào file này.
Vậy nay đã thi HKI xong và đã tổng kết thì SMAS đã truyền dữ liệu từ file (a) sang file (b) rồi Thầy ạ. Chính là 2 file dưới.
Nhờ Thầy giúp đỡ nhiều.
Chúc Thầy buổi tối vui vẻ nhé...
Em cảm ơn Thầy nhiều....
 

File đính kèm

  • HS_THCS_HocBaHocSinh_LeNgocLanAnh.xls
    43 KB · Đọc: 3
  • HS_THCS_SoGoiTenVaGhiDiem_8A1_CN.xls
    450.5 KB · Đọc: 3
Lần chỉnh sửa cuối:
Upvote 0
------------------
 

File đính kèm

  • HS_THCS_HocBaHocSinh_LeNgocLanAnh.xls
    43 KB · Đọc: 3
  • HS_THCS_SoGoiTenVaGhiDiem_8A1_CN.xls
    450.5 KB · Đọc: 3
Upvote 0
- Mã học sinh lại không chạy theo trong 2 files: (HS_THCS_SoGoiTenVaGhiDiem_8A1_CN.xls) và (1_HS_THCS_HocBaHocSinh_LeNgocLanAnh.xls) thì chịu rồi, không có mã để làm căn cứ lấy dữ liệu trong file (BM_DanhSachHocSinh_Khoi8_8A1_THCSTanThanh.xls) nên file (BM_DanhSachHocSinh_Khoi8_8A1_THCSTanThanh.xls) tạm để đó.
...................
Dạ đúng rồi trong 2 file này thì không có Mã học sinh.
Mà nó lại nằm trong file này (BM_DanhSachHocSinh_Khoi8_8A1_THCSTanThanh.xls)
 

File đính kèm

  • BM_DanhSachHocSinh_Khoi8_8A1_THCSTanThanh.xls
    1.5 MB · Đọc: 2
Upvote 0
Xem qua 2 files trên thấy đủ thông tin rồi.
Sắp xếp thời gian được thì mình sẽ làm.

------
Vấn đề xưng hô:
Ở phạm vi diễn đàn thì xưng hô ở mức xã giao là được rồi. (Anh/Tôi/Bạn gì gì đó thôi).
Mình cứ đôn người khác lên thầy/ tiền bối... nhiều khi làm người khác mắc cỡ, khó xử, ái ngại...
Mọi người vào diễn đàn với nhiều lý do nhưng thường là vì vướng mắc, cần hỗ trợ. Ở GPE mọi người thoải mái, làm được thì gửi bài hoặc vào chém gió vài câu cho vui nên ta thoải mái, không cần câu lệ khi người khác làm bài giúp mình.
(Vậy thôi, không bàn luận khúc này).
 
Upvote 0
Web KT
Back
Top Bottom