You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA联动下拉列表问题:G列最后一行赋值后H列未生成下拉

问题修复方案

核心问题:变量名拼写错误

你处理G列(第7列)的代码块中,定义的变量是stateVal,但后续所有判断条件里误用了stateValue(多了一个u),导致VBA无法识别变量,所有设置H列下拉列表的逻辑完全没执行。

修改步骤

  1. 找到If Target.Column = 7 Then对应的代码块,将里面所有的stateValue替换成stateVal。
  2. (可选优化)删除重复的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 06:32:32