Application.Dialogs(xlDialogActiveCellFont).显示参数“9”(下划线)

问题描述 投票:0回答:1

我有一个用户表单,用户可以使用它来更改我正在开发的未来工具的一些设置。他们可以提供输入的一件事是未来代码将生成的一些里程碑文本框的默认字体。他们可以在该区域中看到当前字体设置和打开按钮并利用 Excel 的默认对话框 (xlDialogActiveCellFont) 来选择字体、字体大小以及其他任何内容。

Userform for updating a default font style for future code

我遇到的问题是 Application.Dialogs(xlDialogActiveCellFont).Show(...); 中的 Arg9(“下划线”);微软没有告诉你这是什么变量类型(单个、整数、字符串等),而且我似乎找不到它喜欢的任何输入。

由于 ActiveCell.Font.Underline 是一个“Long”变量类型,我假设 Arg9 想要它采用相同的格式,这就是私有函数“GetData_MSMFontUnderline”提供的功能,它可以将下划线样式“名称”及其关联的样式号转换。因此,假设用户窗体中的文本框为“None”,GetData_MSMFontUnderline 将返回 -4142 或 xlUnderlineStyleNone 作为 Long 变量类型。我尝试输入字符串(例如“None”或“-4142”),但 Application.Dialogs(xlDialogActiveCellFont).Show(...) 不喜欢它。

我收到以下错误:

运行时错误“1004”:

无法获取对话框类的Show属性

Option Explicit

Private Sub CommandButton1_Click()

    With Application.Dialogs(xlDialogActiveCellFont)
        If .Show(Arg1:=Me.Txt_MSMFontName.Value, Arg3:=Int(Me.Txt_MSMFontSize.Value), Arg9:=GetData_MSMFontUnderline(Me.Txt_MSMFontUnderline, FALSE)) = True Then
            Me.Txt_MSMFontName.Value = .Application.ActiveCell.Font.Name
            Me.Txt_MSMFontSize = .Application.ActiveCell.Font.Size
            Me.ChkBox_MSMFontBold.Value = .Application.ActiveCell.Font.Bold
            Me.ChkBox_MSMFontItalic.Value = .Application.ActiveCell.Font.Italic
            Me.Txt_MSMFontUnderline = GetData_MSMFontUnderline(.Application.ActiveCell.Font.Underline, True)
        End If
    End With

End Sub

Private Function GetData_MSMFontUnderline(ValIn As Variant, Optional Bln_ValIsNumber As Boolean) As Variant

    Dim arr(1 To 2, 1 To 5) As Variant
        
        arr(1, 1) = xlUnderlineStyleNone
        arr(2, 1) = "None"
        arr(1, 2) = xlUnderlineStyleDouble
        arr(2, 2) = "Double"
        arr(1, 3) = xlUnderlineStyleSingle
        arr(2, 3) = "Single"
        arr(1, 4) = xlUnderlineStyleSingleAccounting
        arr(2, 4) = "Single Accounting"
        arr(1, 5) = xlUnderlineStyleDoubleAccounting
        arr(2, 5) = "Double Accounting"

    Dim i As Long
    
    On Error GoTo ExitFunc
        If Bln_ValIsNumber Then
            
            For i = 1 To 5
                If arr(1, i) = ValIn Then
                    GetData_MSMFontUnderline = arr(2, i)
                    Exit For
                End If
            Next i

        Else
        
            For i = 1 To 5
                If arr(2, i) = ValIn Then
                    GetData_MSMFontUnderline = arr(1, i)
                    Exit For
                End If
            Next i
            
        End If
        
ExitFunc:

End Function

如有任何帮助,我们将不胜感激!也许我忽略了一些事情!!

excel vba dialog
1个回答
1
投票

看来

Arg9
通过
1
接受
5
,对应于以下输入:

1: None
2: Single
3: Double
4: Single Accounting
5: Double Accounting
© www.soinside.com 2019 - 2024. All rights reserved.