Tặng hàm điều khiển sheet bằng CodeName ở dạng chuỗi. (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,662
Được thích
16,720
Giới tính
Nam
Thay vì bạn thường dùng Sheet.Name hoặc Sheet.CodeName để điều khiển, chẳng hạn:

Bạn có một sheet tên là ABC và tên của sheet đó trong VBE là Sheet1, bạn thường dùng các tên này như sau:

(1) Sheets("ABC").Select => dùng Sheet.Name
hoặc:
(2) Sheet1.Select => dùng Sheet.CodeName

Với (2) bạn không biết cách nào để chuyển nó thành chuỗi để tiện sử dụng. Thông thường tên sheet hay bị thay đổi, nhưng Code Name ẩn bên trong thì không vì nó có hiện ra người ta sửa đâu, cho nên dùng Code Name với dạng chuỗi sẽ như thế nào đây?

Đã có giải pháp:

PHP:
Function MySheet(ByVal SheetCodeName As String, _
        Optional ByVal WorkbookName As String) As Worksheet
    Dim Wbk As Workbook
    WorkbookName = Trim(WorkbookName)
    SheetCodeName = Trim(SheetCodeName)
    If WorkbookName = "" Then
        Set Wbk = ActiveWorkbook
    Else
        Set Wbk = Workbooks(WorkbookName)
    End If
    SheetCodeName = Wbk.VBProject _
        .VBComponents(SheetCodeName) _
        .Properties("Name").Value
    Set MySheet = Wbk.Worksheets(SheetCodeName)
End Function

Cách thực hiện hàm này:

Nếu điều khiển sheet ở file hiện hành:

PHP:
Sub Test()
    With MySheet("sheet1")
        MsgBox "Tên sheet hien tai: [ " & .Name & " ]"
        .Name = "NGHIA_DEP_TRAI"
        MsgBox "Tên sheet duoc thay doi: [ " & .Name & " ]"
        .Range("A1").Value = "HOANG TRONG NGHIA"
        .Range("A2").Value = "giaiphapexcel.com"
    End With
End Sub

Và điều khiển sheet ở một file khác:

PHP:
Sub Test2()
    With MySheet("sheet1", "CodeNameAction.xls")
        MsgBox "Tên sheet hien tai: [ " & .Name & " ]"
        .Name = "NGHIA_DEP_TRAI"
        MsgBox "Tên sheet duoc thay doi: [ " & .Name & " ]"
        .Range("A1").Value = "HOANG TRONG NGHIA"
        .Range("A2").Value = "giaiphapexcel.com"
    End With
End Sub
 

File đính kèm

Thay vì bạn thường dùng Sheet.Name hoặc Sheet.CodeName để điều khiển, chẳng hạn:

Bạn có một sheet tên là ABC và tên của sheet đó trong VBE là Sheet1, bạn thường dùng các tên này như sau:

(1) Sheets("ABC").Select => dùng Sheet.Name
hoặc:
(2) Sheet1.Select => dùng Sheet.CodeName

Với (2) bạn không biết cách nào để chuyển nó thành chuỗi để tiện sử dụng. Thông thường tên sheet hay bị thay đổi, nhưng Code Name ẩn bên trong thì không vì nó có hiện ra người ta sửa đâu, cho nên dùng Code Name với dạng chuỗi sẽ như thế nào đây?

Đã có giải pháp:

PHP:
Function MySheet(ByVal SheetCodeName As String, _
        Optional ByVal WorkbookName As String) As Worksheet
    Dim Wbk As Workbook
    WorkbookName = Trim(WorkbookName)
    SheetCodeName = Trim(SheetCodeName)
    If WorkbookName = "" Then
        Set Wbk = ActiveWorkbook
    Else
        Set Wbk = Workbooks(WorkbookName)
    End If
    SheetCodeName = Wbk.VBProject _
        .VBComponents(SheetCodeName) _
        .Properties("Name").Value
    Set MySheet = Wbk.Worksheets(SheetCodeName)
End Function

Cách thực hiện hàm này:

Nếu điều khiển sheet ở file hiện hành:

PHP:
Sub Test()
    With MySheet("sheet1")
        MsgBox "Tên sheet hien tai: [ " & .Name & " ]"
        .Name = "NGHIA_DEP_TRAI"
        MsgBox "Tên sheet duoc thay doi: [ " & .Name & " ]"
        .Range("A1").Value = "HOANG TRONG NGHIA"
        .Range("A2").Value = "giaiphapexcel.com"
    End With
End Sub

Và điều khiển sheet ở một file khác:

PHP:
Sub Test2()
    With MySheet("sheet1", "CodeNameAction.xls")
        MsgBox "Tên sheet hien tai: [ " & .Name & " ]"
        .Name = "NGHIA_DEP_TRAI"
        MsgBox "Tên sheet duoc thay doi: [ " & .Name & " ]"
        .Range("A1").Value = "HOANG TRONG NGHIA"
        .Range("A2").Value = "giaiphapexcel.com"
    End With
End Sub
Nhớ không lầm thì "trò chơi" này có từ rất lâu rồi. Trong máy tính của tôi cũng có 1 hàm gần tương tự viết cách đây hơn 4 năm
 
Upvote 0
Upvote 0
Thay vì bạn thường dùng Sheet.Name hoặc Sheet.CodeName để điều khiển, chẳng hạn:

Bạn có một sheet tên là ABC và tên của sheet đó trong VBE là Sheet1, bạn thường dùng các tên này như sau:

(1) Sheets("ABC").Select => dùng Sheet.Name
hoặc:
(2) Sheet1.Select => dùng Sheet.CodeName

Với (2) bạn không biết cách nào để chuyển nó thành chuỗi để tiện sử dụng. Thông thường tên sheet hay bị thay đổi, nhưng Code Name ẩn bên trong thì không vì nó có hiện ra người ta sửa đâu, cho nên dùng Code Name với dạng chuỗi sẽ như thế nào đây?

Đã có giải pháp:

PHP:
Function MySheet(ByVal SheetCodeName As String, _
        Optional ByVal WorkbookName As String) As Worksheet
    Dim Wbk As Workbook
    WorkbookName = Trim(WorkbookName)
    SheetCodeName = Trim(SheetCodeName)
    If WorkbookName = "" Then
        Set Wbk = ActiveWorkbook
    Else
        Set Wbk = Workbooks(WorkbookName)
    End If
    SheetCodeName = Wbk.VBProject _
        .VBComponents(SheetCodeName) _
        .Properties("Name").Value
    Set MySheet = Wbk.Worksheets(SheetCodeName)
End Function

Cách thực hiện hàm này:

Nếu điều khiển sheet ở file hiện hành:

PHP:
Sub Test()
    With MySheet("sheet1")
        MsgBox "Tên sheet hien tai: [ " & .Name & " ]"
        .Name = "NGHIA_DEP_TRAI"
        MsgBox "Tên sheet duoc thay doi: [ " & .Name & " ]"
        .Range("A1").Value = "HOANG TRONG NGHIA"
        .Range("A2").Value = "giaiphapexcel.com"
    End With
End Sub

Và điều khiển sheet ở một file khác:

PHP:
Sub Test2()
    With MySheet("sheet1", "CodeNameAction.xls")
        MsgBox "Tên sheet hien tai: [ " & .Name & " ]"
        .Name = "NGHIA_DEP_TRAI"
        MsgBox "Tên sheet duoc thay doi: [ " & .Name & " ]"
        .Range("A1").Value = "HOANG TRONG NGHIA"
        .Range("A2").Value = "giaiphapexcel.com"
    End With
End Sub
Máy Mạnh Office 2016 + Windows10 ...Nó ra màu Vàng nè ....Capture.PNG
 
Upvote 0
muốn chạy được mấy hàm của anh Nghĩa đẹp chai thì phải check vào đây

checkvba-png.179115
 

File đính kèm

  • checkVBA.png
    checkVBA.png
    18.9 KB · Đọc: 79
Upvote 0
Can thiệp "sống" vào VBComponent là cân nhắc nhé các bạn. Hàm viết trong một file sẽ xuất hiện nhiều nơi trong code. File này mang sang máy khác không chọn "Trust access to the VBA..." - Đây là thiết lập ngầm định với mọi máy tính của người dùng bình thường. Sẽ rất phiền phức nếu bàn giao cho người khác dùng kèm theo hướng dẫn tỉ mỉ này trừ khi tạo bộ cài đặt, tự thiếp lập giá trị đó trong Registry.
 
Upvote 0
Upvote 0
Vậy là mở banh cửa cho virus chuôi vào sao....
Thật ra dân mình còn cho nó check bằng code được, huống chi là dân hacker! Vậy nên nó muốn phá thì thế quái nào mà phá không được! Cho nên trong Excel Options, mình cho dễ toàn tập, Enable tất, Trust tất! Thế mà nó có phá phách gì đâu nà! Hihihi.
 
Upvote 0
Thật ra dân mình còn cho nó check bằng code được, huống chi là dân hacker! Vậy nên nó muốn phá thì thế quái nào mà phá không được! Cho nên trong Excel Options, mình cho dễ toàn tập, Enable tất, Trust tất! Thế mà nó có phá phách gì đâu nà! Hihihi.
check bằng cách này đúng không anh
Mã:
Private Sub ChangeVBOM()
  Dim regKey As String
  regKey = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & Application.Version & "\Excel\Security\AccessVBOM"
  CreateObject("WScript.Shell").RegWrite regKey, 1, "REG_DWORD"
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom