Validation.Add方法奇怪的行为

时间:2018-04-16 10:58:56

标签: excel vba excel-vba

我需要什么:

每次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对另一个问题的解决方案,我尝试合并一些代码,但它不起作用(验证列表仍包含一个项目)。

0 个答案:

没有答案