如何解决通过VBA发送到Google搜索时,带有特殊字母的Excel单元格值无法识别
我有一个Excel文件,其中包含包含发送给Google搜索的带有特殊字符(é,î,ù等)的单词的单元格。 我为此使用VBA,并且在使用MsgBox时似乎VBA可以毫无问题地识别它们。但是,当这些单词出现在Google搜索栏中时,重音字母会变成问号(例如:île变成?le )。
(我的区域设置已经显示出来,能够读取那些特殊字母。)
这是我的VBA代码:
Sub SpecialLetters()
Dim objIe As Object
Set objIe = CreateObject("InternetExplorer.Application")
objIe.Visible = True
objIe.navigate "http://www.google.com/search?hl=en&ie=UTF-8&q=" & Sheets("Sheet1").Range("A1").Value
End Sub
解决方法
为避免这种情况,您可以使用标准URL方式对搜索词进行编码。
如果您具有Excel 2013或更高版本,则可以使用WorksheetFunction.EncodeURL来执行此操作。您的代码应为:
sum((max_over_time(adr_general_gauge{attnid=~"$AttnID",hhmm=~".*",device=~"$Device",network=~"$Network",status=~"$Status"}[5m])) + on
(hhmm,attnid) group_right(network,device,status) 0*
(max_over_time(adr_code_gauge{attnid=~"$AttnID",adr_code=~"$ADR_Code",description=~".*",network=~"$Network"}[5m]))) by (attnid,status,network,adr_code,description) == 0
then
sum(max_over_time(adr_general_gauge{attnid=~"$AttnID",status=~"$Status"}[5m]))) by
(attnid,description)
对于Excel 2010或更低版本,没有创建自己的函数就无法实现的方法,但是幸运的是Tomalak已经在VBA(see here)中提供了一个实现该功能的函数,您可以简单地使用以下函数: / p>
Sub SpecialLetters()
Dim objIe As Object
Set objIe = CreateObject("InternetExplorer.Application")
objIe.Visible = True
objIe.Navigate "http://www.google.com/search?hl=en&ie=UTF-8&q=" & WorksheetFunction.EncodeURL(Sheets("Sheet1").Range("A1").Value)
End Sub
确保您具有对Microsoft ActiveX数据对象库的引用,以便它起作用。
您的代码将变为:
Public Function URLEncode( _
ByVal StringVal As String,_
Optional SpaceAsPlus As Boolean = False _
) As String
Dim bytes() As Byte,b As Byte,i As Integer,space As String
If SpaceAsPlus Then space = "+" Else space = "%20"
If Len(StringVal) > 0 Then
With New ADODB.Stream
.Mode = adModeReadWrite
.Type = adTypeText
.Charset = "UTF-8"
.Open
.WriteText StringVal
.Position = 0
.Type = adTypeBinary
.Position = 3 ' skip BOM
bytes = .Read
End With
ReDim result(UBound(bytes)) As String
For i = UBound(bytes) To 0 Step -1
b = bytes(i)
Select Case b
Case 97 To 122,65 To 90,48 To 57,45,46,95,126
result(i) = Chr(b)
Case 32
result(i) = space
Case 0 To 15
result(i) = "%0" & Hex(b)
Case Else
result(i) = "%" & Hex(b)
End Select
Next i
URLEncode = Join(result,"")
End If
End Function
,
请尝试使用EncodeURL
功能(在2010版本之后的Office安装中可以使用):
Sub SpecialLetters()
Dim objIe As Object
Set objIe = CreateObject("InternetExplorer.Application")
objIe.Visible = True
objIe.navigate "http://www.google.com/search?hl=en&ie=UTF-8&q=" & _
WorksheetFunction.EncodeURL(Sheets("Sheet1").Range("A1").Value)
End Sub
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。