首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从R1C1地址重建范围?

如何从R1C1地址重建范围?
EN

Stack Overflow用户
提问于 2022-09-08 15:48:39
回答 1查看 31关注 0票数 1

我有一个宏,它查看用户定义的打印区域,然后根据打印区域对页面设置进行一些调整。我遇到的问题是,一些用户喜欢R1C1符号,当他们的应用程序被设置为R1C1时,打印区域作为R1C1地址给出。这破坏了我的代码,因为我将打印区域返回到一个范围,以便在宏中分析它。

例如:

代码语言:javascript
运行
复制
With SDS.PageSetup
    If SDS.Range(.PrintArea).Rows.Count >= 53 Then .FitToPagesTall = 2 Else .FitToPagesTall = 1
End With

这在用户使用A1符号时有效,但如果用户使用R1C1表示法,则会中断,因为.PrintArea返回R1C1地址,然后Range无法创建对象。

如何将代码中的这一行和类似行更改为与R1C1符号兼容?或者,无论用户的设置如何,如何让.PrintArea 返回A1符号?

作为测试示例,当我遇到此错误时,我的打印区域是R1C1中的"R23C2:R125C12,R23C14:R125C24“和A1中的"$B$23:$L$125,$N$23:$X$125”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-08 16:22:19

谢谢你@GSerg!

我能够使用Application.ConvertFormula来确保.PrintArea始终以A1引用样式结束,而不管用户当前的设置如何。我使用Application.ReferenceStyle检查用户的引用样式,并使用它作为FromReferenceStyleConvertFormula中的参数

以下是修正后的示例:

代码语言:javascript
运行
复制
With SDS.PageSetup
    Dim PrintPages As Range
    Set PrintPages = SDS.Range(Application.ConvertFormula(.PrintArea, Application.ReferenceStyle, xlA1))
    If PrintPages.Rows.Count >= 53 Then .FitToPagesTall = 2 Else .FitToPagesTall = 1
End With

为了确保完全兼容,我检查了我的模块并确保Range(.PrintArea)的每个实例都包含了ConvertFormula,类似于上面的示例。

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

https://stackoverflow.com/questions/73651889

复制
相关文章

相似问题

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