gpt4 book ai didi

vba - Worksheet_SelectionChange(ByVal Target As Range),目标中的两个单元格

转载 作者:行者123 更新时间:2023-12-03 02:25:36 30 4
gpt4 key购买 nike

我正在使用事件处理程序,如果选择一个或两个单元格,我会运行某些事件。我遇到的问题是,当选择两个单元格时,我不知道如何访问第二个单元格的属性(即它的值是什么)。知道如何访问所选的第二个单元格的值(我希望 Target 是一个数组对象,我可以通过数组索引进行选择......)

Public Sub Worksheet_SelectionChange(ByVal Target As Range)

On Error GoTo disError
If Target.Cells.Count > 2 Or Target.Address = Range("DataHist").Address Then Exit Sub

Dim curve As String
Dim Ticker As String
Dim TickerTwo As String
Dim lastValue As Double
TickerTwo = ""

If Target.Cells.Count = 1 Then
Ticker = Target.Value
lastValue = Round(Target.Offset(0, 1).Value, 3)
curve = CheckLabel(Target)
Else
' This is where the issue is --------------------------------
Ticker = Target.Cells(1, 1).Value
TickerTwo = Target.Next.Value
lastValue = Round(Target.Offset(0, 1).Value, 3)
curve = CheckLabel(Target)
' -----------------------------------------------------------
End If

Select Case curve
Case "na"
Exit Sub
Case "Test1"
Call FillChart("Test1", Ticker, lastValue, TickerTwo)
Case "Test2"
Call FillChart("Test2", Ticker, lastValue, TickerTwo)

End Select

disError:
End Sub

最佳答案

如果您不知道用户是否要选择列中的单元格或行中的单元格,甚至单元格 block ,请使用循环和计数器:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Range, i As Long
i = 1
If Target.Count > 1 Then
For Each r In Target
MsgBox r.Address(0, 0) & vbCrLf & i
i = i + 1
Next r
End If
End Sub

然后在i=2时进行处理。如果选择了 block 或行,则为右侧的单元格;如果选择了列的一部分,则为下方的单元格。

虽然这是漂亮的代码,但至少它可以工作,即使用户选择一组不相交的单元格。

编辑#1:

如果您愿意解析 Selection.Address,就可以避免丑陋的循环

编辑#2:

如果用户选择 2 个且仅选择 2 个单元格,此代码(没有任何循环) 将起作用:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim s As String
If Target.Count = 2 Then
s = Split(Replace(Target.Address(0, 0), ":", ","), ",")(1)
MsgBox "The second cell is: " & s
End If
End Sub

关于vba - Worksheet_SelectionChange(ByVal Target As Range),目标中的两个单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48308883/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com