Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Excel中的超链接不可单击_Sql_Excel_Vba - Fatal编程技术网

Sql Excel中的超链接不可单击

Sql Excel中的超链接不可单击,sql,excel,vba,Sql,Excel,Vba,在我的Excelsheet中,我使用了一个带有sql server数据源的表。 其中一列包括电话号码,另一列包括邮箱地址。 现在我想创建一个超链接,如tel:0999999或mailto:test@test.com打开默认windows应用程序以启动呼叫或编写电子邮件。 单元格的格式是通用的 不幸的是,超链接是纯文本而不是超链接。我看到的公式类似于=hyperlink(“电话:09999999”;“09999999”)。单击单元格时,按[F2]-键并按return,然后excel将单元格值更改为

在我的Excelsheet中,我使用了一个带有sql server数据源的表。 其中一列包括电话号码,另一列包括邮箱地址。 现在我想创建一个超链接,如
tel:0999999
mailto:test@test.com
打开默认windows应用程序以启动呼叫或编写电子邮件。 单元格的格式是通用的

不幸的是,超链接是纯文本而不是超链接。我看到的公式类似于
=hyperlink(“电话:09999999”;“09999999”)
。单击单元格时,按
[F2]
-键并按return,然后excel将单元格值更改为“正确”的超链接

我尝试的第二个想法是为所有这些单元格编写一个宏。但是性能不好,我有大约20000行5列,所以excel只运行大约1分钟来创建超链接。 代码如下所示:

lastrow=ActiveSheet.Cells(Cells.Rows.Count,1).End(xlUp).Row
对于i2=4到最后一行
'电话1
工作表(“报告”)。单元格(i2,11)。选择
如果Len(Selection.Value)>0,则
ActiveSheet.Hyperlinks.Add锚定:=选择,地址:=“电话:+CStr(选择),文本显示:=CStr(选择)
如果结束
'电话2
工作表(“报告”)。单元格(i2、12)。选择
如果Len(Selection.Value)>0,则
ActiveSheet.Hyperlinks.Add锚定:=选择,地址:=“电话:+CStr(选择),文本显示:=CStr(选择)
如果结束
'电话3
工作表(“报告”)。单元格(i2、13)。选择
如果Len(Selection.Value)>0,则
ActiveSheet.Hyperlinks.Add锚定:=选择,地址:=“电话:+CStr(选择),文本显示:=CStr(选择)
如果结束
“邮件1
工作表(“报告”)。单元格(i2、14)。选择
如果Len(Selection.Value)>0,则
ActiveSheet.Hyperlinks.Add锚定:=选择,地址:=“mailto:”+CStr(选择),TextToDisplay:=CStr(选择)
如果结束
“邮件2
工作表(“报告”)。单元格(i2、15)。选择
如果Len(Selection.Value)>0,则
ActiveSheet.Hyperlinks.Add锚定:=选择,地址:=“mailto:”+CStr(选择),TextToDisplay:=CStr(选择)
如果结束
下一个i2

我想指出的是,每个国家的Office版本之间都有细微的差异。换句话说,它们使用不同的设置,例如日期设置、分隔符和最后。。。不同的公式

例如,超链接的“标准”(原始、通用)公式是:

=HYPERLINK("tel:09999999","09999999")
我们可以在波兰语版Excel应用程序中使用的本地公式为:

=HIPERŁĄCZE("tel:09999999";"09999999")
如你所见:

  • 函数的名称与原始名称不同
  • “公式分隔符”与原始分隔符不同
  • 有关它的更多详细信息,您可以在此处找到:

    因此,如果您想通过VBA代码插入公式,而VBA代码使用[
    ],则必须使用
    FormulaLocal
    属性。如果要使用
    formula
    属性插入公式,则必须注意使用正确的分隔符

    因此,插入公式的保存方式应为:

    'English (universal way)
    oSheet.Range("A1").Formula = "=HYPERLINK(""tel:00009"",""000009"")"
    'German
    oSheet.Range("A1").FormulaLocal = "=HYPERLINK(""tel:00009""" & Application.International(xlListSeparator) & """000009"")"
    
    至于你的代码。。。已警告您不要使用
    Select
    方法


    祝你好运

    你确定[
    ]吗?公式的原始(美国)版本使用[
    ]作为分隔符。@MaciejLos
    是欧洲的方式,
    是标准的十进制分隔符。[;]是瑞士德语的正确格式。您是否意识到可以进行许多调整以加快代码速度?避免应该是你清单上的第一位。您应该看到速度有了显著的提高。用范围变量替换select语句会有很大帮助!谢谢你这个好主意!但我希望有更多的速度!:)此外,循环运行excel应用程序“冻结”直到循环结束。