Hàm trả về "SheetName"

Liên hệ QC

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,912
Đôi khi chúng ta có nhu cầu lấy SheetName đễ làm cái gì đó... Thường ta sử dụng công thức sau:
=RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1)))

Tôi gữi tặng các bạn 1 UDF mà tôi lượm dc trên mạng... Code nó như sau:

Function SheetName(rCell As Range, Optional UseAsRef As Boolean) As String
Application.Volatile
If UseAsRef = True Then
SheetName = "'" & rCell.Parent.Name & "'!"
Else
SheetName = rCell.Parent.Name
End If
End Function

Hoặc các bạn có thể tải file .xla mà tôi làm sẳn về thư mục AddIns của bạn đễ sử dụng như 1 User Define Function
Cách dùng rất đơn giản: Giã sử chúng ta đang ở Sheet1, gõ công thức:
=SheetName(A1,True) sẽ trả về kết quả là 'Sheet1'
=SheetName(A1,False) hoặc =SheetName(A1) sẽ trả về kết quả là Sheet1
Mến
ANH TUẤN
 

File đính kèm

anhtuan1066 đã viết:
Đôi khi chúng ta có nhu cầu lấy SheetName đễ làm cái gì đó... Thường ta sử dụng công thức sau:
=RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1)))

Tôi gữi tặng các bạn 1 UDF mà tôi lượm dc trên mạng... Code nó như sau:

Function SheetName(rCell As Range, Optional UseAsRef As Boolean) As String
Application.Volatile
If UseAsRef = True Then
SheetName = "'" & rCell.Parent.Name & "'!"
Else
SheetName = rCell.Parent.Name
End If
End Function

Hoặc các bạn có thể tải file .xla mà tôi làm sẳn về thư mục AddIns của bạn đễ sử dụng như 1 User Define Function
Cách dùng rất đơn giản: Giã sử chúng ta đang ở Sheet1, gõ công thức:
=SheetName(A1,True) sẽ trả về kết quả là 'Sheet1'
=SheetName(A1,False) hoặc =SheetName(A1) sẽ trả về kết quả là Sheet1
Mến
ANH TUẤN

Cũng rất hay đó, tuy nhiên em nghĩ TH này dùng công thức vẫn hơn. Vì nó dùng công thức cũng đơn giản mà.

=MID(CELL("filename";A1);FIND("]";CELL("filename";A1);1)+1;100)

Để dành UDF cho những cái phức tạp hơn bác ạ.


Thân!
 
Upvote 0
Cái này chỉ là tham khảo thôi mà... Nếu là tôi thì tôi cũng chẳng thèm dùng cái UDF này... Tuy nhiên... Vọc chơi... hi.. hi...
 
Upvote 0
=MID(CELL("filename";A1);FIND("]";CELL("filename";A1);1)+1;100)
Anh MrOKebab cho công thức này là tìm được "tên của sheet đang được mở"
hỏi anh có công thức nào tự mở được sheet mới không?
ví dụ: trong sheet1 ở ô A1 đã ghi chữ "sheet20" (trong WB chỉ mới có 3 sheet đang mở thôi)
mình lập công thức ở ô A2, để khi chuyển trỏ vào ô B1 thì nó tự mở sheet20 không?
xin cảm ơn
 
Upvote 0
Anh MrOKebab cho công thức này là tìm được "tên của sheet đang được mở"
hỏi anh có công thức nào tự mở được sheet mới không?
ví dụ: trong sheet1 ở ô A1 đã ghi chữ "sheet20" (trong WB chỉ mới có 3 sheet đang mở thôi)
mình lập công thức ở ô A2, để khi chuyển trỏ vào ô B1 thì nó tự mở sheet20 không?
xin cảm ơn
218792

Bạn muốn liên kết đến Sheet20 hay là mở 1 sheet mới tên là Sheet20 vậy?
 
Upvote 0
View attachment 218792

