我有一个名为DAY的整个表的列的命名范围 我有一个宏,每当DAY列中的单元格值发生变化时就会设置分页符(例如从第1天到第2天或第3天的更改,将有一个分页用于打印)。 但是,此宏当前通过指定字母列如“A”或“B”或“C”或“H”来工作,如何通过指定“DAY”命名范围来使其工作,如果它移动,则vba代码不会破坏?
特别注意:
For Each c In Range("C1:C" & lastrow)
具体来说:
Range("C1:C"
我想改为:
Range("DAY"
但是我尝试了各种语法形式
Sub Set_PageBreaks_DAY()
Dim lastrow As Long, c As Range
Dim i As Integer, rngData As Range
Set rngData = Range("A1").CurrentRegion
i = Application.WorksheetFunction.Match("DAY", Range("A1:AZ1"), 0)
lastrow = Cells(Rows.Count, i).End(xlUp).Row
Application.ScreenUpdating = False
ActiveSheet.ResetAllPageBreaks
For Each c In Range("C1:C" & lastrow)
If c.Offset(1, 0).Value <> c.Value And c.Offset(1, 0) <> "" Then
c.Offset(1, 0).PageBreak = xlPageBreakManual
End If
Next c
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:0)
首先,需要注意的是,命名范围有两个可能的范围,这将影响访问它的方式。如果您的命名范围具有工作簿范围,则应使用
Dim Named_range_day as Range
Set Named_range_day = ThisWorkbook.Names("Day").RefersToRange
如果命名范围包含工作表范围,则使用
Dim Named_range_day as Range
Set Named_range_day = wksht.Names("Day").RefersToRange
其中wksht
是包含命名范围的工作表的工作表变量。
答案 1 :(得分:0)
JLILI Aman的答案没有成功的原因是您必须先使用
将列索引号转换为列字母columnLetter = Split(Columns(i).Address(), "$")(2)
所以例如
Sub Set_PageBreaks_CREW()
Dim lastrow As Long, c As Range
Dim i As Integer, rngData As Range
Set rngData = Range("A1").CurrentRegion
i = Application.WorksheetFunction.Match("DAY", Range("A1:AZ1"), 0)
lastrow = Cells(Rows.Count, i).End(xlUp).Row
Application.ScreenUpdating = False
ActiveSheet.ResetAllPageBreaks
columnLetter = Split(Columns(i).Address(), "$")(2)
Var = columnLetter & "1:" & columnLetter
For Each c In Range(Var & lastrow)
If c.Offset(1, 0).Value <> c.Value And c.Offset(1, 0) <> "" Then
c.Offset(1, 0).PageBreak = xlPageBreakManual
End If
Next c
Application.ScreenUpdating = True
End Sub
答案 2 :(得分:0)
Range("DAY").Resize(lastrow,1)
以上将引用名称为 DAY
和 lastrow
行下方和一列的单元格。
通常引用一个 100 行 5 列的表格,左上角为一个单元格,例如 G2
使用
Range("G2").Resize(100,5)
以上完全等同于
Range("G2:K101")
买你不必用 Range("G2:K" & count+1)
等做任何奇怪的字符串数学