‘성공하지 않고 그물을 찾는 시간을 보낸 후에 여기 내 질문이있다.
나는 두 개의 워크 북을 가지고 있는데, ‘프로파일’과 ‘결과’라고 부르 자.
‘프로필’에는 A3부터 A2000까지의 하이퍼 링크가있는 시트가 있습니다. ‘Jim’, ‘Dave’, ‘Anne’등과 같은 이름이이 셀에 나타납니다. 기본 하이퍼 링크는 ‘www.destinationwebsite.com/nameID’와 같은 특정 이름의 ID로만 다릅니다. nameID는 모든 경우마다 다릅니다.
‘결과’에는 시트가 있고이 이름 / 하이퍼 링크 중 하나의 인스턴스가 C3 ~ Cx의 어느 곳에 나 나타날 수 있습니다.
지금은 두 통합 문서의 이름을 비교하는 중입니다. 프로필의 이름이 ‘결과’에 있는지 알려줍니다. 그러나 두 개 이상의 ‘Jim ‘s in’results ‘(서로 다른 ID를 가짐)가 있으면 작동하지 않습니다. 이것의 유일한 방법은 실제로 일치하는 하이퍼 링크 ( ‘nameID’)를 확인하여 올바른 ‘Jim’을 참조하고 있는지 확인하는 것입니다.
이것에 약간의 시간을 보낸 후에 나는 패배를 인정해야만했습니다. 확실히 기본적인 것을하고 있기 때문에 엑셀에서 쉽게 할 수 있어야합니다.
어떤 도움이라도이 걸림돌을 지나쳐 감탄할 것입니다.
답변
이것은 효과가있다.
Sub CheckLinks()
Dim WBprofiles As Workbook
Set WBprofiles = ThisWorkbook
Dim WBresults As Workbook
Set WBresults = Workbooks.Open("C:\Users\path\to\results.xlsx")
Dim WSprofiles As Worksheet
Set WSprofiles = WBprofiles.Sheets("profiles")
Dim WSresults As Worksheet
Set WSresults = WBresults.Sheets("results")
Dim DictResults As Object
Set DictResults = CreateObject("Scripting.Dictionary")
Dim lastrow As Integer
lastrow = WSresults.Cells(Rows.Count, "A").End(xlUp).Row
Dim strKey As String
For d = 1 To lastrow
strKey = Cells(d, 1).Hyperlinks(1).Address
DictResults(strKey) = 1
Next
Dim vResult() As Variant
ReDim vResult(DictResults.Count - 1, 1)
Dim x As Integer
For Each Key In DictResults.keys
vResult(x, 0) = Key
x = x + 1
Next
lastrow = WSprofiles.Cells(Rows.Count, "A").End(xlUp).Row
Dim strLoc As String
Dim i As Integer
For Each link In WSprofiles.Range("A1:A" & lastrow).Hyperlinks
strLoc = link.Address
For i = LBound(vResult) To UBound(vResult)
If vResult(i, 0) = strLoc Then
link.Range.Offset(, 1) = "Found"
End If
Next
Next
End Sub