Gostaria de pedir a ajuda de vocês para solucionar um probleminha de macro. 😀
Bom, pra começar, vou pedir um pouco de paciência, pois eu entendo nadinha de macro. Eu consegui a tal macro com uma IA chat. O problema é que a tal IA chat não conseguiu solucionar o problema, por isso eis me aqui.
A macro em questão é essa (
Sub CheckHyperlinksWithProgress()
Dim hLink As Hyperlink
Dim brokenLinks As String
Dim count As Integer
Dim httpRequest As Object
Dim totalLinks As Integer
Dim i As Integer
Dim startTime As Single
Dim timeout As Integer
Dim saveFile As Variant
Dim responseStatus As Integer
Dim userTimeout As Integer
Dim followRedirects As Boolean
userTimeout = InputBox("Informe o tempo de timeout (em segundos):", "Timeout", 3)
If IsNumeric(userTimeout) And userTimeout > 0 Then
timeout = userTimeout
Else
MsgBox "Valor de timeout inválido. Usando padrão de 3 segundos."
timeout = 3
End If
i = 0
For Each hLink In ActiveDocument.Hyperlinks
On Error Resume Next ' Ignora erros individuais de link
i = i + 1
Application.StatusBar = "Verificando link " & i & " de " & totalLinks & " (" & Format(i / totalLinks, "0%") & ")"
If hLink.Address <> "" Then
If Left(hLink.Address, 5) <> "https" Then
brokenLinks = brokenLinks & hLink.Address & " (Não é HTTPS)" & vbCrLf
count = count + 1
GoTo ContinueNext
End If
If followRedirects And (responseStatus = 301 Or responseStatus = 302) Then
httpRequest.Open "HEAD", httpRequest.getResponseHeader("Location"), False
httpRequest.send
responseStatus = httpRequest.Status
End If
If responseStatus <> 200 Then
brokenLinks = brokenLinks & hLink.Address & " (Erro " & responseStatus & ")" & vbCrLf
count = count + 1
End If
End If
ContinueNext:
On Error Resume Next ' Reseta o tratamento de erro para ignorar falhas menores
If count > 0 Then
saveFile = Application.GetSaveAsFilename(InitialFileName:="LinksQuebrados.txt", FileFilter:="Text Files (*.txt), *.txt", Title:="Salvar links quebrados")
If saveFile <> False Then
Dim fileNum As Integer
fileNum = FreeFile
Open saveFile For Output As #fileNum
Print #fileNum, brokenLinks
Close #fileNum
MsgBox count & " links quebrados encontrados e salvos em " & saveFile
Else
MsgBox count & " links estão quebrados:" & vbCrLf & brokenLinks
End If
Else
MsgBox "Todos os links estão funcionando!"
End If
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub
). E o problema que ela apresenta é esse (em anexo). Estou usando o Word 2007 (Sim, eu sei, é pre-histórico, mas me atende no momento).
Pra quem puder me ajudar, eu agradeço antecipadamente. 🙏
Question
Moizevitch
Olá pessoal!
Gostaria de pedir a ajuda de vocês para solucionar um probleminha de macro. 😀
Bom, pra começar, vou pedir um pouco de paciência, pois eu entendo nadinha de macro. Eu consegui a tal macro com uma IA chat. O problema é que a tal IA chat não conseguiu solucionar o problema, por isso eis me aqui.
A macro em questão é essa (
Sub CheckHyperlinksWithProgress()
Dim hLink As Hyperlink
Dim brokenLinks As String
Dim count As Integer
Dim httpRequest As Object
Dim totalLinks As Integer
Dim i As Integer
Dim startTime As Single
Dim timeout As Integer
Dim saveFile As Variant
Dim responseStatus As Integer
Dim userTimeout As Integer
Dim followRedirects As Boolean
userTimeout = InputBox("Informe o tempo de timeout (em segundos):", "Timeout", 3)
If IsNumeric(userTimeout) And userTimeout > 0 Then
timeout = userTimeout
Else
MsgBox "Valor de timeout inválido. Usando padrão de 3 segundos."
timeout = 3
End If
followRedirects = MsgBox("Deseja seguir redirecionamentos?", vbYesNo, "Redirecionamentos") = vbYes
count = 0
Set httpRequest = CreateObject("MSXML2.ServerXMLHTTP") ' Tente usar ServerXMLHTTP
totalLinks = ActiveDocument.Hyperlinks.count
Application.ScreenUpdating = False
Application.StatusBar = "Iniciando verificação de links..."
startTime = Timer
i = 0
For Each hLink In ActiveDocument.Hyperlinks
On Error Resume Next ' Ignora erros individuais de link
i = i + 1
Application.StatusBar = "Verificando link " & i & " de " & totalLinks & " (" & Format(i / totalLinks, "0%") & ")"
If hLink.Address <> "" Then
If Left(hLink.Address, 5) <> "https" Then
brokenLinks = brokenLinks & hLink.Address & " (Não é HTTPS)" & vbCrLf
count = count + 1
GoTo ContinueNext
End If
On Error GoTo LinkError
httpRequest.Open "HEAD", hLink.Address, False
httpRequest.send
responseStatus = httpRequest.Status
If followRedirects And (responseStatus = 301 Or responseStatus = 302) Then
httpRequest.Open "HEAD", httpRequest.getResponseHeader("Location"), False
httpRequest.send
responseStatus = httpRequest.Status
End If
If responseStatus <> 200 Then
brokenLinks = brokenLinks & hLink.Address & " (Erro " & responseStatus & ")" & vbCrLf
count = count + 1
End If
End If
ContinueNext:
On Error Resume Next ' Reseta o tratamento de erro para ignorar falhas menores
LinkError:
brokenLinks = brokenLinks & hLink.Address & " (Falha na verificação)" & vbCrLf
count = count + 1
Resume ContinueNext
Next hLink
Application.StatusBar = "Verificação de links concluída. Links quebrados encontrados: " & count
If count > 0 Then
saveFile = Application.GetSaveAsFilename(InitialFileName:="LinksQuebrados.txt", FileFilter:="Text Files (*.txt), *.txt", Title:="Salvar links quebrados")
If saveFile <> False Then
Dim fileNum As Integer
fileNum = FreeFile
Open saveFile For Output As #fileNum
Print #fileNum, brokenLinks
Close #fileNum
MsgBox count & " links quebrados encontrados e salvos em " & saveFile
Else
MsgBox count & " links estão quebrados:" & vbCrLf & brokenLinks
End If
Else
MsgBox "Todos os links estão funcionando!"
End If
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub
). E o problema que ela apresenta é esse (em anexo). Estou usando o Word 2007 (Sim, eu sei, é pre-histórico, mas me atende no momento).
Pra quem puder me ajudar, eu agradeço antecipadamente. 🙏
Link to comment
Share on other sites
2 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.