尝试使用.Range(.Cells(#,#))进行选择将无法在VBA中使用

时间:2015-06-23 23:28:23

标签: vba range selection cells

我正在尝试选择一系列单元格,我需要使用LastRow作为定义选择的最后一行的变量。这是我的代码(无论如何,它是必要的部分,它是一个大循环的一部分......):

    Dim LastRow As Long
    LastRow = FlowWkbs(f).Sheets(w).Cells(7,sht.Columns.Count).End(xlToLeft).Column

    With FlowWkbs(f).Sheets(w)
        .Range("G1").FormulaR1C1 = "Normal_0to1"
        .Range("G2").FormulaR1C1 = "0"
        .Cells(LastRow, 7).FormulaR1C1 = "1"
        .Range(.Cells(2, 7), .Cells(LastRow, 7)).Select
        .Cells(LastRow, 7).Activate
    End With

我收到“运行时错误'1004':应用程序定义或对象定义的错误”作为错误就行:

        .Range(.Cells(2, 7), .Cells(LastRow, 7)).Select

这很有趣,因为将.Cells(LastRow,7)分配给值1时效果很好。但它无法处理G2:G65335(恰好是我的最后一行)的选择。我想要它的形式。我需要为每次迭代更改LastRow变量FlowWkbs(f)Sheets(w)所以我需要使用Range(Cells(#%@%))方法,而不是Range("G2:G324")

我在这里看了很多其他问题/主题,他们都建议添加Workbooks.Worksheets。 Range和Cells的前缀,但With应该处理所有这些。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您正在找到最后一列并将值放在LastRow中,然后将其用作.Cells的行参数。如果您需要最后一行,请执行以下操作:

With FlowWkbs(f).Sheets(w)
    LastRow = .Cells(.Rows.Count, 7).End(xlUp).Row
    .Range("G1").FormulaR1C1 = "Normal_0to1"
    .Range("G2").FormulaR1C1 = "0"
    .Cells(LastRow, 7).FormulaR1C1 = "1"
    .Range(.Cells(2, 7), .Cells(LastRow, 7)).Select
    .Cells(LastRow, 7).Activate
End With

如果您需要使用一系列,请将调用中的参数顺序切换为.Cells(并重命名误导性变量)。

答案 1 :(得分:0)

我复制并粘贴了LastRow的错误变量定义,我的代码中的实际LastRow确实找到了最后一行而不是列。所以问题不是我得到了最后一栏。此外,这真的不会回答我的问题,因为变量LastRow仍然会有一个数字值,同样的错误会显示出来..

问题是我尝试运行Range.select的工作表没有先被选中。这是更正的代码(没有行/列拼写错误):

Dim LastRow As Long
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row

With FlowWkbs(f).Sheets(w)
    .Range("G1").FormulaR1C1 = "Normal_0to1"
    .Range("G2").FormulaR1C1 = "0"
    .Cells(LastRow, 7).FormulaR1C1 = "1"
    .Select
    .Range(.Cells(2, 7), .Cells(LastRow, 7)).Select
    .Cells(LastRow, 7).Activate
End With

瞧!