Excel VBA 如何 select 可变单元格区域
Excel VBA How to select variable range of cells
我试图搜索这个问题,但没有发现类似的问题。
我还是 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 按钮时没有任何反应。有什么想法可以让这段代码工作吗?非常感谢所有的回答。
-提姆
您要查找的命令是 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
诀窍是使用录制宏按钮。
此功能将记录您在录音时对 excel 本书所做的所有说明
例子:
1.- 启动录制宏并为您的宏键入一个名称。
2.- Select 任何单元格并键入一个值
3.- select 您想要的一系列单元格
4.- 按停止宏录制。
5.- 按 Alt +F11 你会看到 excel 生成了你所做的代码
在 excel 启用宏录制后,即使您知道如何在单元格或 select 范围内键入值。
编辑:
Private Sub CreateGrid_Click()
Range("G2:" & Range("G2").Offset(Range("E5").Value,Range("E2").Value).Addresslocal).Select
End Sub
如果这不符合您的预期,请告诉我,我会尽力帮助更正它。
我试图搜索这个问题,但没有发现类似的问题。
我还是 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 按钮时没有任何反应。有什么想法可以让这段代码工作吗?非常感谢所有的回答。
-提姆
您要查找的命令是 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
诀窍是使用录制宏按钮。 此功能将记录您在录音时对 excel 本书所做的所有说明 例子: 1.- 启动录制宏并为您的宏键入一个名称。 2.- Select 任何单元格并键入一个值 3.- select 您想要的一系列单元格 4.- 按停止宏录制。 5.- 按 Alt +F11 你会看到 excel 生成了你所做的代码 在 excel 启用宏录制后,即使您知道如何在单元格或 select 范围内键入值。
编辑:
Private Sub CreateGrid_Click()
Range("G2:" & Range("G2").Offset(Range("E5").Value,Range("E2").Value).Addresslocal).Select
End Sub
如果这不符合您的预期,请告诉我,我会尽力帮助更正它。