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

Excel VBA下拉框单元格变更触发宏报错问题求助

问题分析与修复方案

首先,你遇到的**运行时错误13(类型不匹配)**主要有几个核心原因,咱们一步步拆解:

1. 区域判断逻辑错误

你原代码里用 Target.Address = Range("AV9:AV" & lastrow) 来判断触发事件的单元格是否在目标区域,这根本行不通:

  • Target.Address 返回的是触发事件的单个(或选中的)单元格地址,比如$AV$10;而Range("AV9:AV" & lastrow).Address 返回的是整个区域的地址,比如$AV$9:$AV$20,两者永远不可能相等。
  • 正确做法是用 Intersect 函数判断Target是否和目标区域有交集,不管Target是单个还是多个单元格,都能准确识别。

2. 空值判断逻辑错误

Range("AV9:AV" & lastrow) <> "" 这行是在判断整个区域是否为空,但VBA里不能直接把单元格区域和空字符串做比较,这直接导致了类型不匹配的错误。你需要判断的是当前触发事件的Target单元格是否不为空,而非整个区域。

3. 固定行复制的问题

原代码复制的是固定的Range("A9:B9"),但你需要的是触发单元格对应行的A、B列数据,所以得动态获取Target所在行的A、B单元格。

另外要注意:在Worksheet_Change事件里执行复制粘贴时,会再次触发Change事件导致循环,所以要先关闭事件触发,操作完成后再恢复。


修正后的完整代码

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lastrow As Long
    Dim targetRange As Range
    Dim pasteRow As Long
    
    ' 关闭事件触发,防止循环执行
    Application.EnableEvents = False
    
    On Error GoTo Cleanup ' 出错时确保恢复事件触发
    
    ' 定义目标下拉列表区域
    lastrow = Tabelle3.Range("A" & Rows.Count).End(xlUp).Offset(8).Row
    Set targetRange = Tabelle3.Range("AV9:AV" & lastrow)
    
    ' 判断Target是否在目标区域内,且当前单元格不为空
    If Not Intersect(Target, targetRange) Is Nothing And Target.Value <> "" Then
        ' 获取Tabelle10的下一个空白行
        pasteRow = Tabelle10.Range("A" & Rows.Count).End(xlUp).Row + 1
        ' 复制对应行的A、B列值到Tabelle10
        Target.EntireRow.Range("A:B").Copy
        Tabelle10.Range("A" & pasteRow).PasteSpecial xlPasteValues
        Application.CutCopyMode = False
    End If

Cleanup:
    ' 恢复事件触发
    Application.EnableEvents = True
    If Err.Number <> 0 Then
        MsgBox "运行错误: " & Err.Description, vbExclamation
    End If
End Sub

关于测试代码的小问题

你之前的测试代码里 If Target.Address = "$AV$9" And "$AV$9" <> "" Then 有个逻辑漏洞:"$AV$9" <> "" 是在判断字符串$AV$9是否为空,这永远为真,正确写法应该是 Range("$AV$9").Value <> "",不过因为测试代码针对单个单元格,所以没报错,但逻辑上不够严谨。

内容的提问来源于stack exchange,提问作者HPM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:58:15