分别选择多个连续范围
Selecting multiple contiguous ranges separately
我正在设计一个宏,让用户 select 他们想要检查错误的数据集的某些范围(在这种情况下,如果调查的受访者 select 编辑了相同的选项多个问题)。为了让用户更容易看到他们正在检查的范围(因此 VBA 可以知道要使用哪些范围),我对它们进行了颜色编码:
Set flRange = Application.InputBox("Select the ranges you want to check for flatlining. (To select non-contiguous ranges, hold down CTRL when moving between ranges)", , , , , , , 8)
flRange.Select
flRange.Cells.Interior.Color = RGB(255, 222, 117)
然后我使用这种颜色来确定是否应该分析该范围:
If Cells(1, x).Interior.Color = RGB(255, 222, 117) Then
但是,如果用户 select 多个彼此相邻的范围(应单独分析),VBA 会将它们视为同一范围的一部分(因为它们具有同色)。
这是我想出的最好的方法,允许用户输入多个不连续的范围以使用相同的方法进行分析,但我不知道如何解决这个问题。如果有人建议如何更好地编写此宏代码,我将不胜感激。
编辑:Tim 和 Joshua 解决了这个问题。感谢您的帮助!
您可以分别明确地循环遍历每个范围,而不是依靠颜色来区分它们。
例如:
Sub GetRanges()
Dim flRange As Range
'Dim v_Ranges As Variant
Dim i As Integer
'Tell code to continue if there is an error
On Error Resume Next
Set flRange = Application.InputBox("Select the ranges you want to check for flatlining. (To select non-contiguous ranges, hold down CTRL when moving between ranges)", , , , , , , 8)
'Resume normal error handling
On Error GoTo 0
'Check to ensure the range is set
If flRange Is Nothing Then Exit Sub
'Loop through the separate ranges
For Each rngArea In flRange.Areas
Debug.Print rngArea.Address
Next rngArea
End Sub
如果我 运行 宏和 select 单元格 A1:A8 和单元格 C4:C13,输出将是:
$A:$A
$C:$C
由于不太了解您对每个范围的具体操作,我无法深入研究,所以我暂时将其保持在这个一般水平。
我还冒昧的给你处理了取消按钮。以前,如果用户在 InputBox 出现时 selected 'Cancel',则会出现 VBA 错误。这通过检查以确保在继续之前设置了范围来解决错误,如果未设置范围,则代码将退出子例程。
我正在设计一个宏,让用户 select 他们想要检查错误的数据集的某些范围(在这种情况下,如果调查的受访者 select 编辑了相同的选项多个问题)。为了让用户更容易看到他们正在检查的范围(因此 VBA 可以知道要使用哪些范围),我对它们进行了颜色编码:
Set flRange = Application.InputBox("Select the ranges you want to check for flatlining. (To select non-contiguous ranges, hold down CTRL when moving between ranges)", , , , , , , 8)
flRange.Select
flRange.Cells.Interior.Color = RGB(255, 222, 117)
然后我使用这种颜色来确定是否应该分析该范围:
If Cells(1, x).Interior.Color = RGB(255, 222, 117) Then
但是,如果用户 select 多个彼此相邻的范围(应单独分析),VBA 会将它们视为同一范围的一部分(因为它们具有同色)。
这是我想出的最好的方法,允许用户输入多个不连续的范围以使用相同的方法进行分析,但我不知道如何解决这个问题。如果有人建议如何更好地编写此宏代码,我将不胜感激。
编辑:Tim 和 Joshua 解决了这个问题。感谢您的帮助!
您可以分别明确地循环遍历每个范围,而不是依靠颜色来区分它们。
例如:
Sub GetRanges()
Dim flRange As Range
'Dim v_Ranges As Variant
Dim i As Integer
'Tell code to continue if there is an error
On Error Resume Next
Set flRange = Application.InputBox("Select the ranges you want to check for flatlining. (To select non-contiguous ranges, hold down CTRL when moving between ranges)", , , , , , , 8)
'Resume normal error handling
On Error GoTo 0
'Check to ensure the range is set
If flRange Is Nothing Then Exit Sub
'Loop through the separate ranges
For Each rngArea In flRange.Areas
Debug.Print rngArea.Address
Next rngArea
End Sub
如果我 运行 宏和 select 单元格 A1:A8 和单元格 C4:C13,输出将是:
$A:$A
$C:$C
由于不太了解您对每个范围的具体操作,我无法深入研究,所以我暂时将其保持在这个一般水平。
我还冒昧的给你处理了取消按钮。以前,如果用户在 InputBox 出现时 selected 'Cancel',则会出现 VBA 错误。这通过检查以确保在继续之前设置了范围来解决错误,如果未设置范围,则代码将退出子例程。