我正在尝试选择一系列单元格,我需要使用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应该处理所有这些。
有什么想法吗?
答案 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
瞧!