简体   繁体   English

Excel VBA,range.value = range.value,意外结果

[英]Excel VBA, range.value = range.value, unexpected results

hopefully someone would be kind enough to point out why this isn't working. 希望有人会友好地指出为什么这行不通。 Basically via vba a new line is inserted @ the last row of a table (Row41), this pushes the last line down (creating a gap within the data) then the last line values are transferred up one row so the blank row is at the bottom. 基本上通过vba在表的最后一行(Row41)处插入新行,这会将最后一行下推(在数据内创建间隙),然后将最后一行的值上移一行,因此空白行位于底部。

Now the process works fine except for two of the cell values change randomly, below are the before and after 现在,该过程工作正常,除了其中两个单元格值随机更改之外,以下是前后

Before: 之前:

  • Cell(41,B) = 03/10/14 单元格(41,B)= 03/10/14
  • Cell(41,C) = 12345 单元格(41,C)= 12345
  • Cell(41,E) = 3.00 单元格(41,E)= 3.00
  • Cell(41,F) = DD 单元格(41,F)= DD

After: 后:

  • Cell(41,B) = 03/10/14 单元格(41,B)= 03/10/14
  • Cell(41,C) = 12345 单元格(41,C)= 12345
  • Cell(41,E) = 41915 单元格(41,E)= 41915
  • Cell(41,F) = 41915 单元格(41,F)= 41915

I've double checked the set ranges and they are as they should be, any ideas? 我仔细检查了设置范围,它们是应该的,有什么想法吗? Oh for the code the Specific_Tbl variable is 2 哦,对于代码,Specific_Tbl变量是2

    '[Capture table First/Last row number]
    int_FirstRow = .Cells(4, "AC").Offset(0, Specific_Tbl)
    int_LastRow = .Cells(6, "AC").Offset(0, Specific_Tbl)

    '[Insert Blank Row]
    .Range("A" & int_LastRow & ":Z" & int_LastRow).Insert shift:=xlDown

    '[Set Cell Ranges]
    Select Case Specific_Tbl
        Case 1
            '[Remerge Description]
            .Range(.Cells(int_LastRow, "E"), .Cells(int_LastRow, "H")).MergeCells = True
            Set rng_Tmp1 = .Range("B" & int_LastRow & ":C" & int_LastRow & ",E" & int_LastRow & ":J" & int_LastRow)
            Set rng_Tmp2 = .Range("B" & int_LastRow + 1 & ":C" & int_LastRow + 1 & ",E" & int_LastRow + 1 & ":J" & int_LastRow + 1)
        Case 2, 3
            Set rng_Tmp1 = .Range("B" & int_LastRow & ":C" & int_LastRow & ",E" & int_LastRow & ":F" & int_LastRow)
            Set rng_Tmp2 = .Range("B" & int_LastRow + 1 & ":C" & int_LastRow + 1 & ",E" & int_LastRow + 1 & ":F" & int_LastRow + 1)
    End Select

    '[Transfer values and clear]
    rng_Tmp1.Value = rng_Tmp2.Value
    rng_Tmp2.ClearContents

Unfortunately I never discovered why excel vba was unable to deal with the split range like I believed it would. 不幸的是,我从未发现excel vba为什么无法像我认为的那样处理分割范围。 A workaround was done by adding more range variables to deal with each side of the split range. 解决方案是通过添加更多范围变量来处理分割范围的每一面而完成的。

    '[Capture table First/Last row number]
    int_FirstRow = .Cells(4, "AC").Offset(0, Specific_Tbl)
    int_LastRow = .Cells(6, "AC").Offset(0, Specific_Tbl)

    '[Insert Blank Row]
    .Range("A" & int_LastRow & ":Z" & int_LastRow).Insert shift:=xlDown

    '[Set Cell Ranges]
    Select Case Specific_Tbl
        Case 1
            '[Remerge Description]
            .Range(.Cells(int_LastRow, "E"), .Cells(int_LastRow, "H")).MergeCells = True
            Set rng_Tmp1 = .Range("B" & int_LastRow & ":C" & int_LastRow)
            Set rng_Tmp2 = .Range("B" & int_LastRow + 1 & ":C" & int_LastRow + 1)
            Set rng_Tmp3 = .Range("E" & int_LastRow & ":J" & int_LastRow)
            Set rng_Tmp4 = .Range("E" & int_LastRow + 1 & ":J" & int_LastRow + 1)
        Case 2, 3
            Set rng_Tmp1 = .Range("B" & int_LastRow & ":C" & int_LastRow)
            Set rng_Tmp2 = .Range("B" & int_LastRow + 1 & ":C" & int_LastRow + 1)
            Set rng_Tmp3 = .Range("E" & int_LastRow & ":F" & int_LastRow)
            Set rng_Tmp4 = .Range("E" & int_LastRow + 1 & ":F" & int_LastRow + 1)
    End Select

    '[Transfer values and clear]
    rng_Tmp1.Value = rng_Tmp2.Value
    rng_Tmp3.Value = rng_Tmp4.Value
    rng_Tmp2.ClearContents
    rng_Tmp4.ClearContents

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM