我正在尝试创建一个宏,它将选择第一个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
关键是你应该引用Basepoint的第一列并获取它的列。这可以实现,如果你修改你的行像这样:
Range(Cells(row,BasePoint.Columns(1).Column),Cells(row,BasePoint.Columns(6).Column)).Merge
作为建议:
row
,column
,Cells
,Range
等名称作为变量,VBA
中的Excel对象模块库也使用它们。在你的情况下,你有BasePoint.row
。如果你没有变量row
,那么VBEditor会自动编写BasePoint.Row
。Selection
尽量避免使用How to avoid using Select in Excel VBACells
和Ranges
的“父母”是一个好习惯。在你的情况下,这样的事情:With Worksheets(1)
.Range(.Cells(row, BP.Columns(1).Column), .Cells(row, BP.Columns(6).Column)).Merge
End With
然后它将始终引用第一个工作表(或您需要的任何一个)而不是ActiveSheet
,如果未提及Parent
,将引用它。 (我写过BP
而不是BasePoint
,以确保它在一行上。)
这应该足够了:
Selection(1).Resize(, 6).Merge
说明:Selection
可以跨越几个单元格,因此Selection(1)
占据左上角的单元格 - 因此,我们总是指一个单元格。