首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对指定工作表上的范围进行排序?

如何对指定工作表上的范围进行排序?
EN

Stack Overflow用户
提问于 2021-05-26 07:46:26
回答 2查看 76关注 0票数 0

我正在尝试将VBA代码应用到真正大的工作表上。这样做的想法是,下面使用的"My Portfolio.xlsx“文件名将成为一个变量,这样我就可以对任何工作表运行代码,而不必将宏复制到每个工作表中。

我可以将文本列转换为数字数据类型。

代码语言:javascript
运行
复制
Sub ConvertTextToNumber()
Workbooks("My Portfolio.xlsx").Sheets("Sheet1").Range("A2:A9999").NumberFormat = "General"
End Sub

即使我更改了文件名,这也是可行的。所以一般的格式应该是正确的。

我试图对第一列(带有标题)从最小到最大进行排序。

代码语言:javascript
运行
复制
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“列进行排序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-26 07:55:46

试试这个:

代码语言:javascript
运行
复制
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

或者更易读:

代码语言:javascript
运行
复制
Sub SortSmallestToLargest()
    with Workbooks("My Portfolio.xlsx").Sheets("Sheet1")
        .Range("A2:BT9999").Sort Key1:= .Range("A:A"), Order1:=xlAscending
    end with
End Sub

注意,您需要在.Range()赋值中有一个点。我只是被它绊倒了。

票数 0
EN

Stack Overflow用户

发布于 2021-05-26 22:42:58

如果我正确理解,您的目标是在任何工作簿上运行宏,而不必将代码复制到该工作簿中。

我发现最好的两种方法是:

  1. 使用您的个人宏工作簿,这是一个excel总是在后台打开的工作簿。所以您可以将代码存储在那里,并且它总是可以运行的。我通常在宏.

中引用活动工作簿。

  1. 将工作簿保存为外接程序.

我更喜欢这种方法,因为它允许我共享宏或轻松删除。此外,个人宏工作簿有时也会异常运行。

最后,通过从快速访问工具栏激活宏,您可以确保当前活动的工作簿是未管理的工作簿。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67700627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档