我正在设计一个宏,让用户可以选择他们想要检查错误的数据集的某些范围(在这种情况下,如果调查的受访者为多个问题选择了相同的选项)。为了让用户更容易看到他们正在检查的范围(因此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
但是,如果用户选择彼此相邻的多个范围(应单独分析),VBA会将它们作为相同范围的一部分进行读取(因为它们具有相同的颜色)。
这是我想通过允许用户输入多个非连续范围以使用相同方法进行分析的最佳方法,但我不知道如何解决此问题。如果有人建议如何更好地编写这个宏,我会非常感激。
编辑:蒂姆和约书亚解决了这个问题。谢谢你的帮助!
答案 0 :(得分:0)
您可以单独和明确地循环浏览每个范围,而不是依靠颜色来区分它们。
例如:
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
如果我运行宏并选择单元格A1:A8和单元格C4:C13,输出将为:
$A$1:$A$8
$C$4:$C$13
如果不知道你对每个范围的具体内容有多了解,我就不能深入了解,所以我现在将它保持在这个一般水平。
我也冒昧地为你处理取消按钮。以前,如果用户选择了“取消”'当InputBox出现时,会出现VBA错误。这通过检查以确保在继续之前设置范围来解决错误,并且如果未设置范围,则代码将退出子例程。