如何在excel vba中将变量设置为列范围

时间:2015-01-31 21:44:05

标签: excel-vba vba excel

我有一个名为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

3 个答案:

答案 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)

以上将引用名称为 DAYlastrow 行下方和一列的单元格。

通常引用一个 100 行 5 列的表格,左上角为一个单元格,例如 G2 使用

Range("G2").Resize(100,5)

以上完全等同于

Range("G2:K101")

买你不必用 Range("G2:K" & count+1) 等做任何奇怪的字符串数学