复制和转置时克服 255 个字符的限制
Overcoming 255 character limit when copying and transposing
基本上在单元格 B42 和 B43 中我有超过 255 个字符,我的代码中断并给出 运行 类型错误不匹配 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
如果您 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
如果您只是想复制和转置一个范围,那么这样做:
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)
作为转置输入数组或单元格范围,而不是值。
基本上在单元格 B42 和 B43 中我有超过 255 个字符,我的代码中断并给出 运行 类型错误不匹配 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
如果您 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
如果您只是想复制和转置一个范围,那么这样做:
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)
作为转置输入数组或单元格范围,而不是值。