在Excel中超过最大字符数限制

如何在Excel的CONCATENATE函数中使用超过255个字符? 我实际上也使用EXCEL中的HYPERLINK函数中的CONCATENATE函数。 一个例子是这样的:

=HYPERLINK(CONCATENATE("http://www.google/com/morethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255chars","morethan255chars morethan255charsmorethan255charsmorethan255charsmorethan25"),"link"); 

更新:这不是CONCATENATE函数的问题,而是HYPERLINK函数的第一个参数的问题。 直接/间接使用超过255个字符的string(例如:= HYPERLINK(K204,“链接”),其中K204包含256个字符的长度链接)失败了HYPERLINKfunction

我意识到,我可以使用URL缩短,但我这样做的ALOT链接,这将需要很多手动使用URL缩短。

更新:由于卡尔斯评论我重新回顾了我的答案发现,Excel 2007似乎不允许用户定义函数设置超链接(相当明智,请参阅我自己的代码中的评论)。 所以原来的代码(在行下面)不适用于更新版本的Excel(我没有testing过Excel 2010,但我假设结果是一样的)。 由于历史原因,我不删除旧的代码(编辑器可能会认为,否则相应地编辑/删除)。

那么剩下的就是以编程方式设置超长链接,例如

 Sub insertVeryLongHyperlink() Dim curCell As Range Dim longHyperlink As String Set curCell = Range("A1") ' or use any cell-reference longHyperlink = "http://www.veryLongURL.com/abcde" ' Or a Cell reference like [C1] curCell.Hyperlinks.Add Anchor:=curCell, _ Address:=longHyperlink, _ SubAddress:="", _ ScreenTip:=" - Click here to follow the hyperlink", _ TextToDisplay:="Long Hyperlink" End Sub 

以下内容在Excel 2010中不起作用; 看到我上面的评论

“从Word复制超链接并粘贴到Excel”让我思考。 所以显然这个限制是在内置的HYPERLINK函数和对话窗口“编辑超链接”中。 另一方面,它应该 – 实际上是 – 可以通过VBA设置更长的超链接。

此代码在Excel 2010中不起作用

 Function myHyperlink(cell As Range, _ hyperlinkAddress As String, _ Optional TextToDisplay As Variant, _ Optional ScreenTip As Variant) ' Inserts a Hyperlink ' at the position cell (this should be the position where the UDF is used, ' since the return value of the UDF is = TextToDisplay) ' with the hyperlinkAddress ' optional TextToDisplay ' optional ScreenTip ' ####################################### ' Warning Warning Warning Warning Warning ' ####################################### ' 1) Since it is really bad practice to have a function perform procedural ' tasks, you should not do this. ' 2) You have no garantee, the link is updated when the value hyperlinkAddress changes ' USE AT YOUR ONE RISK AND ONLY IN CASE OF EMERGENCIES :-) ' If more than one cell is selected as target range, ' use the top left cell Set cell = cell.Resize(1, 1) If IsMissing(TextToDisplay) Then TextToDisplay = hyperlinkAddress End If If IsMissing(ScreenTip) Then ScreenTip = hyperlinkAddress & " - Click here to follow the hyperlink" End If cell.Hyperlinks.Add Anchor:=ActiveCell, _ Address:=hyperlinkAddress, _ SubAddress:="", _ ScreenTip:=ScreenTip, _ TextToDisplay:=TextToDisplay ' There doesn't seem to be another way to set TextToDisplay myHyperlink = TextToDisplay End Function 

用作正常的Excel函数,但一定要添加当前单元格作为第一个参数(即下面的公式插入单元格A1)

 =myHyperlink(A1,B1) =myHyperlink(A1,B1,"TextToDisplay", "ScreenTip") 

你既不能拉下公式,也不能把它复制到另一个单元格。 如果你这样做,你必须重新计算公式(重新计算ALT-CTRL-F9和ALT-CTRL-SHIFT-F9似乎都不起作用),所以进入每个单元格,按F2激活它,并完成返回。

我希望我不会帮你搞砸太多的Excel工作簿。

编写一个明确启动的VBA可能更安全一些,这个VBA遍历一个列表并写入超链接。 这样他们可以重用,没有function。

问候安德烈亚斯

你可能不走运。 看来Excel中超链接的字符限制是256 这里指出。 如果你自己testing(我也有Excel 2007), =HYPERLINK(REPT("a",255))起作用, =HYPERLINK(REPT("a",256))不会抛出一个#VALUE! 错误。

我有Excel 2007,我试图在A1中使用300个字符的单元格,另一个在B1中使用300个不同的字符。

然后我做了C1 = CONCATENATE(A1, B1)

我可以看到两个单元格中的所有字符。 没有遗漏或被截断,没有收到错误。 这对我来说很好。

是什么让你认为连接失败? 你看到你的结果有困难吗? 如果您的单元格包含超过1,024个字符,则只在单元格中显示前1024个字符。 然而,他们仍然在那里,如果你复制和粘贴他们所有的字符将被复制。

编辑:现在你已经编辑你的问题,我意识到问题是与HYPERLINK而不是CONCATENATE

在Excel中绕过HYPERLINK公式的255个字符限制的唯一方法是从Word中复制一个超链接,并将其粘贴到Excel中的一个单元格中。 那么它可以超长。 我知道这是一个不合理的手动过程,如果你有很多的链接,但它似乎是唯一的方法把它放入Excel电子表格,但仍然是一个超链接,你可以点击并redirect。 如果你不需要它像一个超链接,那么我会build议重写你的查询返回超链接作为自己的文本字段,那么它会没事的。

