Cách tham chiếu tới Workbook được tạo bằng VBA

  • Thread starter Thread starter sealand
  • Ngày gửi Ngày gửi
Liên hệ QC

sealand

Thành viên gạo cội
Tham gia
16/5/08
Bài viết
4,883
Được thích
7,688
Giới tính
Nam
Nghề nghiệp
Kế Toán
Gần đây, mình có tham gia viết 1 số bài về tạo các file con từ kết quả lọc file chính. Mình tìm ra 1 cách rất nhanh mà sử lý lại tiện tại file gôc trước khi trích lập file con.
Các bạn tham khảo đoạn code sau sẽ tạo 1 file lưu dữ liệu của sheet1(Data) thành 1 file mới với chỉ 1 sheet có tên trùng với Sheet1 (Data.)

Mã:
Option Explicit
Sub Thu()
Dim sh As Worksheet
Sheets(Sheet1.Name).Copy After:=Sheets(Sheets.Count)
Set sh = Sheets(Sheets.Count)

'Làm gì đó trước khi lưu tuỳ ý
sh.Move
End Sub
Nhưng cái mình đang mắc làm sao tham chiếu được tới cái file mới tạo ra này để đặt tên cho nó và lưu nó vào đâu đó.
Mong các bạn chỉ giùm
 
Lần chỉnh sửa cuối:
Em cũng đang tập tành học Macro nên còn chưa hiểu lắm ý của thầy. Nhưng sau khi chạy thử code của thầy thì thấy kết quả giống như cái mà em thường làm để lưu riêng dữ liệu. Giống như vầy:
PHP:
    .....
    Sheets("DATA").Copy
    ActiveWorkbook.SaveAs Filename:= "C:\Documents and Settings\Logica\My Documents\Logica1.xls"
    ActiveWorkbook.Close 
     .....
 
Upvote 0
Gần đây, mình có tham gia viết 1 số bài về tạo các file con từ kết quả lọc file chính. Mình tìm ra 1 cách rất nhanh mà sử lý lại tiện tại file gôc trước khi trích lập file con.
Các bạn tham khảo đoạn code sau sẽ tạo 1 file lưu dữ liệu của sheet1(Data) thành 1 file mới với chỉ 1 sheet có tên trùng với Sheet1 (Data.)

Mã:
Option Explicit
Sub Thu()
Dim sh As Worksheet
Sheets(Sheet1.Name).Copy After:=Sheets(Sheets.Count)
Set sh = Sheets(Sheets.Count)

'Làm gì đó trước khi lưu tuỳ ý
sh.Move
End Sub
Nhưng cái mình đang mắc làm sao tham chiếu được tới cái file mới tạo ra này để đặt tên cho nó và lưu nó vào đâu đó.
Mong các bạn chỉ giùm
Sau anh không tạo Workbook trước rồi hằn copy sheet? Như vầy:
PHP:
Sub Thu()
  Dim sh As Worksheet, NewWb As Workbook
  Set NewWb = Workbooks.Add
  ThisWorkbook.Sheets(Sheet1.Name).Copy NewWb.Sheets(1)
End Sub
Cái thằng NewWb chính là Workbook mà anh cần. Muốn lưu hay làm gì tùy ý
 
Upvote 0
Tham gia thêm
Mã:
Sub Thu()
Dim sh As Worksheet
Sheets(Sheet1.Name).Copy After:=Sheets(Sheets.Count)
Set sh = Sheets(Sheets.Count)
sh.Move
[COLOR=red]     With ActiveWorkbook
        .SaveAs Filename:="C:\vidu1"
        .Close
    End With
[/COLOR]End Sub
 
Upvote 0
Cách Ndu nêu là cách mà anh em mình vẫn làm, nhưng sử dụng cách này nó chậm khi ta trích lưu dữ liệu lớn. Mình muốn tìm cách khác và so sánh nó xem sao? Cũng như hỏi Ndu sử lý cùng dữ liệu trên range và array thì Ndu trả lời như đinh đóng cột vậy.
 
Upvote 0
Cách của Bác ChiBi "ngon" đấy. Cám ơn Bác nha
Logica nhầm rồi, mình chỉ lưu cái sheet Data thôi còn râu ria bỏ tuốt. Trích lưu mà
À, mà quên các bạn cho xin luôn câu lệnh nén file kết quả thành *.rar với. Nó cứ âm thầm làm, không hiện Window WindRar.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi thấy cách của Ndu mới đúng là "ngon", còn cách của ChiBi thì từ trước tới nay tôi vẫn làm nhưng cách đây vài hôm khi thử sức với bài "tách lớp và năm sinh bằng VBA" thì gặp sự cố là không biết tại sao lúc chạy được, lúc thì lỗi nhưng khi đóng vào rồi mở lại thì OK (tôi đã pots bài sang 1 Topic mới để hỏi nhưng sau một buổi đánh vật với nó đã phát hiện ra là khi copy sheet nhiều lần là "bác Bill mệt không cho làm nữa" nên đã sửa lại code và sửa lại bài).

Còn với code của Ndu thì tôi thử thế này (bỏ biến) vẫn chạy được, không biết có ảnh hưởng gì khác không ?
Mã:
Sub Thu()
  ThisWorkbook.Sheets(Sheet1.Name).Copy Workbooks.Add.Sheets(1)
End Sub
Mặc dù tôi đã bị nhắc nhở nhiều lần về cách viết này nhưng do tôi không hiểu nhiều về biến nên khi khai báo bừa là lỗi code không chạy được nhưng nhiều khi cứ bỏ quách nó đi thì lại OK vì vậy chỉ khi nào code không chạy thì tôi mới tìm cách để khai báo... hi...hi...
 
Upvote 0
Mặc dù tôi đã bị nhắc nhở nhiều lần về cách viết này nhưng do tôi không hiểu nhiều về biến nên khi khai báo bừa là lỗi code không chạy được nhưng nhiều khi cứ bỏ quách nó đi thì lại OK vì vậy chỉ khi nào code không chạy thì tôi mới tìm cách để khai báo... hi...hi...
Nói chung thì em sẽ không dùng biến trong các trường hợp
- Cái nào chỉ dùng có 1 lần duy nhất
- Cái nào có thể With... End With

Ngoài ra thì:
- Anh cứ làm bất cứ thứ gì mà anh nghĩ là mình hiểu rõ nhất
- Chỉ làm theo lời khuyên của chuyên gia khi đã khẳng định được chắc chắn điều người ta khuyên là cần thiết
(có nhiều món mãi đến hôm nay em mới dùng mặc dù trước đó đã từng biết)
Và mấy thứ mà em cho là cần thiết là:
- Luôn luôn có dòng Option Explicit trên đầu code
- Tên biến (nếu có) thì phải nên đặt cho khoa học, ngắn gọn, dễ hiểu
- Nghiên cứu cách đặt biến sao cho khi thay đổi dữ liệu thì chỉ cần sửa 1 chổ duy nhất (mọi chổ khác sẽ liên kết "theo")

vân vân và vân vân
 
Upvote 0
Web KT

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

Back
Top Bottom