![](/img/trans.png)
[英]Private Sub Worksheet_SelectionChange(ByVal Target As Range) not working VBA
[英]Worksheet_SelectionChange(ByVal Target As Range), Two Cells in Target
我正在使用事件處理程序,並且如果選擇一個或兩個單元格,則會運行某些事件。 我遇到的問題是,當選擇兩個單元格時,我不知道如何訪問該第二個單元格的屬性(即,它的值是多少)。 任何想法,我如何可以訪問所選的第二個單元格的值(我希望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
如果您不知道用戶是要選擇列中的單元格還是行中的單元格,甚至是單元格塊,請使用循環和計數器:
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時進行處理 。 如果選擇了塊或行,則為右單元格;如果選擇了列的一部分,則為右下方單元格。
盡管這不是一個漂亮的代碼,但是即使用戶選擇了一組不相交的單元格,它也至少會起作用。
編輯#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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.