每次Column C
中的值发生更改时,相邻Column B
单元格中每个Worksheet_Change
单元格的验证列表。
我为主要 Private Sub Worksheet_Change(ByVal Target As Range)
Dim iCell As Range
Dim valTxt As String
If Not Intersect(Target, _
Target.Parent.Columns("B"), _
Target.Parent.Rows("10:65536")) _
Is Nothing Then
' Loop through each cell in Intersection
For Each iCell In Intersect(Target, Target.Parent.Columns("B")).Cells
' For non-blank values
If iCell.Value <> "" Then
' ...
' Forming valTxt as "Header1,Header2,Header3"
' ...
' Testing
valTxt = "Header1,Header2,Header3"
' Validation list
With iCell.Offset(0, 1).Validation
' Delete previous
.Delete
' Create new based on valTxt
.Add Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Formula1:=valTxt
End With
End If
Next
End If
End Sub
Sub Test()
ThisWorkbook.Worksheets("Main").Range("B10").Value = "ProductName1"
End Sub
写了一段代码 有效,但没有预期。
Column B
每当我在Column B
中手动输入新的 ProductName 时,我都会得到正确的验证列表。如果我将其他来源的多个产品名称复制/粘贴到Column B
每当Header1,Header2,Header3
值从另一个过程的范围更改时,验证列表由一个逗号分隔的字符串组成,而不是三个Header1 Header2 Header3
不同的项目Column B
。
如果我更改任何Worksheet_Change
值(即使 F2 + 输入)相邻单元格中的验证列表会立即更正。
如果我在With iCell.Offset(0, 1).Validation
iCell.Offset(0, 1).Value = Left(valTxt, InStr(1, valTxt, ";") - 1)
If Not .Value Then _
.Modify Formula1:=Replace(valTxt, ";", ",")
iCell.Offset(0, 1).Value = ""
End With
程序中创建断点并强制它从那里继续,那么验证列表也会正确形成。
def recv():
global dictt
radio.openWritingPipe(pipes[0])
radio.openReadingPipe(1, pipes[1])
radio.startListening()
radio.stopListening()
radio.printDetails()
radio.startListening()
t_end = time.time() + 20
while time.time() < t_end:
pipe = [0]
while not radio.available(pipe):
time.sleep(1000/1000000.0)
recv_buffer = []
radio.read(recv_buffer)
if recv_buffer[0] == 144:
list_temp.append(recv_buffer)
print(list_temp)
return
基于@LucianoFerreira对另一个问题的解决方案,我尝试合并一些代码,但它不起作用(验证列表仍包含一个项目)。