Hỏi về copy name

Liên hệ QC

echo07

Nguyệt Hà
Tham gia
24/8/07
Bài viết
422
Được thích
316
Tôi có một vấn để thế này mong được thọ giáo.
Giả sử một file của tôi đã đặt một số name động và dữ liệu được update hàng ngày mà ai đó vô tình (hay cố tinh) xóa name đi thì sẽ hỏng bét. Xong tôi đã có một bản Spare rồi nhưng ngày update lại cũ hơn. Vậy có cách nào coppy tất cả các name đó qua bản đã xóa không. Nếu ngồi viết lại name thì quả là cực hình đấy.(Ở đây vì một số lý do nên không tiện Protect workshet)
Mong được chỉ giáo
thanks!
 
Nếu núi không đến được với ta, thì ta hãy đến với núi.
Nếu copy name từ file cũ sang file mới là khó khăn, thì copy dữ liệu mới từ file mới sang file cũ, chỉ cần nhớ Save As là được.

Thực ra thì cũng có cách là dùng VBA.
 
Tôi có một vấn để thế này mong được thọ giáo.
Giả sử một file của tôi đã đặt một số name động và dữ liệu được update hàng ngày mà ai đó vô tình (hay cố tinh) xóa name đi thì sẽ hỏng bét. Xong tôi đã có một bản Spare rồi nhưng ngày update lại cũ hơn. Vậy có cách nào coppy tất cả các name đó qua bản đã xóa không. Nếu ngồi viết lại name thì quả là cực hình đấy.(Ở đây vì một số lý do nên không tiện Protect workshet)
Mong được chỉ giáo
thanks!

Bạn chọn các sheet trong file cũ, Rightclick\Move or copy\[Mục to book Chọn file mới, check mục Create a copy].ok
Sau khi làm xong thì các Name đã được copy sang, bạn sửa tên các sheet lại cho phù hợp.
 
Tôi có một vấn để thế này mong được thọ giáo.
Giả sử một file của tôi đã đặt một số name động và dữ liệu được update hàng ngày mà ai đó vô tình (hay cố tinh) xóa name đi thì sẽ hỏng bét. Xong tôi đã có một bản Spare rồi nhưng ngày update lại cũ hơn. Vậy có cách nào coppy tất cả các name đó qua bản đã xóa không. Nếu ngồi viết lại name thì quả là cực hình đấy.(Ở đây vì một số lý do nên không tiện Protect workshet)
Mong được chỉ giáo
thanks!

Trước tiên bạn hãy lưu giữ các Name của bạn lại. Thủ tục se tạo ra Sheet ShName để lưu giữ các name.

PHP:
Sub SaveName()
    On Error Resume Next
    Dim NSh As Name, i As Integer, Sh As Worksheet
    If ActiveWorkbook.Names.Count = 0 Then Exit Sub
    If WksExists("ShName") = False Then Sheets.Add.Name = "ShName"
    For Each NSh In ActiveWorkbook.Names
        i = i + 1
        Sheets("ShName").Range("A" & i).Value = NSh.Name
        Sheets("ShName").Range("B" & i).Value = " " & NSh.RefersToR1C1
    Next
End Sub
Sau đó nếu muốn thì bạn có thể phục hồi các Name này bằng thủ tục sau:
PHP:
Sub CreatName()
    On Error Resume Next
    Dim HC As Integer
    If WksExists("ShName") = False Then Exit Sub
    HC = Sheets("ShName").Range("A65000").End(xlUp).Row
    TaoName Sheets("ShName").Range("A1:A" & HC), Sheets("ShName").Range("B1:B" & HC)
    Application.DisplayAlerts = False
    Sheets("ShName").Delete
    Application.DisplayAlerts = True
End Sub
Các thủ tục trên có sử dụng thêm 1Sub tham số và 1 hàm UDF sau, bạn copy cả vào nhé.
PHP:
Sub TaoName(Ten As Range, DiaChi As Range)
    Dim i As Integer
    For i = 1 To Ten.Rows.Count
        ActiveWorkbook.Names.Add Name:=Ten(i), RefersToR1C1:=Mid$(DiaChi(i), 2, 100)
    Next
End Sub
PHP:
Function WksExists(wksName As String) As Boolean
'How can I tell if a specific worksheet exists?
    On Error Resume Next
    WksExists = CBool(Len(Worksheets(wksName).Name) > 0)
End Function
Việc còn lại của bạn là bảo mật cái Sheet ShName thế nào thôi.

-- CV--
 
Cách của Lệnh Hồ Đại Hiệp là về lâu dài, chứng tỏ là người nhìn xa trông rộng.
Còn trước mắt thì khắc phục hậu quả bị xoá name:
File cũ (có name đầy đủ) và file mới (đã bị xoá name) ắt hẳn là cùng cấu trúc về sheet.
1. Trong file cũ, tại 1 ô trống bất kỳ, nhấn F3, nhấn tiếp Paste list, ta sẽ có 1 danh sách name 2 cột. Copy list này
2. Trong file mới, tạo 1 sheet mới (tạm thôi, rồi sẽ xoá), paste cái danh sách name hồi nãy vào ngay ô A1.
3. Copy và chạy cái code này ngay trong sheet mới đó:
PHP:
Sub copyname()
NameCount = Cells(65000, 1).End(xlUp).Row
For i = 1 To NameCount
ThisWorkbook.Names.Add Name:=Cells(i, 1), RefersTo:=Cells(i, 2).Text
Next
End Sub
4. Xoá sheet tạm này.
5. Nhấn thanks cho Lệnh Hồ Đại Hiệp và cả lão cheettit.
 
Cách nào cũng hay. thanks cả nhà. thật ra chưa ai xóa name của em cả nhưng em............phòng xa vậy mà
Thanks again
 
Mình hỏi cái: Mình cũng bị hỏng name nhưng mà là do đặt công thức cho name bằng offset nên khi xóa hàng đâù tiên đi thì toàn bộ name có cái dòng đó chuyển thành REF! làm sao sửa đây các bác ơi?
 
Web KT
Back
Top Bottom