Bạn muốn liên kết đến Sheet20 hay là mở 1 sheet mới tên là Sheet20 vậy?
Ý em muốn hỏi là:
muốn mở sheet mới và sheet đó là sheet có tên: sheet20 (nói cách khác là có tên đã viết trong A1)
Ô A1 được ghi gõ chữ vào, nên không thể dùng biện pháp Hyperlink
cứ mỗi lần gõ chữ mới vào ô A1 thì kích vào sẽ chuyển được đến sheet mới có tên như tên trong ô A1
xin cảm ơn
 
Upvote 0
Ý em muốn hỏi là:
muốn mở sheet mới và sheet đó là sheet có tên: sheet20 (nói cách khác là có tên đã viết trong A1)
Ô A1 được ghi gõ chữ vào, nên không thể dùng biện pháp Hyperlink
cứ mỗi lần gõ chữ mới vào ô A1 thì kích vào sẽ chuyển được đến sheet mới có tên như tên trong ô A1
xin cảm ơn
Bạn thử dùng VBA,
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh As Worksheet
If Target.Address = "$A$1" And Target.Value <> "" Then
    For Each sh In ThisWorkbook.Worksheets
        If sh.Name = Target.Value Then
            MsgBox "Trùng tên Sheet"
            Exit Sub
        End If
    Next
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = Target.Value
    Sheets(Target.Value).Select
End If
End Sub
 

File đính kèm

Upvote 0
Bạn thử dùng VBA,
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh As Worksheet
If Target.Address = "$A$1" And Target.Value <> "" Then
    For Each sh In ThisWorkbook.Worksheets
        If sh.Name = Target.Value Then
            MsgBox "Trùng tên Sheet"
            Exit Sub
        End If
    Next
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = Target.Value
    Sheets(Target.Value).Select
End If
End Sub
cám ơn Mr Burn đã replay
giờ nhờ a cải thiện 2 vấn đề trong file a gửi, không thỏa lắm:
trong hình 1:
khi thêm một tên mới vào A1 rồi kích nó, thì RUN báo lỗi :"Sheets(Target.Value).Select" -
(trên file có các sheet: sh1,sh2,sh3,sh20,sh5 - giờ gõ vào A1 chữ :"456" rồi bấm thì câu lệnh bị tô vàng như trong hình)
Xin cách khắc phục (không hiên thông báo lỗi nãy nữa)
trong hình 2:
khi xóa đi các sheet không cần thiết nữa, thì khi gõ tên sheet mới vào A1, thì không thực thi được nữa
(sau khi có sheet mới: "456", thì xóa đi các sheet cũ: sh5,sh20, thì khi nhập tên mới vào A1 là : "abc" , câu lệnh không thực thi được)
Xin cách khắc phục (sau khi xóa sheet thì gõ tên mới vào A1, vẫn tạo được sheet mới theo tên mới đó)
Xin cám ơn
 

File đính kèm

  • hình1.jpg
    hình1.jpg
    240.9 KB · Đọc: 8
  • hình2.jpg
    hình2.jpg
    175.1 KB · Đọc: 8
Lần chỉnh sửa cuối:
Upvote 0
cám ơn Mr Burn đã replay
giờ nhờ a cải thiện 2 vấn đề trong file a gửi, không thỏa lắm:
trong hình 1:
khi thêm một tên mới vào A1 rồi kích nó, thì RUN báo lỗi :"Sheets(Target.Value).Select" -
(trên file có các sheet: sh1,sh2,sh3,sh20,sh5 - giờ gõ vào A1 chữ :"456" rồi bấm thì câu lệnh bị tô vàng như trong hình)
Xin cách khắc phục (không hiên thông báo lỗi nãy nữa)
trong hình 2:
khi xóa đi các sheet không cần thiết nữa, thì khi gõ tên sheet mới vào A1, thì không thực thi được nữa
(sau khi có sheet mới: "456", thì xóa đi các sheet cũ: sh5,sh20, thì khi nhập tên mới vào A1 là : "abc" , câu lệnh không thực thi được)
Xin cách khắc phục (sau khi xóa sheet thì gõ tên mới vào A1, vẫn tạo được sheet mới theo tên mới đó)
Xin cám ơn
Bạn them câu lệnh sau vào trước dòng khai báo Dim sh As Worksheet xem nhé:
Mã:
On Error Resume Next
 
