【问题标题】:Select a Range of Values in Another Column Based on Initial Selected Range根据初始选定范围在另一列中选择一个值范围
【发布时间】:2019-07-18 22:42:24
【问题描述】:

我正在尝试根据在初始列中选择的单元格范围从不同列中选择整个单元格范围。
例如,如果选择了 A1:A5,我希望代码选择 E1:E5。初始范围可能因用户输入而异。

只是代码含义的一些背景知识:我正在比较学区的 RX 计划,并且我能够选择合适的学区(再次基于用户输入)。我只需要在 E 列中选择相应的 RX 计划。

So far, I have been able to make something that when, for example, A6:A13 is selected, it automatically goes over and selects E6.但是,我需要它来选择整个 E6:E13(或至少使这些单元格成为活动单元格)。

我知道我的问题在于使用 ActiveCell.Row,因为这显然只会选择一行。我只是不知道如何选择整个范围。

请注意,我的整个代码不包括在内,因为 RX 计划的情况是唯一与此问题相关的情况。

Dim DistrictName As String

Dim DistrictOneRng As Range

Dim rALL As Range

Dim xDistrict As String

Dim ComparisonOption As String

xTitleId = "FindDistrictTool"

xDistrict = Application.InputBox("Enter Your District Name", xTitleId, Type:=2)

ComparisonOption = Application.InputBox("What do you want to compare: RX Plans, Metallic Levels, Number of Plans, Average AV", xTitleId, Type:=2)

Select Case ComparisonOption

    Case "RX Plans"

        With Worksheets(1).Range("A1:A130")

            Set DistrictOneRng = .Find(xDistrict, LookIn:=xlValues)
             If Not DistrictOneRng Is Nothing Then
                Set rALL = DistrictOneRng
                 DistrictName = DistrictOneRng.Address

                   Do
                     Set rALL = Union(rALL, DistrictOneRng)
                      Worksheets(1).Range(DistrictOneRng.Address).Activate
                      Set DistrictOneRng = .FindNext(DistrictOneRng)

                    Loop While Not DistrictOneRng Is Nothing And DistrictOneRng.Address <> DistrictName
            End If
            .Activate
            If Not rALL Is Nothing Then rALL.Select
       End With


       Range("E" & (ActiveCell.Row)).Select

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您需要在您的 WORKSHEET 代码部分(而不是您的 MODULE)中设置一些内容并将其与Worksheet_SelectionChange 事件联系起来。

    Here's an example code that when A1:A15 is selected, it will select E1 to whatever row is listed as a number in cell B1.因此,如果B1 的值为5,那么宏将选择E1:E5

    我在示例代码的 A 列中添加了其他组合,例如 ANY 单元格。希望您可以推断出这一点,以使用各种条件的 if 语句来做您想做的事情。

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Application.EnableEvents = False 'best to turn this off to avoid a loop
        '!! Note that if code errors before this gets back to being set to True
        'you will need to run code to set this to True somewhere for this event
        'to be be set to be triggered again.
    
        If Target.Address = Range("A1:A15").Address And IsNumeric(Me.Range("B1")) Then
            'Selects E1 to whatever row is in cell B1
    
            Range(Me.Range("E1"), Me.Range("E1").Offset(Me.Range("B1").Value, 0)).Select
    
    
        ElseIf Not Intersect(Target, Range("A:A")) Is Nothing Then
            'This would automatically shift the selection from WHATEVER
            'is in column a to column E
    
            Intersect(Target.EntireRow, Me.Range("E:E")).Select
    
        ElseIf Not Intersect(Target, Range("C:C")) Is Nothing Then
            'This will take the top cell in a selection in column E and then select
            'corresponding row in column E along with the additional rows specificed in cell B1
    
            Intersect(Target.Cells(1, 1).EntireRow, Me.Range("E:E")).Resize(Me.Range("B1").Value, 1).Select
    
        End If
    
        Application.EnableEvents = True 'Turns events back on when done
    End Sub
    

    【讨论】:

    • 我已将此答案标记为已接受,因为当我第一次将其放入时,它确实按预期工作。但是,经过几次尝试后,我开始收到运行时错误“424”所需的对象,并且它不再执行。我尝试了整整一个小时,让它再次工作了几次,然后它就会停止工作。由于它工作了几次,我假设这是我的错误,而不是你给我的代码。知道为什么会这样吗?当我使用Worksheet_SelectionChange Target 调用函数时,错误总是在代码行上
    • 更新:我输入了Option Explicit,它说Target 没有定义,所以我使用了Dim Target As Range。现在错误出现在If Target.Address = Range("A1:A15").Address And IsNumeric(Me.Range("B1")) Then 行,错误为 Run-Time error '91': Object variable or With variable not set。
    • 另外,请确保您在某个地方运行,即使是在即时窗口中...Application.EnableEvents = True 以确保您的事件重新开启。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多