【问题标题】:How do I handle more than 255 characters in a cell in Excel?如何在 Excel 的单元格中处理超过 255 个字符?
【发布时间】:2015-05-11 14:07:03
【问题描述】:

我正在使用 VBA 代码将一些信息从表 2 复制粘贴 (Application.Transpose) 到表 1。代码运行良好,但是,我有几个超过 255 个字符的单元格。

我遇到了这些单元格的错误(错误 13:类型不匹配)。我认为这是因为单元格包含超过 255 个字符。

下面是我正在使用的代码:

Sub Bouton3_Cliquer()

Dim O1 As Worksheet 'déclare la variable O1 (Onglet 1)
Dim O2 As Worksheet 'déclare la variable O2 (Onglet 2)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim TL() As Variant 'déclare la variable TL (Tableau de Lignes)
Dim K As Integer 'déclare la variable K (incrément)
Dim PL As Integer 'déclare la variable PL (Première Ligne)
Dim J As Integer 'déclare la variable J (incrément)
Dim L As Byte 'déclare la variable L (incrément)

Set O1 = Sheets("Feuil1") 
Set O2 = Sheets("evaluations") 
TC = O1.Range("B1").CurrentRegion

Set D = CreateObject("Scripting.Dictionary") 

For I = 4 To UBound(TC, 1) 
    D(TC(I, 1)) = "" 
Next I 
TMP = D.keys 
TC = O2.Range("A1").CurrentRegion 
For I = 0 To UBound(TMP, 1) 
    Erase TL 'efface le tableau TL
    K = 1 'initialise la variable K

    PL = O1.Columns(2).Find(TMP(I), O1.Range("B3"), xlValues, xlWhole).Row
    For J = 2 To UBound(TC, 1) 
            If TC(J, 1) = TMP(I) Then
            ReDim Preserve TL(1 To UBound(TC, 2) - 1, 1 To K)
            For L = 1 To UBound(TC, 2) - 1 
                TL(L, K) = TC(J, L + 1) 
            Next L 
            K = K + 1 '
        End If 'fin de la condition
    Next J 
            If K > 1 Then O1.Cells(PL, 16).Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
Next I '

End Sub

还有问题所在:

If K > 1 Then 
  O1.Cells(PL, 16).Resize(UBound(TL, 2), _
      UBound(TL, 1)).Value = Application.Transpose(TL)

你知道我该如何解决这个问题吗?

【问题讨论】:

  • 除非您使用的是非常旧版本的 Excel,否则不应有 255 个字符的限制(它更像是我上次检查的 911)。我建议您添加另一个循环,将数组逐项转置为新数组。
  • 我同意@Rory。不久前,我编写了一个简短的辅助函数来重新调整和转置数组here
  • 我很久以前就遇到过这个问题。如果没有记错的话,VBA 永远不会更新以反映单元格不再限制为 255 个字符的变化,因此 VBA 仍然认为这是限制。我将不得不看看我是否能找到我当时正在编写的代码,看看我是如何处理它的
  • 我同意@psubsee2003 - 在某些情况下,VBA 会将您限制为 255 个字符。我有一个表格,一个单元格中最多可以容纳 300 个字符(输入表单限制),但 VBA 会尝试根据前 8 或 16 行数据来猜测如何处理该列。如果它 255 它认为它是一个备忘录。我不得不用绒毛填充物将前 16 行数据伪装成 300 个字符的垃圾才能使其正常工作。
  • 我正在使用 Excel 2010... 谢谢 Jeeped,我会阅读您的简短助手。 @Freeman:我试图用数据填充前 16 行(每个单元格超过 300 个字符)......但这没有用。

标签: vba excel


【解决方案1】:

改变你的单行语句

If K > 1 Then O1.Cells(PL, 16).Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)

到这个多行并将 T_TL 也声明为变体

If k > 1 Then
    T_TL = Application.Transpose(TL)
    O1.Cells(PL, 16).Resize(UBound(TL, 2), UBound(TL, 1)).Value = T_TL
End If

通过这个你会看到是转置部分还是分配部分不起作用!

【讨论】:

  • 您好,感谢您的帮助。我尝试了您的解决方案,但转置线不起作用... T_TL = Application.Transpose(TL)。我有同样的错误:错误 13:类型不匹配
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多