如何使用vba隐藏和复制复选框

如何使用vba隐藏和复制复选框,vba,excel,excel-2010,Vba,Excel,Excel 2010,我有一个带复选框的基列(代码中的D列),我想用checbox将该列复制到其他列,但必须隐藏D列(包括复选框在内的所有数据) 这里的问题是: 我不知道如何隐藏checbox,当我隐藏列时,checbox仍然可见 当我复制列时,列中的复选框不会被复制 这就是我实际使用的功能 Private Sub cmdAddNewXref_Click() Columns("D:D").Select Selection.Copy i = 3 Cells(2, i).Sele

我有一个带复选框的基列(代码中的D列),我想用checbox将该列复制到其他列,但必须隐藏D列(包括复选框在内的所有数据)

这里的问题是:

  • 我不知道如何隐藏checbox,当我隐藏列时,checbox仍然可见
  • 当我复制列时,列中的复选框不会被复制
  • 这就是我实际使用的功能

        Private Sub cmdAddNewXref_Click()
        Columns("D:D").Select
        Selection.Copy
    
        i = 3
        Cells(2, i).Select
        Do
            i = i + 1
        Loop While Cells(2, i) <> ""
        Cells(2, i).Select
    
        'MsgBox ActiveCell.Column
    
        Columns(i - 1).Select
        Columns("D:D").Select
        Selection.Copy
    
        Columns(i).Select
        ActiveSheet.Paste
        Selection.EntireColumn.Hidden = False
    
        Application.CutCopyMode = False
    
        Range("A1").Select
        End Sub
    
    Private Sub cmdAddNewXref_Click()
    列(“D:D”)。选择
    选择,复制
    i=3
    单元格(2,i)。选择
    做
    i=i+1
    循环,而单元格(2,i)“”
    单元格(2,i)。选择
    'MsgBox ActiveCell.Column
    列(i-1)。选择
    列(“D:D”)。选择
    选择,复制
    第(i)列。选择
    活动表。粘贴
    Selection.EntireColumn.Hidden=False
    Application.CutCopyMode=False
    范围(“A1”)。选择
    端接头
    
    但最重要的是,我想做的,是可能的吗


    编辑1:实际上多亏了Scott Holtzman,我可以隐藏带有列的复选框。

    更改粘贴,粘贴特殊值,隐藏复选框。我相信是可见属性

    希望这有帮助

    从我收集的。。。将行复制到其他位置,但不复制控件,然后他想隐藏复制的行。:)


    给我这个机会。可能还有一种更理想的方法,但我测试了它并使它工作起来

    有一些关于单元格范围的假设,因此您需要进行调整以满足您的精确电子表格规格

    Option Explicit
    
    Private Sub cmdAddNewXref_Click()
    
        Dim i As Integer
        Dim ws As Worksheet
    
        Set ws = Worksheets("mySheet") 'change as needed
    
        'find next column to copy
        i = 3
        Do
            i = i + 1
        Loop While ws.Cells(2, i) <> ""
    
        With ws.Columns("D:D")
            .EntireColumn.Hidden = False
            .Copy Columns(i)
        End With
    
        'copy checkbox in column D
        Dim cb As Shape
        Set cb = ws.Shapes("CheckBox1") 'change name as needed
        cb.Copy
        ws.Cells(4, i).Select 'assumes checkbox should be in row 4, change to wherever it is on column D for you
        ws.Paste
    
        ws.Columns("D:D").EntireColumn.Hidden = True
    
    
    End Sub
    
    选项显式
    私有子cmdAddNewXref_Click()
    作为整数的Dim i
    将ws设置为工作表
    设置ws=Worksheets(“mySheet”)“根据需要进行更改”
    '查找要复制的下一列
    i=3
    做
    i=i+1
    当ws.Cells(2,i)”时循环
    带有ws.Columns(“D:D”)
    .entireclumn.Hidden=False
    .复制列(i)
    以
    '复制D列中的复选框
    形状
    设置cb=ws.Shapes(“CheckBox1”)'根据需要更改名称
    抄送
    ws.Cells(4,i).Select'假设复选框应该在第4行,为您更改为D列中的任何位置
    粘贴
    ws.Columns(“D:D”).entireclumn.Hidden=True
    端接头
    
    解决此问题不需要vba。右键单击复选框并选择
    格式控制
    ,然后在
    属性
    选项卡中选择
    移动并调整单元格大小
    。这将确保每个复选框随列一起隐藏,并随列一起复制。@ScottHoltzman谢谢!最近两个小时搜索如何隐藏它现在值得。费尔南多-抱歉,这并不能解决复制问题,但它确实解决了隐藏问题。事实上,你能更清楚你想要什么吗。我以为我明白了,但我不确定。这就是我的想法:1)查找新列2)复制列和复选框(或创建新复选框)?3) 隐藏新创建的列和复选框?实际上是选项2,我有带复选框的基列(代码中的D列),我想用复选框将该列复制到其他列,但D列必须隐藏(包括复选框的所有数据)。我希望我现在能说得更清楚些,我也会编辑答案以避免歧义。@ScottHoltzman我看到了一些奇怪的事情,当“设计模式”被激活时,带有checbox的单元格会被复制到任何其他单元格,但我不能使用我创建的按钮来复制柱,因为设计模式被激活了。应该有一种方法可以创建一个宏,在复制列之前激活,在复制数据时停用?只是好奇,你真的在发布之前测试了这个答案吗?嗨,是的,我做了。fApologies,我读了,因为他不想被复制,别理我,我会删除我的答案。漫长的一周!干杯。不,我现在意识到它很不清楚:)我只是重新读了一遍,意识到其中有一些含糊不清的地方。在我们两人之间,他学会了怎么做,这是最重要的:)
    Option Explicit
    
    Private Sub cmdAddNewXref_Click()
    
        Dim i As Integer
        Dim ws As Worksheet
    
        Set ws = Worksheets("mySheet") 'change as needed
    
        'find next column to copy
        i = 3
        Do
            i = i + 1
        Loop While ws.Cells(2, i) <> ""
    
        With ws.Columns("D:D")
            .EntireColumn.Hidden = False
            .Copy Columns(i)
        End With
    
        'copy checkbox in column D
        Dim cb As Shape
        Set cb = ws.Shapes("CheckBox1") 'change name as needed
        cb.Copy
        ws.Cells(4, i).Select 'assumes checkbox should be in row 4, change to wherever it is on column D for you
        ws.Paste
    
        ws.Columns("D:D").EntireColumn.Hidden = True
    
    
    End Sub