Chuyển string thành Hyperlink

Liên hệ QC

cantl

!!! Giải thoát !!!
Thành viên bị đình chỉ hoạt động
Tham gia
6/8/08
Bài viết
1,631
Được thích
1,034
Giới tính
Nam
Chào cả nhà,
Mình cóp nhặt code rồi ghép lại nhưng chưa hiểu VBA nên không tạo Hyperlink được.
Sau khi chạy code thì ra sheet "List link" nhưng nhấn vào link ko quay lại đúng địa chỉ.
Nhờ cả nhà sửa giúp mình file "vba amateur.xlsm" nhé và giữ nguyên cách code xLinkArr() như vậy có được không nhỉ?
Xin cảm ơn!
 

File đính kèm

  • temp.xlsx
    8.2 KB · Đọc: 3
  • vba amateur.xlsm
    25 KB · Đọc: 3
Chào cả nhà,
Mình cóp nhặt code rồi ghép lại nhưng chưa hiểu VBA nên không tạo Hyperlink được.
Sau khi chạy code thì ra sheet "List link" nhưng nhấn vào link ko quay lại đúng địa chỉ.
Nhờ cả nhà sửa giúp mình file "vba amateur.xlsm" nhé và giữ nguyên cách code xLinkArr() như vậy có được không nhỉ?
Xin cảm ơn!
Chế code lại cho bạn:
Rich (BB code):
Sub ListLinks()
    Dim xSheet As Worksheet
    Dim xRg As Range
    Dim xCell As Range
    Dim xCount As Long
    Dim xLinkArr() As String
    On Error Resume Next
    For Each xSheet In Worksheets
        Set xRg = xSheet.UsedRange.SpecialCells(xlCellTypeFormulas)
        If xRg Is Nothing Then GoTo LblNext
        For Each xCell In xRg
            If InStr(1, xCell.Formula, "[") > 0 Then
                xCount = xCount + 1
                ReDim Preserve xLinkArr(1 To 6, 1 To xCount)
                xLinkArr(1, xCount) = xCell.Address(, , , True)
                xLinkArr(2, xCount) = "'" & xCell.Formula
               
                'Chế lung tung đoạn này kekekekeke ---------------------------
                xLinkArr(3, xCount) = xCell.Parent.Name & "!" & xCell.Address
                xLinkArr(4, xCount) = Replace(Right(xCell.Formula, Len(xCell.Formula) - InStr(1, xCell.Formula, "]")), "'", "")
                xLinkArr(5, xCount) = ""
                xLinkArr(6, xCount) = Mid(xCell.Formula, InStr(1, xCell.Formula, "[") + 1, InStr(1, xCell.Formula, "]") - InStr(1, xCell.Formula, "[") - 1)
                'Hết chế------------------------------------------------------
            End If
        Next
LblNext:
    Next
    If xCount > 0 Then
        Sheets.Add(Sheets(1)).Name = "Link Sheet"
        Range("A1").Resize(, 2).Value = Array("Location", "Reference")
        Range("A2").Resize(UBound(xLinkArr, 2), UBound(xLinkArr, 1)).Value = Application.Transpose(xLinkArr)

        Dim xlRange As Range
        Set xlRange = ActiveSheet.Range("A2", Range("B" & Rows.Count).End(xlUp))
        Dim Rng As Range
        For Each Rng In xlRange
            'Sửa linh tinh đoạn này kakakakaka------------------------------------
            ActiveSheet.Hyperlinks.Add Anchor:=Rng, Address:=Rng.Offset(0, 4).Value, SubAddress:=Rng.Offset(0, 2).Value, TextToDisplay:=Rng.Value
            'Hết sửa--------------------------------------------------------------
        Next
        Columns("A:F").AutoFit
    Else
        MsgBox "No links were found within the active workbook.", vbInformation, "KuTools for Excel"
    End If
End Sub
 
