Excel选择一行

问题描述 投票:1回答:2

我正在尝试创建一个宏,它将选择第一个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
excel vba excel-vba
2个回答
2
投票

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

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

作为建议:

  • 不要使用rowcolumnCellsRange等名称作为变量,VBA中的Excel对象模块库也使用它们。在你的情况下,你有BasePoint.row。如果你没有变量row,那么VBEditor会自动编写BasePoint.Row
  • 尽量取决于背景 - Selection尽量避免使用How to avoid using Select in Excel VBA
  • 正如@ Mat's Mug在评论中提到的那样,当你使用它们时,展示CellsRanges的“父母”是一个好习惯。在你的情况下,这样的事情:

With Worksheets(1)
       .Range(.Cells(row, BP.Columns(1).Column), .Cells(row, BP.Columns(6).Column)).Merge
End With

然后它将始终引用第一个工作表(或您需要的任何一个)而不是ActiveSheet,如果未提及Parent,将引用它。 (我写过BP而不是BasePoint,以确保它在一行上。)


3
投票

这应该足够了:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.