Thêm sheet khi mở

Liên hệ QC

diemvuongvathuongde

Thành viên chính thức
Tham gia
5/11/07
Bài viết
75
Được thích
2
Chào các bác.
Em có vấn đề này mong các bác giúp em đoạn code để thực hiện
Có 2 Workbooks là Main và ReportTemp, em muốn khi mở Main thì copy sheet "abc" trong ReportTemp và dán vào Main .
Cảm ơn các bác trước .
 
Ối dời, đã diêm vương lại còn thượng đế, đứng cạnh nhau kiểu này không đánh nhau mới lạ.
Bây giờ thì vận dụng thử cái này mà choảng nhau nhé. Vỡ đầu mặc kệ.
Windows("DiemVuong").Activate
Cells.Copy
Windows("ThuongDe").Activate
ActiveSheet.Paste
 
Upvote 0
Các bác nghiên cứu giúp em đi .
Bạn nói không rõ ràng lắm. Thôi thì cứ cho là trong ReportTemp.xls đang có sẵn một cái Sheet có tên là "abc", và bạn muốn rằng khi mở Main.xls ra thì tự động chép hết những gì đang có trong cái Sheet "abc" của ReportTemp.xls, và dán vào cái Sheet nào đang được chọn (tức là cái Sheet được mở ra lần sau cùng trước khi đóng file) của Main.xls.

Phải vậy không? Nếu đúng, thì bạn làm như sau:

Giả sử hai File này (Main.xls và ReportTemp.xls) đều nằm chung trong một thư mục.

Mở cái File Main.xls ra, mở VBA rồi nhập nội dung sau đây cho sự kiện Open của ThisWorkbook:

Mã:
Private Sub Workbook_Open()
    With Application
        .ScreenUpdating = False
            Workbooks.Open Filename:=ThisWorkbook.Path & "\" & "ReportTemp.xls"
            Workbooks("ReportTemp.xls").Sheets("abc").Cells.Copy
            Windows("Main.xls").Activate
            ActiveSheet.Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
        .CutCopyMode = False
            Workbooks("ReportTemp.xls").Close
            Range("A1").Select
        .ScreenUpdating = True
    End With
End Sub

Lưu file Main.xls và đóng luôn nó lại. Rồi thử mở cái file Main.xls này lên xem điều gì xảy ra... Nhưng mà tôi nói trước, tất cả những gì bạn đang có trong cái Sheet hiện hành của Main.xls sẽ mất hết, thay thế vào đó là nội dung của Sheet "abc" của ReportTemp.xls.
 
Upvote 0
Cảm ơn bác BNTT. Em mô tả thêm nhé . Ban đầu thằng Main nó chưa có sheet "abc", thằng ReportTemp có sẵn sheet "abc". Mở main thì copy sheet "abc" từ ReportTemp sang Main - Đoạn kiểm tra "abc" có trên Main chưa thì em làm đươc.
 
Upvote 0
Cảm ơn bác BNTT. Em mô tả thêm nhé . Ban đầu thằng Main nó chưa có sheet "abc", thằng ReportTemp có sẵn sheet "abc". Mở main thì copy sheet "abc" từ ReportTemp sang Main - Đoạn kiểm tra "abc" có trên Main chưa thì em làm đươc.
Vậy cho tôi hỏi, nếu như trong Main.xls đã có sẵn Sheet "abc" thì làm gì ?
Và nếu như trong Main.xls chưa có Sheet "abc" thì làm gì ?
 
Upvote 0
Trời, nói vậy mà bạn không vận dụng được.
Khi mở Main lên thì kiểm tra xem cái ReportTemp đã được mở chưa, nhớ là làm trong sự kiện Workbook_Open như BTNN đã nói, sau đó kiểm tra xem đã có Sheets("ABC") chưa, nếu chưa có thì chèn thêm 1 Sheet vào
PHP:
    Dim I As Integer
    Dim DaCo As Boolean    
    For I = 1 To Workbooks.Count
        If Workbooks(I).Name = "ReportTemp" Then DaCo = True: Exit For
    Next
    If Not DaCo Then
         'Mở file như BTNN đã nói'    
    End If
    'Kiểm tra trong Main'
    For I = 1 to Sheets.count
         If Sheets(I).Name = "ABC" Then DaCo = True: Exit For
    Next
    If Not DaCo then
         Dim Sh As Worksheet
         Set Sh = Sheets.Add
         Sh.Name ="ABC"
    end if
    'Bây giờ thì paste vào "ABC"'
 