Chế code lại cho bạn:
Rich (BB code):
Sub ListLinks()
    Dim xSheet As Worksheet
    Dim xRg As Range
    Dim xCell As Range
    Dim xCount As Long
    Dim xLinkArr() As String
    On Error Resume Next
    For Each xSheet In Worksheets
        Set xRg = xSheet.UsedRange.SpecialCells(xlCellTypeFormulas)
        If xRg Is Nothing Then GoTo LblNext
        For Each xCell In xRg
            If InStr(1, xCell.Formula, "[") > 0 Then
                xCount = xCount + 1
                ReDim Preserve xLinkArr(1 To 6, 1 To xCount)
                xLinkArr(1, xCount) = xCell.Address(, , , True)
                xLinkArr(2, xCount) = "'" & xCell.Formula
              
                'Chế lung tung đoạn này kekekekeke ---------------------------
                xLinkArr(3, xCount) = xCell.Parent.Name & "!" & xCell.Address
                xLinkArr(4, xCount) = Replace(Right(xCell.Formula, Len(xCell.Formula) - InStr(1, xCell.Formula, "]")), "'", "")
                xLinkArr(5, xCount) = ""
                xLinkArr(6, xCount) = Mid(xCell.Formula, InStr(1, xCell.Formula, "[") + 1, InStr(1, xCell.Formula, "]") - InStr(1, xCell.Formula, "[") - 1)
                'Hết chế------------------------------------------------------
            End If
        Next
LblNext:
    Next
    If xCount > 0 Then
        Sheets.Add(Sheets(1)).Name = "Link Sheet"
        Range("A1").Resize(, 2).Value = Array("Location", "Reference")
        Range("A2").Resize(UBound(xLinkArr, 2), UBound(xLinkArr, 1)).Value = Application.Transpose(xLinkArr)

        Dim xlRange As Range
        Set xlRange = ActiveSheet.Range("A2", Range("B" & Rows.Count).End(xlUp))
        Dim Rng As Range
        For Each Rng In xlRange
            'Sửa linh tinh đoạn này kakakakaka------------------------------------
            ActiveSheet.Hyperlinks.Add Anchor:=Rng, Address:=Rng.Offset(0, 4).Value, SubAddress:=Rng.Offset(0, 2).Value, TextToDisplay:=Rng.Value
            'Hết sửa--------------------------------------------------------------
        Next
        Columns("A:F").AutoFit
    Else
        MsgBox "No links were found within the active workbook.", vbInformation, "KuTools for Excel"
    End If
End Sub
Cảm ơn bạn. Hóa ra vba ko hiểu trực tiếp mà phải link từng bước. Nhưng nhìn code cũng rối, mình cóp nhặt ghép lung tung mà chả ăn may được tí nào. :rolleyes::rolleyes::rolleyes:

2021-10-17 19.58.02.png
 
Cảm ơn bạn. Hóa ra vba ko hiểu trực tiếp mà phải link từng bước. Nhưng nhìn code cũng rối, mình cóp nhặt ghép lung tung mà chả ăn may được tí nào. :rolleyes::rolleyes::rolleyes:

View attachment 267875
Phải lấy cho được tên file, tên sheet, địa chỉ cell link tới. Dùng mấy cái hàm xử lý chuỗi để lấy mấy thông tin đó rồi lưu vào mảng đúng trật tự của chúng. Khi hyperlink thì lôi ra dùng. Vậy thôi chứ không có gì rối
 
Cảm ơn bạn. Do tự mò lung tung nên nó ko đâu ra đâu ấy mà. Mình cứ tưởng hiện đủ chuỗi là vba hiểu mà phải chỉ cho ra file, sheet, địa chỉ. Hướng dẫn như con mọn vất vả gê.
 
Mình phải sửa 4 chỗ tô đỏ mới chuẩn thì phải.
xLinkArr(3, xCount) = xCell.Parent.Name & "'" & "!" & xCell.Address
xLinkArr(4, xCount) = Right(xCell.Formula, Len(xCell.Formula) - InStr(1, xCell.Formula, "]"))

....
ActiveSheet.Hyperlinks.Add Anchor:=Rng, Address:=Rng.Offset(0, 4).Value, SubAddress:="'" & Rng.Offset(0, 2).Value, TextToDisplay:=Rng.Value
 
Mình phải sửa 4 chỗ tô đỏ mới chuẩn thì phải.
xLinkArr(3, xCount) = xCell.Parent.Name & "'" & "!" & xCell.Address
xLinkArr(4, xCount) = Right(xCell.Formula, Len(xCell.Formula) - InStr(1, xCell.Formula, "]"))

....
ActiveSheet.Hyperlinks.Add Anchor:=Rng, Address:=Rng.Offset(0, 4).Value, SubAddress:="'" & Rng.Offset(0, 2).Value, TextToDisplay:=Rng.Value
Code đúng. Tôi đã chạy thử code rồi. Còn nếu bạn thấy sửa mà code hoạt động tốt hơn thì cứ sửa.
 
Code thì chuẩn rồi, nhưng gặp Sheet mà có dấu cách thì ko chạy được nên mình sửa tí. May mà chạy được chứ không thì cũng chịu chết. :):):)
 
Web KT
Back
Top Bottom