如何检查Excel窗口是否具有vba焦点
我有一些Excel VBAmacros,可能需要几分钟到一个小时才能运行。 在运行结束时,他们做了一堆sorting。 问题是,如果Excel没有焦点(喵,我正在做另一个窗口中的东西),它有一个问题,我必须closuresExcel并重新打开它。 我不知道是什么问题,但我知道它发生时,它会尝试运行Sort.Apply。 有无论如何,我可以检查是否有Excel的焦点,如果没有,要么给它的焦点或popup一个checkbox?
更新:这是代码。 我只是testing它,并失败。 错误是“方法'应用'对象'sorting'失败','运行时错误'-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
是一个variables,具有sorting范围的底部,这是从表中的数字或sorting之前得到的。
我不认为我每一次都得到它,但我不知道如何防止它,而不是停留在焦点。 我现在做的方式是有一个消息框提醒我,它正在sorting,但是我试图使这个完全自动化,所以我将需要做别的事情。
更新:这是我更新的代码。
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
你得到这个错误,因为你没有正确指定你的范围。
例如,在Range("A7:A" & i)
之前添加表单名称
ws.Range("A7:A" & i)
其中ws
是需要进行分类的相关工作表。 这样你就不需要激活窗口:)
编辑
如果您打开了多个Excel窗口,并且想要在具有该代码的Excel文件中对工作表进行sorting,请记住完全限定工作表对象。 例如
Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1")
我已经碰到过好几次了,我不记得我是怎么处理它的。 尝试更改.SetRange rws.Range("A6:K" & i)
到.SetRange Range("A6:K" & i)
并保留其余的代码。 我不确定你必须再次使用工作表对象来限定范围。 如果这不起作用,我会检查一下我在明天写的代码。
编辑: @RBarryYoung – 你是对的我在这个错误的方向去。 我不认为上面的build议会起作用。
我唯一的其他build议是在单独的实例中运行工作簿。 例如:
Dim objXL as New Excel.Application With objxl .Workbooks.Open("C:\Someworkbook.xlsx") .Visible = True ''or false ''Your Code Here .ThisWorkbook.SaveAs("C:\Someworkbook.xlsx") .Quit End With
你将不得不限制所有你的代码With objXL
和End With
(即cells(1,1)
将变成.cells(1,1)
, ThisWorkbook
将成为.ThisWorkbook
)。 如果你已经写了很多代码,但是这样做会迫使Excel只查看你正在运行脚本的实例,防止失去焦点。