我正在尝试将VBA代码应用到真正大的工作表上。这样做的想法是,下面使用的"My Portfolio.xlsx“文件名将成为一个变量,这样我就可以对任何工作表运行代码,而不必将宏复制到每个工作表中。
我可以将文本列转换为数字数据类型。
Sub ConvertTextToNumber()
Workbooks("My Portfolio.xlsx").Sheets("Sheet1").Range("A2:A9999").NumberFormat = "General"
End Sub即使我更改了文件名,这也是可行的。所以一般的格式应该是正确的。
我试图对第一列(带有标题)从最小到最大进行排序。
Sub SortSmallestToLargest()
Workbooks("My Portfolio.xlsx").Sheets("Sheet1").Range("A2:BT9999").Sort Key1:=Range("A:A"), Order1:=xlAscending
End Sub我对排序部分进行了多次调整,将范围从"A:A“更改为"A”到"A2",但它们都不起作用。
我也试过说Header=Yes或Header=No,但它总是错误的。
我得到了
运行时错误“1004”:应用程序定义的或对象定义的错误
我对该错误的搜索通常指的是给出超出范围的范围或其他什么,但是上面代码中的所有内容都应该是可以的。
我认为这个问题发生在“排序”部分开始之后,但是无论我更改或删除什么,我都不能让它对"A“列进行排序。
发布于 2021-05-26 07:55:46
试试这个:
Sub SortSmallestToLargest()
Workbooks("My Portfolio.xlsx").Sheets("Sheet1").Range("A2:BT9999").Sort Key1:=Workbooks("My Portfolio.xlsx").Sheets("Sheet1").Range("A:A"), Order1:=xlAscending
End Sub或者更易读:
Sub SortSmallestToLargest()
with Workbooks("My Portfolio.xlsx").Sheets("Sheet1")
.Range("A2:BT9999").Sort Key1:= .Range("A:A"), Order1:=xlAscending
end with
End Sub注意,您需要在.Range()赋值中有一个点。我只是被它绊倒了。
发布于 2021-05-26 22:42:58
如果我正确理解,您的目标是在任何工作簿上运行宏,而不必将代码复制到该工作簿中。
我发现最好的两种方法是:
中引用活动工作簿。
我更喜欢这种方法,因为它允许我共享宏或轻松删除。此外,个人宏工作簿有时也会异常运行。
最后,通过从快速访问工具栏激活宏,您可以确保当前活动的工作簿是未管理的工作簿。
https://stackoverflow.com/questions/67700627
复制相似问题