我对VBA还很陌生,我真的很难让这个程序在不止一个工作表上工作。这个程序应该按从N14到N66的降序排列日期。程序在第一个工作表上按预期工作,但在其他3个工作表上不工作。指定的区域在所有4个工作表上都是相同的(N14 - N66),它需要排列的数据是所有四个工作表上的日期。
我尝试过为每一个单独的工作表放置代码,但结果都一样。我也尝试过为工作表2-4循环,但也不起作用。我也尝试过用不同的方式编写代码,但也不成功。我尝试了所有我能找到的修复方法;然而,我无法让它在所有四个工作表上工作。我也尝试过查看一个非常类似的问题(VBA-Excel macro only works on current sheet),但我一直得到“编译错误:无效或未限定的引用”错误。
目前,主程序作为子程序“OrderDates”(下面的程序)位于模块中。每个工作表(在“Microsoft Excel对象文件夹”中)都调用此子程序。使用此结构,程序仅在1个工作表上完美运行,但在其他3个工作表上不运行,尽管它必须在第一个工作表中执行相同的任务。
“OrderDates”子例程(在模块中)。
Sub OrderDates()
On Error Resume Next
If Not Intersect(Target, Range("N:N")) Is Nothing Then
Range("N14").Sort key1:=Range("N66"), _
Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=True, _
Orientation:=xlTopToBottom
End If
End Sub
当对工作表进行更改时调用子例程(这是为Microsoft Excel Objects文件夹中的每个工作表单独调用的)。
Private Sub Worksheet_Change(ByVal Target As Range)
Call OrderDates
End Sub
非常感谢您提前回复。
1条答案
按热度按时间ldfqzlk81#
请尝试下一个经过修改的解决方案。该解决方案没有回答我的澄清问题,而是假设讨论中的四个表包含一个类似的
Event
代码,并且您希望被调用的Sub
处理各自触发的事件表。被调用的公共Sub
必须有一个参数来知道调用来自哪里:Range("N:N")
引用了活动工作表,并且它必须是完全限定的。Event
代码应如下所示:要“通知”被调用的子程序应处理的范围...