Upvote 0
Bạn them câu lệnh sau vào trước dòng khai báo Dim sh As Worksheet xem nhé:
Mã:
On Error Resume Next
Cám ơn anh Mr Burn
Lại một lần nữa làm phiền anh.
Nhưng sao nó vân bị vướng hình 2.
Mình nghĩ nếu đặt một nút comm ở đây, kích nút này sẽ chuyển đến sheet mới, (sheet mới này có tên sheet như đã ghi ở ô Cell A1 của sheet1), được không anh Mr Burn?
nếu điều này làm được, nhờ anh giúp dùm, lệnh của nút này (xin xem file đính kèm)
Xin cám ơn
 

File đính kèm

Upvote 0
Cám ơn anh Mr Burn
Lại một lần nữa làm phiền anh.
Nhưng sao nó vân bị vướng hình 2.
Mình nghĩ nếu đặt một nút comm ở đây, kích nút này sẽ chuyển đến sheet mới, (sheet mới này có tên sheet như đã ghi ở ô Cell A1 của sheet1), được không anh Mr Burn?
nếu điều này làm được, nhờ anh giúp dùm, lệnh của nút này (xin xem file đính kèm)
Xin cám ơn
Bạn thử ở sheet2, code
Mã:
Sub Vao_Sh()
Dim Sh As Worksheet, ShName As String
On Error Resume Next
With ThisWorkbook
    ShName = Sheet2.Range("A1").Value
    If ShName <> "" Then
        For Each Sh In Worksheets
            If Sh.Name = ShName Then
                MsgBox "Trùng tên Sheet"
                Sheets(ShName).Select
                Exit Sub
            End If
        Next
        Sheets.Add After:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = ShName
        Sheets(ShName).Select
    End If
End With
End Sub
Kiểm tra lại code trước ở bài 1, sheet1.
 

File đính kèm

Upvote 0
Bạn them câu lệnh sau vào trước dòng khai báo Dim sh As Worksheet xem nhé:
Mã:
On Error Resume Next
Sheets(456) khác với Sheets ("456").
On Error Resume Next làm gì thêm "đổ nợ".
Tìm cách nào đó chuyển ô A1 thành Text là xong.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử ở sheet2, code

Đã làm theo a hướng dẫn: như vậy trong file anh Mr Burn gửi, có cả 2 cách thực hiện. VBA chạy Rất tốt ạ.
Giờ cho e hỏi thêm:
Nếu trong WB mình có sẵn một sheet mà trùng với tên sheet được ghi trong sheet2, Ô "A1", thì câu lệnh trong Module:
"....
For Each Sh In Worksheets
If Sh.Name = ShName Then
MsgBox "Trùng tên Sheet"
Sheets(ShName).Select
Exit Sub
.....
thì sẽ báo có sheet trùng tên rồi chuyển tới sheet đó (...MsgBox "Trùng tên Sheet".."
VẬY NẾU KHÔNG CẦN THÔNG BÁO ĐÓ, CỨ ĐỂ TỰ CHUYỂN TỚI SHEET TRÙNG TÊN ĐÓ, thì bỏ đoạn lệnh: ",,,MsgBox "Trùng tên Sheet",,,
đúng không ạ?
Sub Vao_Sh()
Dim Sh As Worksheet, ShName As String
On Error Resume Next
With ThisWorkbook
ShName = Sheet2.Range("A1").Value
' If ShName <> "" Then
' For Each Sh In Worksheets
' If Sh.Name = ShName Then
' MsgBox "Trùng tên Sheet"
' Sheets(ShName).Select
' Exit Sub
' End If
' Next
' End If

Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = ShName
Sheets(ShName).Select

End With
End Sub
------------
Hỏi anh Mr Burn, e sửa lại như vậy là chuyển tới luôn sheet có tên trùng phải không?
Xin cám ơn nhiều.
 
Upvote 0
Web KT

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

Back
Top Bottom