Tạo sheet mới và copy dữ liệu vào sheet đó

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

civil

Thành viên mới
Tham gia
19/8/07
Bài viết
12
Được thích
0
Nghề nghiệp
Civil engineer
Tui có 1 bảng tính, tính toán với từng trường hợp khác nhau, muốn khi tính toán xong mỗi trường hợp, có 1 hàm macro tự động tạo 1 sheet mới, đặt tên cho sheet mới và copy dữ liệu sang sheet mới đó, với điều kiện sheet mới đó chưa tồn tại, nếu tên sheet mới đã tồn tại, thì copy lại vào sheet đã tồn tại
Các cao thủ giúp gợi ý viết code macro này cái
Thanks
 
không biết như thế này có đúng ý của cậu ko nhỉ?
sub taosheetmoi()
dim w1 as worksheet
'thêm một sheet mới vào sheét cuối cùng
set w1 sheets.add(after:=sheets(sheets.count),type:=xlworksheet)
Sheets("Sheet1").[D17:K17].Copy: Sheets("w1").[D21:K21].PasteSpecial _
'Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
end sub
 
Upvote 0
Bạn thử code này xem có đúng ý không ?
Mã:
Sub Sheets_Luu()
On Error Resume Next
With Application
  .ScreenUpdating = False
      Sheets("Luu").Select
      If Err <> 0 Then
        Sheets.Add.Name = "Luu"
        Sheets("Luu").Move after:=Sheets("Goc")
      End If
      Sheets("Goc").[a1:z1000].Copy Sheets("Luu").[A1]
      Sheets("Goc").Select
  .ScreenUpdating = True
End With
End Sub
 
Upvote 0
Sau không dùng chức nang Move or Copy (Move to end) nhỉ? Quá đơn giản luôn
 
Upvote 0
Sau không dùng chức nang Move or Copy (Move to end) nhỉ? Quá đơn giản luôn
--------
Nhưng còn vấn đề đặt tên sheet thì sao hả chú ?. Ví dụ sheet1 sau khi move or copy thì sheet mới có tên từ cell A1 của sheet1 (Tóm tắt : Code vừa move or copy vừa lấy tên từ địa chỉ của 1 cell). Trong trường hợp sheet mới đang có thì số liệu được cộng dồn thì sao chú à ?.
 
Lần chỉnh sửa cuối:
Upvote 0
--------
Nhưng còn vấn đề đặt tên sheet thì sao hả chú ?. Ví dụ sheet1 sau khi move or copy thì sheet mới có tên từ cell A1 của sheet1 (Tóm tắt : Code vừa move or copy vừa lấy tên từ địa chỉ của 1 cell). Trong trường hợp sheet mới đang có thì số liệu được cộng dồn thì sao chú à ?.
Quá dể:
- Kiểm tra sự tồn tại của 1 tên sheet nào đó ---> Nếu có hãy xóa nó trước khi Move or copy ---> Công đoạn cuối cùng là rename sheet mới này thành tên nào đó anh muốn
Code kiểm tra sự tồn tại của 1 sheet đây anh
PHP:
Function SheetExist(WorkSheetName As String) As Boolean
  On Error Resume Next
  SheetExist = Not Sheets(WorkSheetName) Is Nothing
End Function
 
Upvote 0
Cám ơn mọi người đã giúp đỡ, tui đã viết được đoạn code này như sau:

Mã:
If SheetExist("lkdc" & i) = False Then
Worksheets("Tinh lun").Range("A1:K219").Copy Destination:=Worksheets.Add(After:=Sheets(Sheets.Count)).Range("A1")
Sheets(Sheets.Count).Name = "LKDC" & i
Else
Worksheets("Tinh lun").Range("A1:K219").Copy Destination:=Worksheets("lkdc"&i).Range("A1")
End If

Function SheetExist(WorkSheetName) As Boolean
  On Error Resume Next
  SheetExist = Not Sheets(WorkSheetName) Is Nothing
End Function
 
Upvote 0
Cám ơn mọi người đã giúp đỡ, tui đã viết được đoạn code này như sau:

Mã:
If SheetExist("lkdc" & i) = False Then
Worksheets("Tinh lun").Range("A1:K219").Copy Destination:=Worksheets.Add(After:=Sheets(Sheets.Count)).Range("A1")
Sheets(Sheets.Count).Name = "LKDC" & i
Else
Worksheets("Tinh lun").Range("A1:K219").Copy Destination:=Worksheets("lkdc"&i).Range("A1")
End If

Function SheetExist(WorkSheetName) As Boolean
  On Error Resume Next
  SheetExist = Not Sheets(WorkSheetName) Is Nothing
End Function
Thật ra bạn cũng có cách khác:
- Cứ xóa đại sheet mang tên "lkdc" & i ---> Thêm On Error Resume Next ở trên cùng, mục đích nếu có thì xóa trước, không có thì bỏ qua
- Tiếp theo là Move or copy
Vậy thôi!
Đại khái thế này:
PHP:
On Error Resume Next
Application.DisplayAlerts = False
Sheets("lkdc" & i).Delete
Worksheets("Tinh lun").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "LKDC" & i
Application.DisplayAlerts = True
Vậy là thậm chí khỏi cần đến hàm kiểm tra sự tồn tại của sheet luôn
 