Upvote 0
Nếu Main có "abc" rồi thì không làm gì cả, ngược lại thì copy "abc" từ ReportTemp sang Maịn
Xin đề nghị cái này:
Mã:
Private Sub Workbook_Open()
    Dim iWS As Long
        iWS = Worksheets.Count
    For i = 1 To iWS
        If Workbooks("Main.xls").Sheets(i).Name = "abc" Then Exit Sub
    Next
    With Application
        .ScreenUpdating = False
            Workbooks.Open Filename:=ThisWorkbook.Path & "\" & "ReportTemp.xls"
            Workbooks("ReportTemp.xls").Sheets("abc") _
                .Copy After:=Workbooks("Main.xls").Sheets(iWS)
            Workbooks("ReportTemp.xls").Close
            Range("A1").Select
        .ScreenUpdating = True
    End With
End Sub
 
Upvote 0
Xin bổ sung thêm việc nếu như file ReportTemp.xls đã mở rồi thì thôi không mở nó nữa, nhưng sau khi đã copy Sheet "abc" vào Main.xls (hoặc không) thì vẫn đóng ReportTemp.xls:
Mã:
Private Sub Workbook_Open()
    Dim iWS As Long
        iWS = Sheets.Count
    For i = 1 To iWS
        If Workbooks("Main.xls").Sheets(i).Name = "abc" Then Exit Sub
    Next
    With Application
        .ScreenUpdating = False
            Dim FileDangMo As Boolean
            For Each Workbook In Application.Workbooks
                If Workbook.Name = "ReportTemp.xls" Then FileDangMo = True: Exit For
            Next
            If FileDangMo = True Then _
                Workbooks.Open Filename:=ThisWorkbook.Path & "\" & "ReportTemp.xls"
            Workbooks("ReportTemp.xls").Sheets("abc") _
                .Copy After:=Workbooks("Main.xls").Sheets(iWS)
            Workbooks("ReportTemp.xls").Close
            Range("A1").Select
        .ScreenUpdating = True
    End With
End Sub
 
Upvote 0
Chắc vội nên BNTT chưa test lại, xin sửa lại một chút
Mã:
Private Sub Workbook_Open()
    Dim iWS As Long
        iWS = Sheets.Count
    For i = 1 To iWS
        If Workbooks("Main.xls").Sheets(i).Name = "abc" Then Exit Sub
    Next
    With Application
        .ScreenUpdating = False
            Dim FileDangMo As Boolean
            For Each Workbook In Application.Workbooks
                If Workbook.Name = "ReportTemp.xls" Then FileDangMo = True: Exit For
            Next
            If [COLOR=red]FileDangMo = False[/COLOR] Then _
                Workbooks.Open Filename:=ThisWorkbook.Path & "\" & "ReportTemp.xls"
            Workbooks("ReportTemp.xls").Sheets("abc") _
                .Copy After:=Workbooks("Main.xls").Sheets(iWS)
            Workbooks("ReportTemp.xls").Close
            Range("A1").Select
        .ScreenUpdating = True
    End With
End Sub
 
Upvote 0
Các bác tiếp tục giúp em nhé
Em muốn đưa đoạn code vào trong sheet "abc" (Khi "abc" ở ReportTemp thì không có code). Em xin đưa ra ví dụ: Sau khi Main được mở và có sheet "abc" thì bổ sung đoạn code sau vào trong sự kiện của "abc", với điều kiện VBA của Main được protect với mật khẩu "123"
Mã:
Private Sub Worksheet_Activate()
    MsgBox "Xin cam on"
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom