試行錯誤
仮定
ここでは、Excel ファイルに示されている 3 つのシナリオについて説明します。
=HYPERLINK("www."&"Google"&".Com","Google")
. このハイパーリンクにはわかりやすい名前が付けられています
www.Google.com
通常のハイパーリンク
=HYPERLINK("www."&"Google"&".Com")
このハイパーリンクにはフレンドリ名がありません
スクリーンショット:
論理:
- ハイパーリンクの種類を確認してください。フレンドリ名以外の場合、コードは非常に簡単です
"www."&"Google"&".Com"
ハイパーリンクにわかりやすい名前が付けられている場合、コードはテキストを抽出=HYPERLINK("www."&"Google"&".Com","Google")
して、そのセルに数式として保存しようとします。
- 式が上記のテキストを通常のハイパーリンク、つまりフレンドリ名なしに変換したら、次を使用して開きます
ShellExecute
- セルの元の数式をリセットする
コード:
Private Declare Function ShellExecute _
Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal hWnd As Long, ByVal Operation As String, _
ByVal Filename As String, Optional ByVal Parameters As String, _
Optional ByVal Directory As String, _
Optional ByVal WindowStyle As Long = vbMinimizedFocus _
) As Long
Sub Sample()
Dim sFormula As String
Dim sTmp1 As String, sTmp2 As String
Dim i As Long
Dim ws As Worksheet
'~~> Set this to the relevant worksheet
Set ws = ThisWorkbook.Sheets(1)
i = 1
With ActiveSheet
Do While WorksheetFunction.IsText(.Range("E" & i))
With .Range("E" & i)
'~~> Store the cells formula in a variable for future use
sFormula = .Formula
'~~> Check if cell has a normal hyperlink like as shown in E2
If .Hyperlinks.Count > 0 Then
.Hyperlinks(1).Follow
'~~> Check if the cell has a hyperlink created using =HYPERLINK()
ElseIf InStr(1, sFormula, "=HYPERLINK(") Then
'~~> Check if it has a friendly name
If InStr(1, sFormula, ",") Then
'
' The idea here is to retrieve "www."&"Google"&".Com"
' from =HYPERLINK("www."&"Google"&".Com","Google")
' and then store it as a formula in that cell
'
sTmp1 = Split(sFormula, ",")(0)
sTmp2 = "=" & Split(sTmp1, "HYPERLINK(")(1)
.Formula = sTmp2
ShellExecute 0, "Open", .Text
'~~> Reset the formula
.Formula = sFormula
'~~> If it doesn't have a friendly name
Else
ShellExecute 0, "Open", .Text
End If
End If
End With
i = i + 1
Loop
End With
End Sub