2

我使用用户表单来选择包含以各种方式操作的数据的区域。

我做了这样的事情来获得该地区:

If Selection.Cells.Count = 1 Then
    Set rng = ActiveCell.CurrentRegion
Else
    Set rng = Selection.Range
End If

MyDialog.SourceRange.Value = rng.Address
MyDialog.TableHasHeaders.Value = True

用户窗体有一个名为“我的表有标题”的复选框True,默认设置为。我想使用与 Excel 用于控制具有相同名称的复选框的默认值的相同逻辑来控制此复选框的默认值,当我单击Insert -> Table菜单按钮时显示的名称相同。

内置对话框包含

我不介意是否显示内置对话框并访问其字段的值,或者是否调用控制内置复选框的函数。这两件事中的任何一个都可能吗?如果是,怎么做?

4

2 回答 2

1
Application.Dialogs(796).Show

给出对话框,我不知道是否可以使用“普通”vba 代码检索一些参数。

但是,作为一种变通方法,您可以使用 xlGuess 选项作为 Listobject.add 方法中的参数,将其取消列出并检索应用程序将提供的 xlNo 或 xlYes。

Public Function WhatIsTheGuess(myRange) As XlYesNoGuess
Dim bl As boolean

    With myRange.Parent
        .ListObjects.Add(xlSrcRange, myRange, , xlGuess).Name = "testing"
            bl = .ListObjects("testing").ListRows.Count = myRange.Rows.Count
        .ListObjects("testing").Unlist
            If bl Then myRange.Offset(-1).Rows(1).Delete
    End With

    WhatIsTheGuess = Abs(bl) + 1

End Function

Sub tst()
Dim mYTablehasHeaders As XlYesNoGuess, rng as range
Set Rng = Sheet1.Range("A1:A5")
 mYTablehasHeaders = WhatIsTheGuess(Rng)
End Sub
于 2018-07-11T10:58:07.763 回答
0

这是您使用宏记录器获得的结果:

Sub Macro1()
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$H$5"), , xlYes).Name = "Table1"
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$C$5"), , xlNo).Name = "Table2"
End Sub

如您所见,无论您是否按下该方块,都会记录为参数xlYesxlNo参数。


访问比较该行的前两个值然后决定是否提出报价的函数?好像您要求 Excel 显示一些源代码。我想这是不可行的。

于 2018-07-10T09:17:20.953 回答