Upvote 0
Mình có câu hỏi nhỏ: Trong Excel 2007, mỗi lần mình "move or copy" sheet (mình check copy) thì trong một số trường hợp, excel 2007 lại cứ hiện lên cái notice "địa chỉ mà bạn định copy đã tồn tại" (hình như nói về cell nào đó). Sau đó, bảo mình nhập địa chỉ khác vào, mình phải nhập đại vài ký tự, rồi nó mới cho copy. Chẳng hiểu vì sao?
 
Upvote 0
Mình có câu hỏi nhỏ: Trong Excel 2007, mỗi lần mình "move or copy" sheet (mình check copy) thì trong một số trường hợp, excel 2007 lại cứ hiện lên cái notice "địa chỉ mà bạn định copy đã tồn tại" (hình như nói về cell nào đó). Sau đó, bảo mình nhập địa chỉ khác vào, mình phải nhập đại vài ký tự, rồi nó mới cho copy. Chẳng hiểu vì sao?
Tình nghi là virus ---> Bạn thử bấm Ctrl + F3 xem nhìn thấy cái gì? Có phải có rất nhiều name không phải của bạn tạo ra không?
 
Upvote 0
Chào anh chị trên diễn đàn
cho hồng hỏi thăm là trong trường hợp sheet có chart serie, khi copy sheet bị link data với sheet gốc. Làm cách đễ loại bỏ link đó, và sheet mới hoàn toàn thuộc chính nó. Hiện hồng phải save nó thành template, nhưng làm vậy thì một số dữ liệu dụng trong ngày cũng phãi nhập lại.
Hồng có thêm câu hỏi nữa là, có thể nào macro được chart thường và chart serie, cách làm thế nào? , rất mong được anh chị giúp.
 
Upvote 0
Thật ra bạn cũng có cách khác:
- Cứ xóa đại sheet mang tên "lkdc" & i ---> Thêm On Error Resume Next ở trên cùng, mục đích nếu có thì xóa trước, không có thì bỏ qua
- Tiếp theo là Move or copy
Vậy thôi!
Đại khái thế này:
PHP:
On Error Resume Next
Application.DisplayAlerts = False
Sheets("lkdc" & i).Delete
Worksheets("Tinh lun").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "LKDC" & i
Application.DisplayAlerts = True
Vậy là thậm chí khỏi cần đến hàm kiểm tra sự tồn tại của sheet luôn

Em thấy cách này rất hay và thử áp dụng vào file của em rất hiệu quả. Nếu em muốn dùng giá trị của một cell trong sheet gốc ví dụ "A1" làm tên của sheet mới và chỉ muốn copy một vùng nhất định, nếu ô nào trong vùng đó có chứa công thức thì chỉ copy giá trị thì em phải sửa code như thế nào?
Mong các bác chỉ giáo.
 
Upvote 0
Tôi chưa hiểu lắm sự cần thiết của hàm này vào các bài toán cụ thể, đầy đủ thế nào
PHP:
Function SheetExist(WorkSheetName As String) As Boolean
  On Error Resume Next
  SheetExist = Not Sheets(WorkSheetName) Is Nothing
End Function

Nhờ mọi người lấy giúp hộ một bài toán nhỏ cụ thể (phối hợp giữa hàm này với 1 Function hoặc 1 Sub Code khác).

Xin trân trọng cảm ơn!
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi chưa hiểu lắm sự cần thiết của hàm này vào các bài toán cụ thể, đầy đủ thế nào
PHP:
Function SheetExist(WorkSheetName As String) As Boolean
  On Error Resume Next
  SheetExist = Not Sheets(WorkSheetName) Is Nothing
End Function

Nhờ mọi người lấy giúp hộ một bài toán nhỏ cụ thể (phối hợp giữa hàm này với 1 Function hoặc 1 Sub Code khác).

Xin trân trọng cảm ơn!
Rất cần khi bạn xây dựng 1 code trong đó có phần THÊM SHEET RỒI ĐẶT TÊN CHO NÓ
Khi đặt tên, làm sao bạn biết chắc được cái tên sắp đặt đã có hay chưa? Nếu đặt tên bị trùng, Excel nó sẽ "cằn nhằn" ngay!
Vì vậy sẽ không bao giờ thừa nếu có 1 function kiểm tra sự tồn tại của 1 tên sheet nào đó, đúng không?
---------------------------------------
Nói thêm: Chẳng những phải kiểm tra sự tồn tại của sheet mà còn phải xem cái tên sắp đặt có hợp lệ hay không nữa đấy (ví dụ đặt tên sheet có chứa các ký tự \/?* [] xem nó có chịu không?)
---------------------------------------
Thật ra cũng đã từng có 1 bài liên quan áp dụng hàm này, và bạn cũng có tham gia trao đổi (nhưng chắc đã quên)... Nó đây:
http://www.giaiphapexcel.com/forum/...hởi-tạo-nhiều-worksheets-từ-1-list-hoặc-table
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom