VBA中用If语句跨工作表复制内容遇Run-time error '13'问题求助
解决VBA类型不匹配错误及多条件判断写法
原代码的问题
你写的代码里有两个关键错误导致类型不匹配:
- If条件写成了字符串
"Vendors Comparison Answers! C3=SHM",VBA无法把这个文本解析成逻辑判断,自然会报错。正确的做法是引用工作表的单元格值来做比较。 - 赋值语句里
'SHM Vendor Comparisons'! E1 = SHM,既没正确引用工作表和单元格,而且SHM如果是字符串的话没加引号,VBA会把它当成变量,导致类型不匹配。
修正后的基础代码
Sub MoveData5() ' 检查指定单元格的值是否等于"SHM" If Sheets("Vendors Comparison Answers").Range("C3").Value = "SHM" Then ' 将"SHM"写入目标单元格 Sheets("SHM Vendor Comparisons").Range("E1").Value = "SHM" End If End Sub
多条件判断的写法
如果需要多个判断分支,可以根据需求选择以下两种写法:
用ElseIf的连续分支(互斥条件,同一时间只触发一个分支)
Sub MoveData5() Dim sourceVal As String ' 先把源单元格值存到变量里,避免重复引用,提升效率 sourceVal = Sheets("Vendors Comparison Answers").Range("C3").Value If sourceVal = "SHM" Then Sheets("SHM Vendor Comparisons").Range("E1").Value = "SHM" ElseIf sourceVal = "ABC" Then Sheets("ABC Vendor Comparisons").Range("E1").Value = "ABC" ElseIf sourceVal = "XYZ" Then Sheets("XYZ Vendor Comparisons").Range("E1").Value = "XYZ" Else ' 当所有条件都不满足时执行的代码 MsgBox "未匹配到指定供应商类型" End If End Sub
用多个独立If(非互斥条件,多个条件可能同时触发)
Sub MoveData5() Dim sourceVal As String sourceVal = Sheets("Vendors Comparison Answers").Range("C3").Value If sourceVal = "SHM" Then Sheets("SHM Vendor Comparisons").Range("E1").Value = "SHM" End If If sourceVal = "ABC" Then Sheets("ABC Vendor Comparisons").Range("F1").Value = "ABC" End If ' 可以继续添加更多If判断 End Sub
内容的提问来源于stack exchange,提问作者Jacob Freeman
相关产品推荐
相关产品推荐

