Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 通过VBA基于单元格值展开/收缩列_Excel_Vba - Fatal编程技术网

Excel 通过VBA基于单元格值展开/收缩列

Excel 通过VBA基于单元格值展开/收缩列,excel,vba,Excel,Vba,我想根据另一个工作表中的单元格值自动添加列。 例如,如果单元格值为25,我希望它展开包含公式/格式的列,在22之后再插入3列 如果单元格值更改为20,我希望它删除最后两列 在VBA中是否有这样做的方法?我想可能需要某种类型的刷新按钮,除非有其他方法使其成为更改事件 提前谢谢 编辑:我已经尝试了下面的代码,但是当变更事件发生时,它总是给我一个错误 colCount = Worksheets("Sheet2").Rows(1).End(xlToRight).Column checkCell = Wo

我想根据另一个工作表中的单元格值自动添加列。 例如,如果单元格值为25,我希望它展开包含公式/格式的列,在22之后再插入3列

如果单元格值更改为20,我希望它删除最后两列

在VBA中是否有这样做的方法?我想可能需要某种类型的刷新按钮,除非有其他方法使其成为更改事件

提前谢谢

编辑:我已经尝试了下面的代码,但是当变更事件发生时,它总是给我一个错误

colCount = Worksheets("Sheet2").Rows(1).End(xlToRight).Column
checkCell = Worksheets("Sheet1").Range("A1").Value

If checkCell > colCount Then
    cellDiff = checkCell - colCount
    Range(Columns(colCount + 1), Columns(colCount + cellDiff)).Insert Shift:=xlToRight
    Range(Cells(1, ColCount), Cells(lRow, ColCount)).AutoFill Destination:=Range(Cells(1, ColCount), Cells(lRow, ColCount + cellDiff)), Type:=xlFillDefault
Else
    cellDiff = colCount - checkCell
    startCol = colCount - cellDiff + 1
    Range(Columns(startCol), Columns(colCount)).Delete Shift:=xlToLeft
End If

小例子来帮助你的方式

dim lastcolumn as long, k as long
with sheets(1)
    lastcolumn = .cells(5,.columns.count).end(xltoleft).column
    if sheets(2).cells(1,1).value <> lastcolumn then k = sheets(2).cells(1,1).value - lastcolumn
    select case k
        case >0
            'insert columns
        case <0
            'remove columns
        case is 0
            'do nothing
    end select
end with       
编辑1:


更正了lastcolumn引用.rows.count而不是.columns.count的错误

是的,在VBA中有一种方法可以做到这一点;事实上,在VBA中有很多方法可以做到这一点。你试过什么,苏斯法?@Cyril很高兴听到!我真的不知道该尝试什么,但任何建议都会很好。我在让单元格根据单元格值进行加减时遇到问题。我可以对单元格进行硬编码,但我无法让它读取变量并进行相应调整共享您尝试过的代码,以便我们能够帮助您纠正当前的状况。考虑到我该如何做,这将是一个更好的方法。这将是一个非常固执己见的方法,对于这个论坛来说太广泛了。@Cyril刚刚添加了它!在查看所提供的代码时,您似乎没有尝试处理太多问题。您可以找到最后一列并粘贴,尽管我们看不到复制的内容。我是否可以建议您花点时间使用宏录制器,以获取有关要复制的内容等的更多信息?此外,尝试使用If语句或Select Case语句,这将允许您评估条件以提示操作。我以前从未使用过Select Case语句,因为我对vba非常陌生,但这看起来是一个坚实的开端。谢谢我在第三行出错了。它表示应用程序定义或对象定义错误。“你知道这是为什么吗?”我的坏安德鲁;我写的是行数,不是列数。。。如果你不介意的话,请看一下我的编辑。我试图用另一种方法来做,但我得到了错误。
dim lastcolumn as long, k as long
with sheets(1)
    lastcolumn = .cells(5,.columns.count).end(xltoleft).column
    if sheets(2).cells(1,1).value <> lastcolumn then k = sheets(2).cells(1,1).value - lastcolumn
    select case k
        case >0
            'insert columns
        case <0
            'remove columns
        case is 0
            'do nothing
    end select
end with