Sub copy dữ liệu từ file khác vào sheet của file hiện hành (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

TrungChinhs

Thành viên tích cực
Tham gia
18/2/08
Bài viết
1,475
Được thích
2,470
Nghề nghiệp
Công chức
Chào các bạn ! Mình muốn nhờ các bạn giúp mình viết Sub copy dữ liệu từ file khác (gọi là file nguồn) vào sheet của file hiện hành (gọi là file đích) cụ thể như sau:

Khi muốn copy dữ liệu từ một sheet của file nguồn vào một sheet của file đích mình thường dùng macro nhưng trước đó mình phải copy sheet (Copy sheet chứ không phải copy dữ liệu trong sheet) chứa dữ liệu nguồn sang file đích, sau khi copy xong dữ liệu sang sheet đích thì xoá sheet nguồn đi.

Mình muốn có một sub khi gọi ra thì có Msgbox yêu cầu nhập tên file và tên sheet cần copy và OK là xong (file nguồn đã được mở). Rất mong các bạn quan tâm giúp. Mình xin cảm ơn !
 
Chào các bạn ! Mình muốn nhờ các bạn giúp mình viết Sub copy dữ liệu từ file khác (gọi là file nguồn) vào sheet của file hiện hành (gọi là file đích) cụ thể như sau:

Khi muốn copy dữ liệu từ một sheet của file nguồn vào một sheet của file đích mình thường dùng macro nhưng trước đó mình phải copy sheet (Copy sheet chứ không phải copy dữ liệu trong sheet) chứa dữ liệu nguồn sang file đích, sau khi copy xong dữ liệu sang sheet đích thì xoá sheet nguồn đi.

Mình muốn có một sub khi gọi ra thì có Msgbox yêu cầu nhập tên file và tên sheet cần copy và OK là xong (file nguồn đã được mở). Rất mong các bạn quan tâm giúp. Mình xin cảm ơn !
Gởi cho bạn 1 code, mở file (explore), nhập tên sheet cần lấy và OK. Bạn có thể triển khai là copy vùng nào vào.
 

File đính kèm

Upvote 0
To anh TN: Khi mình nhập tên sheet cần copy, nếu nhập đúng thì nó thông báo đã copy xong... nhưng khi nhập một tên sheet ko tồn tại thì nó ko báo lỗi gì hết, vẫn báo đã copy xong..
 
Upvote 0
Nếu muốn chính xác hết thì thử file này xem sao.
(Lười không muốn code lại. Xin phép được sửa code của bác ThuNghi chút nhé :-=.)
 

File đính kèm

Upvote 0
Nếu muốn chính xác hết thì thử file này xem sao.
(Lười không muốn code lại. Xin phép được sửa code của bác ThuNghi chút nhé :-=.)
Tuyệt cú mèo...
Thao tác thì chỉ có 3 giây mà code thì nhìn phát ngán luôn... Chắc phải từ từ ngâm cứu mới nuốt trôi nổi!
Cảm ơn bạn nhiều... (chờ vài bửa có gì không hiểu chắc phải thọ giáo tiếp)
Hiện giờ thì có mấy chổ nhờ bạn giúp:
1> Khi dùng Private Function thì tôi không thấy nó xuất hiện hàm trong menu Insert\Function ---> Tại sao vậy?
2> Nếu tôi bỏ Private thì sao?
3> Khi nào thì cần thiết dùng đến cái "Private" này?

Thông cãm! Đang học, bạn đừng cười
 
Upvote 0
Khi click vào command lấy dữ liệu thì mình phải chọn file để nó lấy sheet cần copy nhưng ta ko chọn file và nhấn cancel thì nó vẫn báo "đã lấy dữ liệu xong, chúc vui vẻ "
Theo như roll nói thì nó vẫn chưa chính xác.
 
Upvote 0
Xin lỗi mọi người vì đang vội nên chưa nói rõ mấy điểm như sau:
To ditimdl: Vì ví dụ của bác ThuNghi bắt nhập vào tên Sheet trong khi người dùng chưa biết chính xác tên Sheet của file cần thêm là gì, nên mình đưa ra giải pháp này để người dùng có thể chọn luôn tên Sheet cho "chính xác"

To ndu96081631: Mình đã có comment là sửa lại code của bác ThuNghi chút, mà xin phép sửa thì mình không dám xóa code cũ nên phải để lại. Nếu mà khó nuốt trôi thì mong bác thông cảm :-=. Xin được gửi lại code mới như file đính kèm. Còn mấy vấn đề bác hỏi tôi xin trả lời thế này, nếu có gì chưa thỏa đáng mong bác góp ý.
1> Khi dùng Private Function thì tôi không thấy nó xuất hiện hàm trong menu Insert\Function ---> Tại sao vậy?
(menu Insert\Function??? cái này hình như là Insert\Procedure, nhưng tôi chưa bao giờ dùng cách này, nên chưa rõ ý của câu hỏi này)
2> Nếu tôi bỏ Private thì sao?
(Nếu bỏ Private đi thì VAB sẽ coi như Public, vì cái này là mặc định)
3> Khi nào thì cần thiết dùng đến cái "Private" này?
(Khi viết 1 hàm mà không muốn các Module khác truy cập tới. Tôi lấy ví dụ như sau: Khi tôi xây dựng 1 hàm để đọc 1 số bất kỳ, hàm này đương nhiên là Public, khi xây dựng hàm này, để đơn giản tôi sẽ xây dựng thêm 2 hàm con, 1 là hàm đọc 1 con số 1,2,3,..., 2 là hàm đọc 1 nhóm 3 chữ số. Như vậy 2 hàm này nên là Private, vì nó chỉ được sử dụng trong hàm đọc 1 số bất kỳ, còn sử dụng độc lập thì nó không có nhiều ý nghĩa)
 

File đính kèm

Upvote 0
1> Khi dùng Private Function thì tôi không thấy nó xuất hiện hàm trong menu Insert\Function ---> Tại sao vậy?
(menu Insert\Function??? cái này hình như là Insert\Procedure, nhưng tôi chưa bao giờ dùng cách này, nên chưa rõ ý của câu hỏi này)

Ah... là tôi đang nói đến menu trong bảng tính ấy (không phải menu trong cửa số VBE)... Bạn xem lại giúp
 
Upvote 0
Ah... là tôi đang nói đến menu trong bảng tính ấy (không phải menu trong cửa số VBE)... Bạn xem lại giúp

Như tôi đã giải thích về cái Private, khi 1 hàm được xây dựng là Private thì chỉ có thể truy xuất trên chính Module đó thôi, nên đương nhiên ở đây bác ko thấy được là đúng rồi.
 
Upvote 0
Tk RollOver79 nhiều lắm. File rất hay. Có nên thêm ...DisplayAlerts = False khi cancel không.
Private Sub cmdCancel_Click()
On Error Resume Next
With Application
.DisplayAlerts = False
End With
TgtWb.Close
With Application
.DisplayAlerts = True
End With

Unload Me
End Sub
 
Upvote 0
Hi!
Hay quá vấn đề này Tôi đã từng nhờ nvson xử lý dùm nay thấy code này chạy nhanh hơn nhưng còn giới hạn chỉ cho chọn 1 file thui, còn nếu muốn chọn nhiều file lấy cùng 1 tên sheet không biết có thêm chọn lựa này được không?.

Cải tiến giùm nhen.

Thân.
 
Upvote 0
Chà, ước muốn của con người thật là bao la :D. Bạn xem thử xem file này nhé.
 

File đính kèm

Upvote 0
To roll: sửa code như thế nào để nó nhận luôn cả 2 đuôi xls & xlsx luôn không?
 
Upvote 0
Hi rollover79 !

Hình như sau khi lấy dl xong thì chỉ đóng có 1 file thui các file còn lại không tự đóng lại.

Thân.

Xin lỗi do chon 2 file 2 lần chứ không phải 1 lần chọn 2 file nên code dk đầu chỉ đóng 1 file còn dk 2 thì OK.

Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
To roll: sửa code như thế nào để nó nhận luôn cả 2 đuôi xls & xlsx luôn không?
Nếu muốn show cả file có đuôi xlsx khi Open file thì dễ thôi, bạn chỉ cần thêm vào cái tham số filefilter của phương thức GetOpenFilename là OK, ví dụ
Mã:
    [B]filefilter:="Excel files(*.xls),*.xls,Excel 2007 files(*.xlsx),*.xlsx"[/B]
Tuy nhiên mình chưa làm việc với Excel 2007 nên không chắc là với đoạn code của mình có làm tốt trên Excel 2007 hay không, bạn nào thử xem kết quả thế nào nhé. Nếu không làm việc được với Excel 2007 thì nhờ các bác sửa code cho nó chạy luôn được thì tốt :D.

Thanks!
 
Upvote 0
Hi rollover79 !
Xin lỗi do chon 2 file 2 lần chứ không phải 1 lần chọn 2 file nên code dk đầu chỉ đóng 1 file còn dk 2 thì OK.

Thân.
Đúng là vẫn còn thiếu xót thật :-D, cảm ơn bạn Thien(ko rõ là Thiên, Thiện, Thiền hay ...)
Bạn thử thay đoạn code của event cmdOpen_Click như sau xem sao nhé.
Mã:
    'iPos = UBound(arrTargetWb) - 1
    For i = LBound(arrFileName) To UBound(arrFileName)
        If InStr(1, strTemp, arrFileName(i)) = 0 And arrFileName(i) <> SourceWb.FullName Then
            strTemp = strTemp & arrFileName(i)
            strFileName = Mid(arrFileName(i), InStrRev(arrFileName(i), "\") + 1, Len(arrFileName(i)) - 4 - InStrRev(arrFileName(i), "\"))
            'iPos = iPos + 1
            iPos = lstSheetName.ListCount
            ReDim Preserve arrTargetWb(iPos)
            Set arrTargetWb(iPos) = Workbooks.Open(arrFileName(i))
            For j = 1 To arrTargetWb(iPos).Sheets.Count
                lstSheetName.AddItem iPos
                lstSheetName.List(lstSheetName.ListCount - 1, 1) = arrTargetWb(iPos).Sheets(j).Name
                lstSheetName.List(lstSheetName.ListCount - 1, 2) = "[" & strFileName & "]" & arrTargetWb(iPos).Sheets(j).Name
            Next
        End If
    Next
 
Upvote 0
Nếu mình muốn chỉ copy dữ liệu, cụ thể ở đây là số thì sửa lại thế nào vậy?
 
Upvote 0
Nếu mình muốn lấy dữ liệu từ file mặc định mình chỉ add vào lần đầu thì làm thế nào ạ, với lại trong sheet mình chỉ muốn lấy từng vùng dữ liệu thì thế nào ạ? Mong các anh chị chỉ bảo cho em với. Em đang cần ạ
 
Upvote 0
Bạn có thể dịch dùm mình các đoạn code trong đó không. Mình đang học.
 
Upvote 0
Mình chỉ muốn lấy một số thông tin dòng cuối cùng của file thay vì copy toàn bộ sheet thì làm cách nào ạ, các anh giúp em với
 
Upvote 0

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

Back
Top Bottom