excel - VBA用公式交换行范围忽略单元格
问题描述
我有一个 vba 代码来交换两个行范围(不包括 A 列),但需要它忽略包含公式的单元格(在本例中为 K&L 列)。我在下面的代码可以正常工作,但是会弄乱 K&L 列中的公式!谁能建议如何最好地克服这个问题?
Sub swap()
If Selection.Areas.Count <> 2 Then Exit Sub
Set range1 = Selection.Areas(1)
Set range2 = Selection.Areas(2)
Set range1 = range1.Resize(, 100)
Set range2 = range2.Resize(, 100)
If range1.Rows.Count <> range2.Rows.Count Or _
range1.Columns.Count <> range2.Columns.Count Then Exit Sub
range1Address = range1.Address
range1.Cut
range2.Insert shift:=xlShiftToRight
Range(range1Address).Delete shift:=xlToLeft
range2Address = range2.Address
range2.Cut
Range(range1Address).Insert shift:=xlShiftToRight
Range(range2Address).Delete shift:=xlToLeft
End Sub
解决方案
如果您只是想交换他们的位置,请仅使用列 #s 使其更容易一些:
Dim col1 As Long, col2 As Long
If Selection.Areas.Count <> 2 Then Exit Sub
col1 = Selection.Areas(1).Column
col2 = Selection.Areas(2).Column
If Left(Cells(2, col1), 1) = "=" Or Left(Cells(2, col2), 1) = "=" Then Exit Sub 'Should catch if it's a formula
Columns(col1).Cut
Columns(col2).Insert shift:=xlShiftToRight
Columns(col2).Cut
Columns(col1).Insert shift:=xlShiftToRight
将公式放入一些正在移动的单元格中后,我没有任何问题(简单地将范围内的所有单元格相加,1 乘 1,而不是 sum())。公式中单元格的参考位置更改为相应的新位置,因此不会更改公式的输出。
您可能会遇到问题,因为您删除了值,这可能会删除引用。
推荐阅读
- node.js - 我的回调函数没有被调用
- javascript - JavaScript:从表单 onsubmit 事件调用函数后,服务器端代码未执行
- angular - 如何在 Ionic 中修复“无法设置未定义的属性‘bindCallback’”?
- python - 获取字符串的子字符串
- c# - 在泛型参数上编写具有两组可能约束的泛型方法
- python-3.x - 用户输入作为函数参数
- asp.net - 记录已添加到数据库中,但使用 Asp.net ajax 未显示警报消息
- apache - 域不能与 www 一起使用,但在没有 www 的情况下也可以使用
- python - Kivy:奇怪的按钮 on_touch_down 行为?
- c# - 整数到字母字符串 (a, A, b, B, ..., z, Z, aa, Aa, ba, Ba, ... za, zA, aA, AA, ...)