我正在尝试创建一个宏,它将选择第一个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
答案 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
作为建议:
不要使用row
,column
,Cells
,Range
等名称作为变量,{{1}内的Excel对象模块库也使用它们。在您的情况下,您有VBA
。如果您没有变量BasePoint.row
,则VBEditor会自动写入row
。
尽量取决于具体情况,尽量避免使用BasePoint.Row
- How to avoid using Select in Excel VBA
正如评论中提到的@Mat's Mug,当您使用它们时,显示Selection
和Cells
的“父母”是一个好习惯。
因此,在您的情况下,这样的事情:
Ranges
然后,如果未提及With Worksheets(1)
.Range(.Cells(row, BP.Columns(1).Column), .Cells(row, BP.Columns(6).Column)).Merge
End With
,它将始终引用第一个工作表(或您需要的任何一个)而不是ActiveSheet
,这将被引用。 (我写了Parent
而不是BP
,以确保它在一行上。)