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

我试图search这个问题,但没有发现类似的问题。

我仍然是VBA的新手,我正在尝试创build一个macros,它根据用户的input来select单元格的范围,然后在这些选定的单元格中创build一个概要的网格。

我有两个ActiveXbutton在我的Excel工作簿,让用户input多大的网格是他们想要使用(宽度和高度)。 我正在努力将上面提到的宽度和高度包含到我的代码中。 这里是button的代码(没有什么不清楚):

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 

和宽度button:

 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”分别具有打印宽度和高度的值。 当我点击CreateGridbutton时没有任何反应。 任何想法如何使这个代码工作? 非常感谢所有的答案。

-Teemu

编辑:

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

如果这不符合你的期望,请让我知道,我会尽力帮助改正。

技巧是使用loggingmacrosbutton。 这个function会logging你正在logging的同时正在logging的所有指令。例如:1.-启动loggingmacros并为你的macrosinput一个名字。 2.-select任何单元格并键入一个值3.-select一个您想要的单元格范围4.-按停止macroslogging。 5.-按下Alt + F11,你会看到,在macroslogging被打开的时候,excel生成了你在excel中所做的一些代码,即使你可以知道如何在单元格中键入一个值或者select一个范围。

你正在寻找的命令是Range().Select但你需要创build进入括号的string。 所以如果我理解正确的话,你已经在variables中存储了你想从G2偏移的行数和列数。

为了获得列字母,您可以使用microsoft提供的function

 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是列的数量。

编辑:正如@凯尔指出的那样,一个更短的方法是使用:

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