옵션 1 : 당신은 사용자 정의 함수 (UDF) GetUrl
를 통해 URL을 업데이트하는 워크 시트 기반의 방법으로 표준 모듈에 Igor하여 다음 코드를 (수정 약간)를 사용할 수있는 UDF
시트에서, 클릭 가능한 링크가 있는지 확인하려면 HYPERLINK
함수 안에 넣습니다. 표준 모듈
UDF 번호 :
Option Explicit
Function GetURL(cell As Range, Optional default_value As Variant) as hyperlink
'Lists the Hyperlink Address for a Given Cell
'If cell does not contain a hyperlink, return default_value
If (cell.Hyperlinks.Count <> 1) Then
GetURL = default_value
Else
GetURL = cell.Hyperlinks(1).Address
End If
End Function
는, 예를 들어, 시트 (2)의 셀에 구비하여 배포
=HYPERLINK(GetURL(Sheet1!A1))
시트 한 셀 A1
다음 하이퍼 링크의 존재를 갖는다 업데이트되었습니다.
이벤트에 UDF (계산)를 새로 고쳐야 하이퍼 링크 텍스트가 눈에 잘 띄게 업데이트되어야합니다.
예를 들어, UDF가 포함 된 시트에서 다음을 수행하여 Greg Glynn을 다시 계산하여 강제로 재 계산할 수 있습니다. 물론 효율적인 방법을 찾아서 놀 수 있습니다. 상기 코드 바와 같이
Private Sub Worksheet_Activate()
Cells.Replace What:="=", Replacement:="=", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub
: 업데이트되는 하이퍼 링크를 갖는다 A1
셀
셀 A3
(다른 시트의 셀이 될 수있는) 함수 GetURL
는 내부 랩핑 HYPERLINK
함수는 A1
을 가리 킵니다.
함수 코드는 표준 모듈에 갈 것 :
을 눌러 Alt 키 + F11 VBE에서를 열고 프로젝트 탐색기 창에서 바로 그때 Insert Module
을 클릭하고 코드를 입력 나타나는 모듈에 넣는다.
예를 들어, 기능을 포함하는 각 시트의 워크 시트 코드 창에 갈 것입니다 트리거 코드 (그래서 하이퍼 링크 텍스트 업데이트) 시트 4는 GetUrl
기능에 있었다면 다음과 같이 시트 코드 창에 입력합니다 :
내가 의견이 각 시트가 활성화 될 때 호출하는 함수에 투입 할 수 말했듯이.
옵션 2 : 매크로와 관련된 워크 시트의 버튼 이전 URL을 새로운 URL을
또는 최적화하지만 난 다른 사람으로 업데이트 행복하지 않은 다음을 포함하는 범위를 선택하라는 메시지를 표시 칩에 코멘트가있다.
Option Explicit
Public Sub ReplaceLinks()
Dim linksArr()
Application.ScreenUpdating = False
Dim myRange As Range
Set myRange = Application.InputBox("Please select both columns containing range of hyperlinks to update", Type:=8)
If Not myRange Is Nothing And myRange.Columns.Count = 2 Then
linksArr = myRange.Value
Else
MsgBox "Please select a range of two columns"
Exit Sub
End If
ReDim Preserve linksArr(1 To UBound(linksArr), 1 To 3)
linksArr = ValidateUrls(linksArr)
Dim currentLink As Long
For currentLink = LBound(linksArr, 1) To UBound(linksArr, 1)
If linksArr(currentLink, 3) Then
UpdateMyHyperlink CStr(linksArr(currentLink, 1)), CStr(linksArr(currentLink, 2))
End If
Next currentLink
WriteValidationResults linksArr, myRange
End Sub
Private Function ValidateUrls(ByVal linksArr As Variant) As Variant
Dim currentLink As Long
For currentLink = LBound(linksArr, 1) To UBound(linksArr, 1)
linksArr(currentLink, 3) = IsURLGood(CStr(linksArr(currentLink, 1)))
Next currentLink
ValidateUrls = linksArr
End Function
Public Function IsURLGood(ByVal url As String) As Boolean
'https://www.experts-exchange.com/questions/27240517/vba-check-URL-if-it-is-active-or-not.html by m4trix
Dim request As WinHttpRequest
Set request = New WinHttpRequest
On Error GoTo IsURLGoodError
request.Open "HEAD", url
request.Send
IsURLGood = request.Status = 200
Exit Function
IsURLGoodError:
IsURLGood = False
End Function
Private Sub UpdateMyHyperlink(ByVal oldUrl As String, ByVal newUrl As String)
Dim ws As Variant
Dim hyperlink As Variant
For Each ws In ThisWorkbook.Worksheets
For Each hyperlink In ws.Hyperlinks
If hyperlink.Address = oldUrl & "/" Then
hyperlink.Address = Application.WorksheetFunction.Substitute(hyperlink.Address, oldUrl, newUrl)
hyperlink.TextToDisplay = newUrl
End If
Next
Next
End Sub
Private Sub WriteValidationResults(ByVal linksArr As Variant, ByRef myRange As Range)
Dim isUrlValidOutput As Range
Set isUrlValidOutput = myRange.Offset(, 2).Resize(myRange.Rows.Count, 1)
isUrlValidOutput = Application.Index(linksArr, , 3)
isUrlValidOutput.Offset(-1, 0).Resize(1) = "Valid URL"
End Sub
을 - (당신은 또한 리본 메뉴에 개발 도구 탭을 추가 할 필요가 구글 Excel에서 버튼에 매크로를 지정) 그리고 당신은 설정합니다 이것은 단순히 당신이 버튼에 부착 표준 모듈에 배치하는 과정이 될 것입니다 다음 (D 열 코드로 첨가)를 데이터 :
이 형태 추가 제어 버튼 :
,536,913,632 10
자동으로 당신이 다음 업데이트 링크 절차를 지정할 수있는 창이 나타납니다 :
참고 : 하이퍼 링크는 통합 문서가 아닌 외부 링크입니다. – LadyStensberg