Word/VBA下拉菜单更新单元格内容时遇错误13类型不匹配
问题:Word VBA下拉控件触发更新时出现错误13(类型不匹配)
问题背景
要制作含表格的Word文档,实现选中单元格内下拉菜单选项时,另一单元格自动更新内容。已完成配置:
- 设置标题为“KörperTypen”的下拉内容控件(名称与值一致)
- 目标单元格添加标题为“Klassifizierungen”的纯文本内容控件
编写的VBA代码如下:
Sub UpdateContent() Dim dropdown As ContentControl Dim cell As ContentControl Set dropdown = ActiveDocument.SelectContentControlsByTitle("KörperTypen").Item(1) Set cell = ActiveDocument.SelectContentControlsByTitle("Klassifizierungen").Item(1) Select Case dropdown.DropdownListEntries(dropdown.Range.Text).Value Case "T1001" cell.Range.Text = "14C33242" Case "T2001" cell.Range.Text = "14C33342" Case "T3001" cell.Range.Text = "14C43342" Case "T4001" cell.Range.Text = "14C33342" Case "T5001" cell.Range.Text = "12C33342" Case "T6001" cell.Range.Text = "14C33342" Case "T7001" cell.Range.Text = "14C33342" End Select End Sub
运行时出现错误13(类型不匹配),已确认控件标题无误,尝试将值改为数字仍报错。单独查看dropdown.DropdownListEntries(dropdown.Range.Text).Value可得到正确结果(如"T1001"),但代码无法正常执行。
错误原因
Select Case语句中的表达式写法存在问题:DropdownListEntries(item)的索引应为序号或列表项名称,虽然单独调用dropdown.DropdownListEntries(dropdown.Range.Text).Value能返回正确值,但在Select Case的上下文里,该表达式的求值逻辑会触发类型不匹配——因为DropdownListEntries(item)返回的是ContentControlListEntry对象,后续的.Value虽然能取到文本,但整个表达式的类型判断逻辑在Select Case中无法正确匹配。
修正方案
直接获取下拉控件的选中文本或选中值作为Select Case的判断条件,无需通过DropdownListEntries间接取值。
修正后的代码(方式1:使用选中文本)
Sub UpdateContent() Dim dropdown As ContentControl Dim cell As ContentControl Set dropdown = ActiveDocument.SelectContentControlsByTitle("KörperTypen").Item(1) Set cell = ActiveDocument.SelectContentControlsByTitle("Klassifizierungen").Item(1) Select Case dropdown.Range.Text Case "T1001" cell.Range.Text = "14C33242" Case "T2001" cell.Range.Text = "14C33342" Case "T3001" cell.Range.Text = "14C43342" Case "T4001" cell.Range.Text = "14C33342" Case "T5001" cell.Range.Text = "12C33342" Case "T6001" cell.Range.Text = "14C33342" Case "T7001" cell.Range.Text = "14C33342" End Select End Sub
修正后的代码(方式2:使用选中值,更严谨)
因为下拉控件的名称与值一致,也可以直接用SelectedValue:
Sub UpdateContent() Dim dropdown As ContentControl Dim cell As ContentControl Set dropdown = ActiveDocument.SelectContentControlsByTitle("KörperTypen").Item(1) Set cell = ActiveDocument.SelectContentControlsByTitle("Klassifizierungen").Item(1) Select Case dropdown.SelectedValue Case "T1001" cell.Range.Text = "14C33242" Case "T2001" cell.Range.Text = "14C33342" Case "T3001" cell.Range.Text = "14C43342" Case "T4001" cell.Range.Text = "14C33342" Case "T5001" cell.Range.Text = "12C33342" Case "T6001" cell.Range.Text = "14C33342" Case "T7001" cell.Range.Text = "14C33342" End Select End Sub
内容的提问来源于stack exchange,提问作者Brun0
相关产品推荐
相关产品推荐

