Excel VBA如何选择可变范围的单元格

时间:2015-02-23 21:36:18

标签: excel excel-vba range cell vba

我试图搜索此问题但未发现类似问题。

我仍然是VBA中的新手,我正在尝试创建宏,根据用户的输入选择单元格范围,然后从这些选定的单元格中创建一个概述的网格。

我的Excel工作簿中有两个ActiveX按钮,用户可以输入他们想要使用的网格大小(宽度和高度)。我正在努力将上面提到的宽度和高度包含在我的代码中。这是按钮的代码(没有什么不清楚):

Private Sub Height_Click()
Dim Height As Integer
Height = InputBox("Syötä ruudukon korkeus", "Ruudukon korkeus", "Syötä tähän")
Range("E5") = Height
End Sub

宽度按钮:

Private Sub Width_Click()
Dim Width As Integer
Width = InputBox("Syötä ruudukon leveys", "Ruudukon leveys", "Syötä tähän")
Range("E2") = Width
End Sub

我希望我的网格从单元格“G2”开始,然后从那里向右和向下展开并更改所选单元格的大小。但是我写的代码根本不起作用(正如我所想)。这是代码:

Private Sub CreateGrid_Click()
Columns("G:G+E2").Select
    Selection.ColumnWidth = 1
Rows("2:2+E5").Select
    Selection.RowHeight = 1
End Sub

单元格“E2”和“E5”分别具有打印的宽度和高度值。单击CreateGrid按钮时没有任何反应。有什么想法我可以使这个代码工作?非常感谢所有答案。

-Teemu

3 个答案:

答案 0 :(得分:2)

技巧是使用记录宏按钮。 此功能将记录您在录制时使用Excel工作的所有指令 例: 1.-启动记录宏并键入宏的名称。 2.-选择任何单元格并键入值 3.-选择您想要的一系列单元格 4.-按停止宏录制。 5.-按Alt + F11,您将看到excel生成您所做的代码 在打开宏录制时,在excel中,即使您可以知道如何在单元格内键入值或选择其范围。

答案 1 :(得分:1)

编辑:

Private Sub CreateGrid_Click()
Range("G2:" & Range("G2").Offset(Range("E5").Value,Range("E2").Value).Addresslocal).Select
End Sub

如果这不符合您的预期,请告诉我,我会尽力帮助纠正。

答案 2 :(得分:0)

您要查找的命令是Range().Select,但您需要创建进入括号的字符串。所以,如果我理解正确,你已经在变量中存储了想要从G2偏移的行数和列数吗?

为了获得列字母,您可以使用microsoft here

提供的功能
Function ConvertToLetter(iCol As Integer) As String
   Dim iAlpha As Integer
   Dim iRemainder As Integer
   iAlpha = Int(iCol / 27)
   iRemainder = iCol - (iAlpha * 26)
   If iAlpha > 0 Then
      ConvertToLetter = Chr(iAlpha + 64)
   End If
   If iRemainder > 0 Then
      ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
   End If
End Function

但是因为你是从G开始的,你必须像这样调用函数:

ConvertToLetter(7+numerColumns)

您的最终代码将如下所示

Range("G" & 2 + numberLines & ":" & ConvertToLetter(7+numberCols) & numberLines).Select

其中numberLines是要偏移的行数,numberCols是列数。

编辑: 正如@Kyle所指出的那样,更短的方法是使用:

Range("G2").Offset(numberLines,numberCols).Select