在VBA中使用Excel内置的“我的表具有标题”功能

时间:2018-07-10 09:14:26

标签: excel vba userform excel-tables

我使用用户窗体选择一个包含以各种方式操纵的数据的区域。

我要做这样的事情来获得区域:

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菜单按钮时显示的名称相同。

Built-in Dialog containing "My Table Has Headers" tickbox

我不介意显示内置对话框并访问其字段的值,还是调用控制内置复选框的函数。这两种情况都有可能吗?如果可以,怎么办?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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显示一些源代码。我想这是行不通的。