Excel 하이퍼링크 대량 업데이트
수천 개의 행이 있는 스프레드시트가 있습니다.각 행에는 경로가 있는 하이퍼링크가 포함됩니다.
경로가 올바르지 않지만 경로의 첫 번째 부분을 올바른 값으로 교체하여 쉽게 수정할 수 있습니다.
Example: current hyperlink: F:\Help\index.html
Needed: P:\SystemHelp\index.html
문제는 표준 찾기/바꾸기가 하이퍼링크의 내용을 "확인"하지 못한다는 것입니다.
매크로를 작성하는 유일한 방법입니까, 아니면 다른 방법이 있습니까?
cnx.org , Replace 기능을 재창조하는 방법입니다.
Sub FindReplaceHLinks(sFind As String, sReplace As String, _
Optional lStart As Long = 1, Optional lCount As Long = -1)
Dim rCell As Range
Dim hl As Hyperlink
For Each rCell In ActiveSheet.UsedRange.Cells
If rCell.Hyperlinks.Count > 0 Then
For Each hl In rCell.Hyperlinks
hl.Address = Replace(hl.Address, sFind, sReplace, lStart, lCount, vbTextCompare)
Next hl
End If
Next rCell
End Sub
Sub Doit()
FindReplaceHLinks "F:\help\", "F:\SystemHelp\"
End Sub
매크로 필요 없음
경고: 그래프와 같은 일부 항목은 손실될 수 있지만 공식과 형식은 보존된 것 같습니다.
문서를 XML 스프레드시트로 저장
메모장으로 파일 열기
"모두 바꾸기"를 "잘못된 텍스트 문자열"에서 "올바른 텍스트 문자열"로 변경
절약하다
Excel로 파일 열기
문서를 원래 형식으로 저장
저는 매크로 외에 다른 방법을 모릅니다.하지만 누군가가 이미 그것을 하기 위해 그것을 쓴 것처럼 보입니다.
Public Sub ReplaceHyperlinkURL(FindString As String, ReplaceString As String) Dim LinkURL As String Dim PreStr As String Dim PostStr As String Dim NewURL As String Dim FindPos As Integer Dim ReplaceLen As Integer Dim URLLen As Integer Dim MyDoc As Worksheet Dim MyCell As Range On Error GoTo ErrHandler Set MyDoc = ActiveSheet For Each MyCell In MyDoc.UsedRange If MyCell.Hyperlinks.Count > 0 Then LinkURL = MyCell(1).Hyperlinks(1).Address FindPos = InStr(1, LinkURL, FindString) If FindPos > 0 Then 'If FindString is found ReplaceLen = Len(FindString) URLLen = Len(LinkURL) PreStr = Mid(LinkURL, 1, FindPos - 1) PostStr = Mid(LinkURL, FindPos + ReplaceLen, URLLen) NewURL = PreStr & ReplaceString & PostStr MyCell(1).Hyperlinks(1).Address = NewURL 'Change the URL End If End If Next MyCell Exit Sub ErrHandler: MsgBox ("ReplaceHyperlinkURL error") End Sub Public Sub WBReplaceHyperlinkURL(FindString As String, ReplaceString As String) 'For all sheets in the workbook Dim LinkURL As String Dim PreStr As String Dim PostStr As String Dim NewURL As String Dim FindPos As Integer Dim ReplaceLen As Integer Dim URLLen As Integer Dim MyDoc As Worksheet Dim MyCell As Range On Error GoTo ErrHandler For Each WS In Worksheets WS.Activate Set MyDoc = ActiveSheet For Each MyCell In MyDoc.UsedRange If MyCell.Hyperlinks.Count > 0 Then LinkURL = MyCell(1).Hyperlinks(1).Address FindPos = InStr(1, LinkURL, FindString) If FindPos > 0 Then 'If FindString is found ReplaceLen = Len(FindString) URLLen = Len(LinkURL) PreStr = Mid(LinkURL, 1, FindPos - 1) PostStr = Mid(LinkURL, FindPos + ReplaceLen, URLLen) NewURL = PreStr & ReplaceString & PostStr MyCell(1).Hyperlinks(1).Address = NewURL 'Change the URL End If End If Next MyCell Next WS MsgBox ("Hyperlink Replacement Complete") Exit Sub ErrHandler: MsgBox ("ReplaceHyperlinkURL error") End Sub
코드는 VBA 코드 모듈에 배치해야 합니다.스프레드시트에서 개발자 리본의 VBA 편집기를 엽니다.현상제 리본은 Excel 옵션의 인기 탭에서 활성화할 수 있습니다.그런 다음 메뉴에서 [삽입] - [모듈]을 선택합니다.코드를 복사하여 모듈에 붙여넣습니다.그런 다음 모듈을 저장합니다.
절차를 실행하려면 다음 줄이 포함된 매크로를 만들고 Excel에서 매크로를 실행합니다.찾기 텍스트를 찾으려는 주소 부분으로 바꾸고 텍스트를 바꾸려는 텍스트로 바꾸십시오.
Call ReplaceHyperlinkURL("FindText", "ReplaceText")
텍스트 찾기 또는 텍스트 바꾸기에서 오류가 발생할 경우를 대비하여 매크로를 실행하기 전에 스프레드시트의 백업 복사본을 만드십시오.워크북의 모든 시트를 검색하고 교체하려면 WBRplaceHyperlink를 사용합니다.ReplaceHyperlink가 아닌 URL 루틴URL.
매크로나 VB 스크립팅에 익숙하지 않았기 때문에 일반적으로 이러한 용도로 사용하는 것은 다음과 같습니다.이는 형식에 영향을 미치지 않으며 모든 그래프와 차트는 그대로 유지됩니다.
의 이름을 .
.xlsx
또는.xls
을 로다철하에 합니다..zip
을 풀고 압을풀파편집다니합일을당해축고▁the다▁and▁unzip▁edit니▁appropriate를 편집합니다.
.xml
또는xml.rels
원하는 을 내부에 합니다. 는 텍 여 하 파 내 에 저 장 부의 이름을 .
.zip
로 줄을 지어 돌려보내다..xlsx
(또는).xls
)
바로 그거야.
2단계에서는 다음 방법 중 하나를 선택할 수 있습니다.
내부에서 직접 편집
.zip
파일 OR추출:
.zip
그런 다음 외부의 파일을 편집합니다..zip
그리고 나서 그것을 다시 그것으로 교체합니다..zip
드래그 앤 드롭 OR.zip을 압축 해제하고 편집한 후 Windows 탐색기만 사용하여 다시 압축합니다(오른쪽 클릭 > Send to > Compressed (zip) 폴더).
워크시트는 일반적으로 내부에 위치합니다..zip
다음과 같은 경로로xl > worksheets
링크가 저장되는 경우도 있습니다..rels
저장된 파일xl > worksheets > rels
다른 방법은 ' 문자를 모두 텍스트로 삽입하여 검색 및 교체한 다음 ' 문자를 사용하여 제거하는 것입니다.
언급URL : https://stackoverflow.com/questions/2805046/excel-hyperlink-mass-update
'programing' 카테고리의 다른 글
SQL 예외: 문자열 또는 이진 데이터가 잘립니다. (0) | 2023.06.27 |
---|---|
Python mysqldb: 라이브러리가 로드되지 않음: libmysqlclient.18.dylib (0) | 2023.06.27 |
구체화된 보기의 원본 스크립트를 보는 방법은 무엇입니까? (0) | 2023.06.27 |
Firebase 연결이 끊겼거나 다시 연결되었는지 여부 (0) | 2023.06.27 |
비밀번호 인증확인은 차단의 일부로 일시적으로 비활성화됩니다.대신 개인 액세스 토큰을 사용하십시오. (0) | 2023.06.27 |