Excel选择一行

时间:2017-12-20 17:37:27

标签: excel vba excel-vba

我正在尝试创建一个宏,它将选择第一个Cell并将其与第6个Cell合并。我收到错误400.

Sub SignPage()
Dim ws As Worksheet, BasePoint As Range, row As Long, singlecell As Long, 
singleCol As Long, sLong As Long, sShort As String
Set BasePoint = Selection
row = BasePoint.row
Range(Cells(row, BasePoint.Columns(1)), Cells(row, BasePoint.Columns(6))).Merge

End Sub

2 个答案:

答案 0 :(得分:3)

这应该足够了:

Selection(1).Resize(, 6).Merge

说明:Selection可以跨越多个单元格,因此Selection(1)占据左上角的单元格 - 因此,我们总是引用一个单元格。

答案 1 :(得分:2)

重点是你应该引用Basepoint的第一列并获取它的列。如果你修改你的行,就可以实现这一点:

Range(Cells(row,BasePoint.Columns(1).Column),Cells(row,BasePoint.Columns(6).Column)).Merge

作为建议:

  • 不要使用rowcolumnCellsRange等名称作为变量,{{1}内的Excel对象模块库也使用它们。在您的情况下,您有VBA。如果您没有变量BasePoint.row,则VBEditor会自动写入row

  • 尽量取决于具体情况,尽量避免使用BasePoint.Row - How to avoid using Select in Excel VBA

  • 正如评论中提到的@Mat's Mug,当您使用它们时,显示SelectionCells的“父母”是一个好习惯。 因此,在您的情况下,这样的事情:

Ranges

然后,如果未提及With Worksheets(1) .Range(.Cells(row, BP.Columns(1).Column), .Cells(row, BP.Columns(6).Column)).Merge End With ,它将始终引用第一个工作表(或您需要的任何一个)而不是ActiveSheet,这将被引用。 (我写了Parent而不是BP,以确保它在一行上。)