在 VBA 中使用 Excel 的内置 "My Table has Headers" 功能

Use Excel's built in "My Table has Headers" functionality in VBA

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

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

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

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

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

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

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

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


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

Application.Dialogs(796).Show

给出对话框,我不知道是否可以用'normal' 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