我有一些可能需要几分钟到一个小时才能运行的 excel vba 宏。在运行结束时,他们会进行一堆排序。问题是,如果 Excel 没有焦点(iow,我正在另一个窗口中做某事),它就有问题,我必须关闭 excel 并重新打开它。我不确定问题是什么,但我知道它在尝试运行 Sort.Apply 时会发生。无论如何我可以检查excel是否有焦点,如果没有,要么给它焦点,要么弹出一个复选框?
更新:这是代码。我刚刚测试了它,它失败了。错误是“对象'排序'的方法'应用'失败”,“运行时错误'-2147417848(80010108)':”
With rws.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A7:A" & i _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("C7:C" & i _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A6:K" & i)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
.SortFields.Clear
End With
i
是一个具有排序范围底部的变量,它是从工作表中的数字或排序之前获得的。
我不认为我每次都能得到它,但除了保持专注之外,我不知道如何防止它。我现在这样做的方式是有一个消息框提醒我它正在排序,但是我正在尝试让它完全自动化,所以我需要做其他事情。
更新:这是我更新的代码。
With rws.Sort
.SortFields.Clear
.SortFields.Add Key:=rws.Range("A7:A" & i _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=rws.Range("C7:C" & i _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange rws.Range("A6:K" & i)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
.SortFields.Clear
End With