#名称?将变量分配给“形状数据的标签”字段时出错

时间:2019-04-18 11:50:55

标签: vba visio-vba

在Visio Professional 2016中,我试图将一个字符串变量(这是ComboBox中的一个字段)分配给Shape Data中新创建的行的标签。

该代码首先检查该字段是否已经存在,如果是这种情况,则显示一个消息框。如果没有,代码将在Shape Data中创建一个新行。可以在此行中看到添加名称的效果。

vsoShape.Section(visSectionProp).Row(intNewPropRow).NameU = dataType

但是,当我尝试添加标签时,我得到了一个#NAME吗?错误。

vsoShape.CellsSRC(visSectionProp, intNewPropRow, visCustPropsLabel).FormulaU = dataType

输入变量dataType只是一个常规字符串。我在下面包括了全部功能。我在做什么错了?

Sub AddDataToSelectedShape(dataType As String)

Dim vsoShape As Visio.Shape

Set vsoShape = Application.ActiveWindow.Selection.PrimaryItem
    If (vsoShape.CellExistsU("Prop.dataType", fExistsLocally) = True) Then
        MsgBox ("The field is added already.")
        Exit Sub
    End If

    If (vsoShape.CellExistsU("Prop.dataType", fExistsLocally) = False) Then
        intNewPropRow = vsoShape.AddRow(visSectionProp, visRowLast, visTagDefault)
        vsoShape.Section(visSectionProp).Row(intNewPropRow).NameU = dataType
        vsoShape.CellsSRC(visSectionProp, intNewPropRow, visCustPropsLabel).FormulaU = dataType
        vsoShape.CellsSRC(visSectionProp, intNewPropRow, visCustPropsType).FormulaU = "0"
        vsoShape.CellsSRC(visSectionProp, intNewPropRow, visCustPropsFormat).FormulaU = ""
        vsoShape.CellsSRC(visSectionProp, intNewPropRow, visCustPropsLangID).FormulaU = "1033"
        vsoShape.CellsSRC(visSectionProp, intNewPropRow, visCustPropsCalendar).FormulaU = ""
        vsoShape.CellsSRC(visSectionProp, intNewPropRow, visCustPropsPrompt).FormulaU = ""
        vsoShape.CellsSRC(visSectionProp, intNewPropRow, visCustPropsValue).FormulaU = ""
        vsoShape.CellsSRC(visSectionProp, intNewPropRow, visCustPropsSortKey).FormulaU = ""
        Application.EndUndoScope UndoScopeID1, True
    End If
End Sub

1 个答案:

答案 0 :(得分:0)

Visio形状表公式的格式可能很棘手。在这种情况下,您需要将dataType变量括在单引号中,以便将该值存储为标签,并防止子功能悄然失败。

尝试将相关行更改为此:

vsoShape.CellsSRC(visSectionProp, intNewPropRow, visCustPropsLabel).FormulaU = """" & dataType & """"