列到行转置的运行时错误“1004”

时间:2018-02-13 22:19:22

标签: excel vba excel-vba

Newb,

我在第二个块的第一个'For'循环线上得到运行时错误'1004':

我编辑了这个问题,使其更加清晰。 因为整个代码的这一部分都在它的末尾,所以我在有问题的行之前移动了Dimensions和object Sets。 最让我感到困扰的是,我在下面的 Chunk 1 的代码中有更高的'For'循环。唯一的区别是,在 Chunk 2 中,'For'loop用于'í',而 Chunk 2 用于'k'... Go figure ... < / p>

第1块:

Dim ExposureDataInput As Worksheet
Dim ManualSimulation As Worksheet

Set EDI = Sheets("ExposureDataInput")
Set MS = Sheets("ManualSimulation")

Dim i As Integer
Dim n As Integer
Dim j As Integer

    **For i = 2 To EDI.Range("B" & Rows.Count).End(xlUp).Row**

        If EDI.Range("B" & i).Value > 0 Then

           n = MS.Range("A" & Rows.Count).End(xlUp).Row + 1
           MS.Range("A" & n).Value = EDI.Cells(i, 1).Value

           n = MS.Range("B" & Rows.Count).End(xlUp).Row + 1
           MS.Range("B" & n).Value = EDI.Cells(i, 2).Value

           n = MS.Range("C" & Rows.Count).End(xlUp).Row + 1
           MS.Range("C" & n).Value = EDI.Cells(i, 4).Value

           n = MS.Range("D" & Rows.Count).End(xlUp).Row + 1
           MS.Range("D" & n).Value = EDI.Cells(i, 6).Value

           n = MS.Range("E" & Rows.Count).End(xlUp).Row + 1
           MS.Range("E" & n).Value = EDI.Cells(i, 8).Value

           n = MS.Range("F" & Rows.Count).End(xlUp).Row + 1
           MS.Range("F" & n).Value = EDI.Cells(i, 10).Value

           n = MS.Range("G" & Rows.Count).End(xlUp).Row + 1
                        MS.Range("G" & n).Value = EDI.Cells(i, 12).Value

       End If

    Next i

块2:对我大喊错误424:对象必需或错误1004:未设置维度。为'í','n'和&amp;设置了完全相同的尺寸。 第1块中的'j'。

Dim HistoricalDataandExcessReturns As Worksheet

Set HDaER = ThisWorkbook.Worksheets("HistoricalDataandExcessReturns")

Dim k As Integer
Dim y As Integer

    **For k = 2 To EDI.Range("B" & Rows.Count).End(xlUp).Row**

        If EDI.Range("B" & k).Value > 0 Then

            y = HDaER.Range(Columns.Count & 1).End(xlToLeft).Column + 1
            HDaER.Range(y & 1).Value = EDI.Cells(1, k).Value

            y = HDaER.Range(Columns.Count & 2).End(xlToLeft).Column + 1
            HDaER.Range(y & 2).Value = EDI.Cells(2, k).Value 

       End If

    Next k

Chunk 3 w类似For循环:

   For j = 2 To MS.Range("$A" & Rows.Count).End(xlUp).Row

        With MS.Range("$J" & j).Borders
             .LineStyle = xlContinous
             .Color = vbWhite
             .Weight = xlThin
        End With

        With MS.Range("$K" & j).Borders
             .LineStyle = xlContinous
             .Color = vbWhite
             .Weight = xlThin
        End With

        With MS.Range("$L" & j).Borders
             .LineStyle = xlContinous
             .Color = vbWhite
             .Weight = xlThin
        End With

   Next j

我尝试了几种“。复制”的方法,但没有运气......虽然它与运气无关,但我认为。

一般来说,我更喜欢“MS”ws中的单元格与我想要转置的“HDaER”行中的单元格之间的直接链接。喜欢'='的方法。

@SJR,我希望会有更多的亮点。 我在 Chunk 1 中替换了'MS'表w'EDI'表单,使其与 Chunk 2 中的'i'Rows.Count几乎完全相同。

如果有人能给我一个很好的提示如何抽出'For'循环以'='的方式工作,我会很感激。

1 个答案:

答案 0 :(得分:2)

你不能像那样使用Range(它的列然后是行),而是使用Cells。加上n

xltoleft