我有下面提到的INPUT,我想在输出头下面得到输出。
在我的列A中的INPUT数据中包含具有不同缩进级别的数据。
基本上代码应该在这个范围内运行并检查最高级别的缩进,并且对于每个最高级别的缩进,它应该放在"映射1和#34;标题及其在映射2,3和4中的后续较低级别。
我开发了一个代码,它在下面提到的行上给出了错误: 运行时错误1004:
If currVal > arr(i, 3) Then
ActiveCell.Offset(k, arr(i, 3) - 1).Value = arr(i, 1)
End If
整体守则: -
Sub transposerowcolmulti()
Dim arr(1 To 8, 0 To 3) As Variant
Dim i As Long, j As Long
ActiveWorkbook.Sheets("Input").Activate
For i = LBound(arr, 1) To UBound(arr, 1)
arr(i, 1) = range("A6").Offset(i, 0).Value
arr(i, 2) = IsBold(range("A6").Offset(i, 0))
arr(i, 3) = Level(range("A6").Offset(i, 0))
Next i
Dim k As Long, l As Long
Dim prevVal As Long, currVal As Long
k = 0
l = 0
ActiveWorkbook.Worksheets.Add
For i = LBound(arr, 1) To UBound(arr, 1)
If l = 0 Then
currVal = arr(i, 3)
l = l + 1
End If
If currVal = arr(i, 3) Then
ActiveCell.Offset(k, currVal - 1).Value = arr(i, 1)
End If
If currVal > arr(i, 3) Then
ActiveCell.Offset(k, arr(i, 3) - 1).Value = arr(i, 1)
End If
If currVal < arr(i, 3) Then
ActiveCell.Offset(k, arr(i, 3) - 1).Value = arr(i, 1)
End If
currVal = arr(i, 3)
k = i
Next i
End Sub
Function Level(Optional cCell As range)
' LEVEL returns the outline level of the current row. It will not automatically update and therefore
' a recalculation Ctrl-Alt-F9 is required.
If cCell Is Nothing Then
Set cCell = Application.Caller
End If
Level = cCell.Rows.IndentLevel
End Function
Function IsBold(ByVal Cell As range) As Boolean
IsBold = Cell.Font.Bold
End Function
答案 0 :(得分:0)
虽然我不知道代码应该如何运作,但我很确定您的运行时错误来自您访问ActiveCell
的事实。您添加一个新的工作表(获取活动表),ActiveCell
设置为此工作表的A1
。在第二个循环的第一次迭代中。 currVal
为0,术语ActiveCell.Offset(k, currVal - 1)
为ActiveCell.Offset(0, -1)
,这会导致运行时错误,因为您在第1列中 - 无偏移-1可能。
强烈建议:不要使用ActiveSheet
,ActiveCell
或Select
因为它们会导致严重的性能问题,并且更难以调试。