我有一个宏,它查看用户定义的打印区域,然后根据打印区域对页面设置进行一些调整。我遇到的问题是,一些用户喜欢R1C1符号,当他们的应用程序被设置为R1C1时,打印区域作为R1C1地址给出。这破坏了我的代码,因为我将打印区域返回到一个范围,以便在宏中分析它。
例如:
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”。
发布于 2022-09-08 16:22:19
谢谢你@GSerg!
我能够使用Application.ConvertFormula来确保.PrintArea
始终以A1引用样式结束,而不管用户当前的设置如何。我使用Application.ReferenceStyle检查用户的引用样式,并使用它作为FromReferenceStyle
在ConvertFormula
中的参数
以下是修正后的示例:
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
,类似于上面的示例。
https://stackoverflow.com/questions/73651889
复制相似问题