Chỉnh code VBA

Liên hệ QC

tnfsmith

Thành viên hoạt động
Tham gia
26/3/07
Bài viết
151
Được thích
0
Giới tính
Nam
Mình có đoạn code như bên dưới. Code này có tính năng là nó sẽ lấy dữ liệu ở một file Excel mình chỉ định để tổng hợp thành một file mới. Tuy nhiên đoạn code trên mỗi lần khởi chạy là nó tự động tạo ra một workbook mới để lưu vào sheet1. Mình muốn cho dữ liệu mới này lưu vào một sheet mình đang mở thì chỉnh như thế nào?. VD: Mình có một file excel tên là Data.xls với các sheet1 có chứa một nút bấm tên là Cập nhật và gắn đoạn code trên vào, mình muốn khi nhấn vào thì nó sẽ lấy dữ liệu chỉ định để gắn vào sheet2 or một sheet nào đó trên workbook này.

Mã:
 ' Add a new workbook with one sheet.
        Set BaseWks = Workbooks.Add(xlWBATWorksheet).Worksheets(1) 
        rnum = 1
Mình biết là đoạn code trên tạo ra một workbook mới mà không biết chỉnh thế nào. Mong anh em giúp đở dùm. Cám ơn nhiều lắm.

Mã:
Private Declare Function SetCurrentDirectoryA Lib _ 
"kernel32" (ByVal lpPathName As String) As Long 
 
Sub ChDirNet(szPath As String) 
    SetCurrentDirectoryA szPath 
End Sub 
 
 
Sub MergeSpecificWorkbooks() 
    Dim MyPath As String 
    Dim SourceRcount As Long, FNum As Long 
    Dim mybook As Workbook, BaseWks As Worksheet 
    Dim sourceRange As Range, destrange As Range 
    Dim rnum As Long, CalcMode As Long 
    Dim SaveDriveDir As String 
    Dim FName As Variant 
     
     
     ' Set application properties.
    With Application 
        CalcMode = .Calculation 
        .Calculation = xlCalculationManual 
        .ScreenUpdating = False 
        .EnableEvents = False 
    End With 
     
    SaveDriveDir = CurDir 
     ' Change this to the path\folder location of the files.
    ChDirNet "D:\_LN" 
     
    FName = Application.GetOpenFilename(filefilter:="Excel Files (*.*), *.*", _ 
    MultiSelect:=True) 
    If IsArray(FName) Then 
         
         ' Add a new workbook with one sheet.
        Set BaseWks = Workbooks.Add(xlWBATWorksheet).Worksheets(1) 
        rnum = 1 
         
         
         ' Loop through all files in the myFiles array.
        For FNum = LBound(FName) To UBound(FName) 
            Set mybook = Nothing 
            On Error Resume Next 
            Set mybook = Workbooks.Open(FName(FNum)) 
            On Error Goto 0 
             
            If Not mybook Is Nothing Then 
                 
                On Error Resume Next 
                With mybook.Worksheets(1) 
                    Set sourceRange = .Range("A1:C1") 
                End With 
                 
                If Err.Number > 0 Then 
                    Err.Clear 
                    Set sourceRange = Nothing 
                Else 
                     ' If the source range uses all columns then
                     ' skip this file.
                    If sourceRange.Columns.Count >= BaseWks.Columns.Count Then 
                        Set sourceRange = Nothing 
                    End If 
                End If 
                On Error Goto 0 
                 
                If Not sourceRange Is Nothing Then 
                     
                    SourceRcount = sourceRange.Rows.Count 
                     
                    If rnum + SourceRcount >= BaseWks.Rows.Count Then 
                        MsgBox "There are not enough rows in the target worksheet." 
                        BaseWks.Columns.AutoFit 
                        mybook.Close savechanges:=False 
                        Goto ExitTheSub 
                    Else 
                         
                         ' Copy the file name in column A.
                        With sourceRange 
                            BaseWks.Cells(rnum, "A"). _ 
                            Resize(.Rows.Count).Value = FName(FNum) 
                        End With 
                         
                         ' Set the destination range.
                        Set destrange = BaseWks.Range("B" & rnum) 
                         
                         ' Copy the values from the source range
                         ' to the destination range.
                        With sourceRange 
                            Set destrange = destrange. _ 
                            Resize(.Rows.Count, .Columns.Count) 
                        End With 
                        destrange.Value = sourceRange.Value 
                        rnum = rnum + SourceRcount 
                    End If 
                End If 
                mybook.Close savechanges:=False 
            End If 
             
        Next FNum 
        BaseWks.Columns.AutoFit 
    End If 
     
ExitTheSub: 
     ' Restore the application properties.
    With Application 
        .ScreenUpdating = True 
        .EnableEvents = True 
        .Calculation = CalcMode 
    End With 
    ChDirNet SaveDriveDir 
End Sub

File code đính kèm bên dưới.
 

File đính kèm

Lần chỉnh sửa cuối:
Vẫn chưa có ai giải quyết bài toán này dùm mình ah. Hix hix
 
Upvote 0
Vẫn chưa có ai giải quyết bài toán này dùm mình ah. Hix hix
Cái vụ lấy dữ liệu từ file đang đóng này đã bàn trên diễn đàn khoảng vài chục lần rồi ---> Bạn tự tìm đi, chứ giờ phải làm lại những chuyện.. đã cũ rích thế này thì.. làm biếng quá
(Hổng "mới" thì hổng "hứng")--=0
 
Upvote 0
Cái code này hay hơn những code khác nhiều lắm bạn ah. Mình thử test nhiều code lấy dữ liệu đổ vào một sheet nhưng kết quả test trên excel 2003 và 2007 and later not working probably. Code này chuẩn nhất, chỉ còn lại 1 vấn đề là thay vì nó đỗ dữ liệu vào một worksheet in one workbook mới thôi. Chỉ cần chỉnh lại cái code cho nó đỗ vào một sheet trên một workbook đang hoạt động là đc. Mình chỉ cần chỉnh thế thôi. Anyone can help me?
 
Upvote 0
Cái code này hay hơn những code khác nhiều lắm bạn ah. Mình thử test nhiều code lấy dữ liệu đổ vào một sheet nhưng kết quả test trên excel 2003 và 2007 and later not working probably. Code này chuẩn nhất, chỉ còn lại 1 vấn đề là thay vì nó đỗ dữ liệu vào một worksheet in one workbook mới thôi. Chỉ cần chỉnh lại cái code cho nó đỗ vào một sheet trên một workbook đang hoạt động là đc. Mình chỉ cần chỉnh thế thôi. Anyone can help me?
Chờ một chút nhé, tôi đang tra từ điển một số từ tiếng Anh mà tôi "không gành lắm".
 
Upvote 0
Hix dịch xong chưa thầy nhỉ?
 
Upvote 0
PHP:
 ' Add a new workbook with one sheet.'
        Set BaseWks = Workbooks.Add(xlWBATWorksheet).Worksheets(1) 
        rnum = 1

Mình biết là đoạn code trên tạo ra một workbook mới mà không biết chỉnh thế nào. Mong anh em giúp đở dùm. Cám ơn nhiều lắm.

PHP:
'Use active workbook to save to, sheet "General" (for example)'
        Set BaseWks = ThisWorkbook.Sheets("General")
        rnum = 1
 
Upvote 0
Web KT

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

Back
Top Bottom