绑定按钮的宏错误修改非目标工作表列,求原因及解决方法
问题原因与修复方案
问题根源
你的宏里虽然写了With Sheet8,但块内的Rows("1:1")和Columns(cnt)没有加上前缀.,这意味着这些操作并没有绑定到Sheet8,而是默认作用于当前激活的工作表:
- 直接在Sheet8运行宏时,激活的就是Sheet8,所以功能正常;
- 点击Sheet22的按钮时,激活的是Sheet22,宏自然就修改了Sheet22的列。
修复后的代码
只需要给Rows和Columns加上.,让它们归属于With Sheet8的作用域即可:
Sub columnOrder() Dim search As Range Dim cnt As Integer Dim colOrdr As Variant Dim indx As Integer colOrdr = Array("Location", "DWH", "CPT Date", "CPT Time", "VRID", "Carrier", "Vehicle ID", "SDT Date", "SDT Time") 'define column order with header names here cnt = 1 With Sheet8 For indx = LBound(colOrdr) To UBound(colOrdr) Set search = .Rows("1:1").Find(colOrdr(indx), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False) If Not search Is Nothing Then If search.Column <> cnt Then search.EntireColumn.Cut .Columns(cnt).Insert Shift:=xlToRight Application.CutCopyMode = False End If cnt = cnt + 1 End If Next indx End With End Sub
这样无论从哪个工作表触发宏,都会只操作Sheet8的列。
内容的提问来源于stack exchange,提问作者Iron Man
相关产品推荐
相关产品推荐