这里有一些使用bitly.com来缩短URL的VBA。 它基于一些API文档 。

  1. 创build一个免费的账户。
  2. 有效的电子邮件地址。
  3. 从一点点获取访问令牌。
  4. 在下面代表MY_TOKEN的VBA代码中replace访问令牌。
  5. 将代码复制并粘贴到Excel的VBA中。
  6. 在一个单元格中,写下面的'=没有单引号'的超链接(GetURL(“一些非常长的URL”))。 注意:不要将string传递给GetURL(),而是将引用传递给其中包含URL的单元格作为文本。
 Public Function GetURL(longUrl As String) As String Dim xml As Object longUrl = URLEncode(longUrl) Set xml = CreateObject("MSXML2.XMLHTTP.6.0") xml.Open "GET", "https://api-ssl.bitly.com/v3/shorten?format=xml&access_token=MY_TOKEN=" & longUrl, False xml.Send GetURL = xml.responsetext head = InStr(GetURL, "<url>") + 5 tail = InStr(GetURL, "</url>") GetURL = Mid(GetURL, head, tail - head) End Function Function URLEncode(ByVal Text As String) As String Dim i As Integer Dim acode As Integer Dim char As String URLEncode = Text For i = Len(URLEncode) To 1 Step -1 acode = Asc(Mid$(URLEncode, i, 1)) Select Case acode Case 48 To 57, 65 To 90, 97 To 122 ' don't touch alphanumeric chars Case 32 ' replace space with "+" Mid$(URLEncode, i, 1) = "+" Case Else ' replace punctuation chars with "%hex" URLEncode = Left$(URLEncode, i - 1) & "%" & Hex$(acode) & Mid$(URLEncode, i + 1) End Select Next End Function 

不知道如果我的答案仍然有用,但几天前我有同样的问题,最好的方法和certificate的方式来做一个超过255字符限制的可行的超链接是首先与CONCATENATE()分裂,并使用单元格与VBA CONCATENATE()函数一起使用。

对我来说,它看起来像:

 A1 = LinkPart1 A2 = LinkPart2 A3 = LinkPart3 A5 = CONCATENATE( A1; A2; A3 ) 

您需要链接A5 VBA代码:

 Sub insertVeryLongHyperlink() Dim curCell As Range Dim longHyperlink As String Set curCell = Range("A7") ' or use any cell-reference longHyperlink = [A5] curCell.Hyperlinks.Add Anchor:=curCell, _ Address:=longHyperlink, _ SubAddress:="", _ ScreenTip:=" - Click here to follow the hyperlink", _ TextToDisplay:="Click Here" End Sub 

而不是写作

 =CONCATENATE("Toto";"Tata") 

在单元格Z1(例如)和单元格Z2中的Tata中写入Toto并写入

 =CONCATENATE(Z1;Z2) 

伙计们,我认为一个URL缩短VBA将帮助你。 这是我今天find的 它的作用像一个魅力: http : //www.jpsoftwaretech.com/shorten-urls-with-bit-ly-web-api-and-vba/

超链接function有一个硬限制,不能超过。 我有一个类似的问题,我只是将Excel工作表导入到Open Office Calc中,瞧 – 一切工作都可以立即进行,而且之前超长的超链接现在只要我想要就可以了。

您可以使用VBA Shell()例程来执行浏览器,并在通过Shell()调用传递的命令行上将URL传递给它。 因此,URL可以是shell机制支持的任何长度。

此外,您可以通过让用户双击该单元格从任何单元格值获取此URL。 这个值可以通过一个单独的CONCATENATE()函数调用从许多单元格构build! 没错,只有一个电话。 CONCATENATE()会占用大量的参数,并会创build一个比255个字符好的string。 您不需要费力地join许多单独的连接或使用大量“构build器”单元。 一个会做!

当您右键单击工作表底部的选项卡时,需要通过打开“查看代码”选项来创buildmacros。 然后写下面的代码非常短,简单,无痛:

 Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Selection.Count = 1 Then If Left(Target.Value, 7) = "HTTP://" Then Cancel = True Shell ("""" + Range("Browser").Value + """" + " " + """" + Target.Value + """") End If End If End Sub 

请注意,“浏览器”是一个命名的单元格,应包含浏览器的无引号path,即IE,Opera,Mozilla或Chrome。 您必须自己命名单元格,或将macros更改为像“A2”这样的硬单元格引用。 当然,这个单元格的值必须是一个有效的浏览器path!

一旦你完成了所有这些,你可以双击任何一个以文本“HTTP://”开头的单元格,Excel将打开浏览器的全部值,不pipe它多长时间。 所有你需要的是build立你的string在该单元格中,也许格式化它的颜色/字体的明智,这是一个超链接单元格被双击。 附近的文本提示也可能是为了!

顺便说一句,macros的Shell()行的替代方法是:

 ThisWorkbook.FollowHyperlink Address:=Target.Value 

虽然这也会处理大于255个字符的URL,但我发现这个FollowHyperlink()函数会导致URL被发送两次。 一旦由Excel函数本身(大概是为了testing它),然后再由Excel打开的默认浏览器! 这可能是不可取的(并不是我的情况)。 这就是为什么我最终使用Shell()函数。