【发布时间】:2018-11-07 16:07:48
【问题描述】:
在我的 Excelsheet 中,我使用了一个带有来自 sql-server 的数据源的表。
其中一列包含电话号码,另一列包含邮件地址。
现在我想创建一个像tel:09999999 或mailto:test@test.com 这样的超链接来打开默认的windows 应用程序来开始通话或写电子邮件。
单元格的格式是通用的。
不幸的是,超链接是纯文本而不是超链接。我看到像=hyperlink("tel:09999999";"09999999") 这样的公式。当我单击单元格时,按[F2]-键并按回车键,然后excel将单元格值更改为“正确”的超链接。
我尝试的第二个想法是为所有这些单元格编写一个宏。但性能不好,我有大约 20000 行 5 列,所以 excel 运行大约 1 分钟只用于创建超链接。 代码如下:
lastrow = ActiveSheet.Cells(Cells.Rows.Count, 1).End(xlUp).Row
For i2 = 4 To lastrow
'Phone1
Worksheets("Report").Cells(i2, 11).Select
If Len(Selection.Value) > 0 Then
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="tel:" + CStr(Selection), TextToDisplay:=CStr(Selection)
End If
'Phone2
Worksheets("Report").Cells(i2, 12).Select
If Len(Selection.Value) > 0 Then
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="tel:" + CStr(Selection), TextToDisplay:=CStr(Selection)
End If
'Phone3
Worksheets("Report").Cells(i2, 13).Select
If Len(Selection.Value) > 0 Then
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="tel:" + CStr(Selection), TextToDisplay:=CStr(Selection)
End If
'Mail1
Worksheets("Report").Cells(i2, 14).Select
If Len(Selection.Value) > 0 Then
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="mailto:" + CStr(Selection), TextToDisplay:=CStr(Selection)
End If
'Mail2
Worksheets("Report").Cells(i2, 15).Select
If Len(Selection.Value) > 0 Then
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="mailto:" + CStr(Selection), TextToDisplay:=CStr(Selection)
End If
Next i2
【问题讨论】:
-
您确定 [
;] 吗?原始(美国)版本的公式使用 [,] 作为分隔符。 -
@MaciejLos
;是欧洲方式,,是普通的十进制分隔符。 -
[;] 是瑞士德语的正确格式。
-
您意识到可以进行许多调整来加快您的代码速度吗? cpearson.com/excel/optimize.htm 并且 avoiding select 应该在您的列表中排在第一位。您应该会看到速度显着提高。
-
用范围变量替换选择语句有很大帮助!感谢这个好主意!但我想要更快的速度! :) 当循环运行时,excel 应用程序“冻结”直到循环结束。