Excel VBA联动下拉列表问题:G列最后一行赋值后H列未生成下拉
问题修复方案
核心问题:变量名拼写错误
你处理G列(第7列)的代码块中,定义的变量是stateVal,但后续所有判断条件里误用了stateValue(多了一个u),导致VBA无法识别变量,所有设置H列下拉列表的逻辑完全没执行。
修改步骤
- 找到
If Target.Column = 7 Then对应的代码块,将里面所有的stateValue替换成stateVal。 - (可选优化)删除重复的
ElseIf stateVal = "Sabah"判断,避免冗余代码。
修复后的核心代码片段
If Target.Column = 7 Then '仅当操作G列时触发 Dim rowF As Long rowF = Target.row Dim stateVal As String Dim regionVal As String stateVal = Cells(rowF, 7).Value 'G列(州)的值 regionVal = Cells(rowF, 6).Value If regionVal = "" Or stateVal = " " Then Call List_Delete(Cells(rowF, 8)) '删除H列(城市)下拉列表 '-----------------以下为东马来西亚区域--------------------------------- ElseIf stateVal = "Federal Territory-Labuan" Then Call List_Labuan(Cells(rowF, 8)) ElseIf stateVal = "Sabah" Then Call List_Sabah(Cells(rowF, 8)) ElseIf stateVal = "Sarawak" Then Call List_Sarawak(Cells(rowF, 8)) '-----------------以下为西马来西亚区域--------------------------------- ElseIf stateVal = "Federal Territory-Kuala Lumpur" Then Call List_KualaLumpur(Cells(rowF, 8)) ElseIf stateVal = "Federal Territory-Putrajaya" Then Call List_Putrajaya(Cells(rowF, 8)) ElseIf stateVal = "Johor" Then Call List_Johor(Cells(rowF, 8)) ElseIf stateVal = "Kedah" Then Call List_Kedah(Cells(rowF, 8)) ElseIf stateVal = "Kelantan" Then Call List_Kelantan(Cells(rowF, 8)) ElseIf stateVal = "Malacca" Then Call List_Malacca(Cells(rowF, 8)) ElseIf stateVal = "Negeri Sembilan" Then Call List_NegeriSembilan(Cells(rowF, 8)) ElseIf stateVal = "Pahang" Then Call List_Pahang(Cells(rowF, 8)) ElseIf stateVal = "Penang" Then Call List_Penang(Cells(rowF, 8)) ElseIf stateVal = "Perak" Then Call List_Perak(Cells(rowF, 8)) ElseIf stateVal = "Perlis" Then Call List_Perlis(Cells(rowF, 8)) ElseIf stateVal = "Selangor" Then Call List_Selangor(Cells(rowF, 8)) ElseIf stateVal = "Terengganu" Then Call List_Terengganu(Cells(rowF, 8)) End If End If
额外提示
最后一段处理新增行的代码逻辑存在偏差:它判断的是A列(第1列)的值,但你的业务逻辑应该基于F列。如果需要让新增行自动生成对应下拉,可将这段代码调整为:
Dim lastrow As Long lastrow = Cells(Rows.Count, "F").End(xlUp).Row ' 检查F列当前最后一行是否有值,自动设置对应G列下拉 If Cells(lastrow, "F").Value <> "" Then If Cells(lastrow, "F").Value = "West Malaysia" Then Call List_West(Cells(lastrow, "G")) ElseIf Cells(lastrow, "F").Value = "East Malaysia" Then Call List_East(Cells(lastrow, "G")) End If End If
内容的提问来源于stack exchange,提问作者CM Choong
相关产品推荐
相关产品推荐

