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