【问题标题】:Overcoming 255 character limit when copying and transposing复制和转置时克服 255 个字符的限制
【发布时间】:2018-09-01 00:22:15
【问题描述】:

基本上在单元格 B42 和 B43 中,我有超过 255 个字符,我的代码中断并给出 RUN 类型错误不匹配 13。

当我运行以下行时:

    CopyTranspose wb.Sheets("Apple").Range("B17:B46"), shtDest.Cells(pasteRow, "R")

我在此处收到不匹配错误:

Sub CopyTranspose(rngCopy As Range, rngDest As Range)
rngDest.Resize(rngCopy.Columns.Count, rngCopy.Rows.Count).Value = _
Application.Transpose(rngCopy.Value)
End Sub

【问题讨论】:

    标签: excel vba range transpose copying


    【解决方案1】:

    如果您使用 Google 搜索,您会发现 Application.Transpose 有几个奇怪的限制。但是您可以编写自己的 TransposeArray 函数,看看是否效果更好。

    Public Function TransposeArray(myarray As Variant) As Variant
        Dim x As Long
        Dim y As Long
        Dim Xlower As Long, Xupper As Long
        Dim Ylower As Long, Yupper As Long
        Dim tempArray As Variant
    
        Xlower = LBound(myarray, 2)
        Ylower = LBound(myarray, 1)
        Xupper = UBound(myarray, 2)
        Yupper = UBound(myarray, 1)
        ReDim tempArray(Xlower To Xupper, Ylower To Yupper)
        For x = Xlower To Xupper
            For y = Ylower To Yupper
                tempArray(x, y) = myarray(y, x)
            Next y
        Next x
        TransposeArray = tempArray
    End Function
    

    就像Application.Tanspose一样使用它

    Sub CopyTranspose(rngCopy As Range, rngDest As Range)
        rngDest.Resize(rngCopy.Columns.Count, rngCopy.Rows.Count).Value = _
            TransposeArray(rngCopy.Value)
    End Sub
    

    【讨论】:

      【解决方案2】:

      如果您只是想复制和转置一个范围,那么这样做:

      wb.Sheets("Apple").Range("B17:B46").Copy
      shtDest.Cells(pasteRow, "R").PasteSpecial Transpose:=True
      

      或者如果只想复制没有格式的值,那么

      shtDest.Cells(pasteRow, "R").PasteSpecial xlPasteValues, Transpose:=True
      

      编辑: 问题可能在于Application.Transpose(rngCopy.Value) 作为转置输入数组或单元格范围,而不是值。

      【讨论】:

      • 我怀疑这只是Application.Transpose 所做的,因此可能有同样的问题?但至少值得一试。
      • 我刚刚在一个单元格中测试了 500 多个字符,它可以工作。无需转运
      • 我用 500 多个字符测试了Application.Transpose,它也有效。所以这是没有意义的,因为即使 OP 在他的问题中说明了这一点,这也不是限制 OP 转置的原因。 Application.Transpose 中根本没有 255 个字符的限制(一定是别的)。
      • 只是为了您的兴趣:rngCopy.Value 实际上一个数组:Debug.Print VarType(rngCopy.Value) 输出8204,这意味着vbArray+vbVariant 根据this list。所以它是一个变体类型的数组。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 2020-04-27
      • 2011-02-27
      相关资源
      最近更新 更多