ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Trouble with dynamic named range (https://www.excelbanter.com/excel-programming/365838-trouble-dynamic-named-range.html)

[email protected]

Trouble with dynamic named range
 
Hopefully there is a solution to my quandary this time. I am trying to
evaluate cells in a list to confirm that they are in a validation list.
Yes, I know that validation should have been used during entry, but it
was circumvented and I want to cycle through the cells and highlight
any that are not in the validation list.

My problem is that the following example code works when addressing a
range by cell reference (i.e. "c2:c9") and with a defined name range
that is limited (i.e. Shifts = "f3:f6"). But when I make the defined
name range dynamic, it stops working (i.e. Shifts =
offset(f3,0,0,counta(f3:f100),1) ). The cell loop goes across the
entire sheet, as it was from a more complicated example.

Could someone please explain what I am missing here?

Sub checkvalidation()
Dim LastRow As Long, LastCol As Long, rowstep As Long, colstep As Long,
validtype As Long
Dim validrng As Range

Application.EnableEvents = False
Application.ScreenUpdating = False

On Error GoTo errhandler

LastRow = Cells.SpecialCells(xlLastCell).Column
LastCol = Cells.SpecialCells(xlLastCell).Column

On Error Resume Next

For colstep = 1 To Last Col
For rowstep = 1 To LastRow
validtype = Cells(rowstep, colstep).Validation.Type
If validtype = 3 Then
Set validrng = Range("shifts")
If
IsError(Application.WorksheetFunction.Match(Cells( rowstep, colstep),
validrng, 0)) Then
With Cells(rowstep, colstep)
.Interior.ColorIndex = 45
End With
End If
End If
Next rowstep
Next colstep

errhandler:
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub

End Sub


Jim Thomlinson

Trouble with dynamic named range
 
First things first. I think this line is incorrect...

LastRow = Cells.SpecialCells(xlLastCell).Column

you probably mean

LastRow = Cells.SpecialCells(xlLastCell).Row

--
HTH...

Jim Thomlinson


" wrote:

Hopefully there is a solution to my quandary this time. I am trying to
evaluate cells in a list to confirm that they are in a validation list.
Yes, I know that validation should have been used during entry, but it
was circumvented and I want to cycle through the cells and highlight
any that are not in the validation list.

My problem is that the following example code works when addressing a
range by cell reference (i.e. "c2:c9") and with a defined name range
that is limited (i.e. Shifts = "f3:f6"). But when I make the defined
name range dynamic, it stops working (i.e. Shifts =
offset(f3,0,0,counta(f3:f100),1) ). The cell loop goes across the
entire sheet, as it was from a more complicated example.

Could someone please explain what I am missing here?

Sub checkvalidation()
Dim LastRow As Long, LastCol As Long, rowstep As Long, colstep As Long,
validtype As Long
Dim validrng As Range

Application.EnableEvents = False
Application.ScreenUpdating = False

On Error GoTo errhandler

LastRow = Cells.SpecialCells(xlLastCell).Column
LastCol = Cells.SpecialCells(xlLastCell).Column

On Error Resume Next

For colstep = 1 To Last Col
For rowstep = 1 To LastRow
validtype = Cells(rowstep, colstep).Validation.Type
If validtype = 3 Then
Set validrng = Range("shifts")
If
IsError(Application.WorksheetFunction.Match(Cells( rowstep, colstep),
validrng, 0)) Then
With Cells(rowstep, colstep)
.Interior.ColorIndex = 45
End With
End If
End If
Next rowstep
Next colstep

errhandler:
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub

End Sub



[email protected]

Trouble with dynamic named range
 
Yeah, sorry about that, it was a quick cut and paste to replace a temp
number while I was trying to trap the problem. Still doesn't work.

marc


Jim Thomlinson wrote:
First things first. I think this line is incorrect...

LastRow = Cells.SpecialCells(xlLastCell).Column

you probably mean

LastRow = Cells.SpecialCells(xlLastCell).Row

--
HTH...

Jim Thomlinson


" wrote:

Hopefully there is a solution to my quandary this time. I am trying to
evaluate cells in a list to confirm that they are in a validation list.
Yes, I know that validation should have been used during entry, but it
was circumvented and I want to cycle through the cells and highlight
any that are not in the validation list.

My problem is that the following example code works when addressing a
range by cell reference (i.e. "c2:c9") and with a defined name range
that is limited (i.e. Shifts = "f3:f6"). But when I make the defined
name range dynamic, it stops working (i.e. Shifts =
offset(f3,0,0,counta(f3:f100),1) ). The cell loop goes across the
entire sheet, as it was from a more complicated example.

Could someone please explain what I am missing here?

Sub checkvalidation()
Dim LastRow As Long, LastCol As Long, rowstep As Long, colstep As Long,
validtype As Long
Dim validrng As Range

Application.EnableEvents = False
Application.ScreenUpdating = False

On Error GoTo errhandler

LastRow = Cells.SpecialCells(xlLastCell).Column
LastCol = Cells.SpecialCells(xlLastCell).Column

On Error Resume Next

For colstep = 1 To Last Col
For rowstep = 1 To LastRow
validtype = Cells(rowstep, colstep).Validation.Type
If validtype = 3 Then
Set validrng = Range("shifts")
If
IsError(Application.WorksheetFunction.Match(Cells( rowstep, colstep),
validrng, 0)) Then
With Cells(rowstep, colstep)
.Interior.ColorIndex = 45
End With
End If
End If
Next rowstep
Next colstep

errhandler:
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub

End Sub




[email protected]

Trouble with dynamic named range
 
It appears that the problem is that, in order to address a dynamic
range, validrng needs to be set with a worksheet specified. So that,

Set validrng = worksheets("Sheet1").range("Shifts")

WILL work, but:

Set validrng = Range("Shifts")

will NOT.

Can someone explain this to me?


wrote:
Yeah, sorry about that, it was a quick cut and paste to replace a temp
number while I was trying to trap the problem. Still doesn't work.

marc


Jim Thomlinson wrote:
First things first. I think this line is incorrect...

LastRow = Cells.SpecialCells(xlLastCell).Column

you probably mean

LastRow = Cells.SpecialCells(xlLastCell).Row

--
HTH...

Jim Thomlinson


" wrote:

Hopefully there is a solution to my quandary this time. I am trying to
evaluate cells in a list to confirm that they are in a validation list.
Yes, I know that validation should have been used during entry, but it
was circumvented and I want to cycle through the cells and highlight
any that are not in the validation list.

My problem is that the following example code works when addressing a
range by cell reference (i.e. "c2:c9") and with a defined name range
that is limited (i.e. Shifts = "f3:f6"). But when I make the defined
name range dynamic, it stops working (i.e. Shifts =
offset(f3,0,0,counta(f3:f100),1) ). The cell loop goes across the
entire sheet, as it was from a more complicated example.

Could someone please explain what I am missing here?

Sub checkvalidation()
Dim LastRow As Long, LastCol As Long, rowstep As Long, colstep As Long,
validtype As Long
Dim validrng As Range

Application.EnableEvents = False
Application.ScreenUpdating = False

On Error GoTo errhandler

LastRow = Cells.SpecialCells(xlLastCell).Column
LastCol = Cells.SpecialCells(xlLastCell).Column

On Error Resume Next

For colstep = 1 To Last Col
For rowstep = 1 To LastRow
validtype = Cells(rowstep, colstep).Validation.Type
If validtype = 3 Then
Set validrng = Range("shifts")
If
IsError(Application.WorksheetFunction.Match(Cells( rowstep, colstep),
validrng, 0)) Then
With Cells(rowstep, colstep)
.Interior.ColorIndex = 45
End With
End If
End If
Next rowstep
Next colstep

errhandler:
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub

End Sub




Mark Driscol[_2_]

Trouble with dynamic named range
 
Be careful in the use of these names. If "Shifts" refers to cells
A1:A5 and then you use

Set validrng = worksheets("Sheet1").range("Shifts")

If "Shifts" then refers to cells A1:A10 later on, validrng will still
refer to cells A1:A5. You may already know that, but I thought I would
mention it in case you didn't.

Mark


wrote:
It appears that the problem is that, in order to address a dynamic
range, validrng needs to be set with a worksheet specified. So that,

Set validrng = worksheets("Sheet1").range("Shifts")

WILL work, but:

Set validrng = Range("Shifts")

will NOT.

Can someone explain this to me?


wrote:
Yeah, sorry about that, it was a quick cut and paste to replace a temp
number while I was trying to trap the problem. Still doesn't work.

marc


Jim Thomlinson wrote:
First things first. I think this line is incorrect...

LastRow = Cells.SpecialCells(xlLastCell).Column

you probably mean

LastRow = Cells.SpecialCells(xlLastCell).Row

--
HTH...

Jim Thomlinson


" wrote:

Hopefully there is a solution to my quandary this time. I am trying to
evaluate cells in a list to confirm that they are in a validation list.
Yes, I know that validation should have been used during entry, but it
was circumvented and I want to cycle through the cells and highlight
any that are not in the validation list.

My problem is that the following example code works when addressing a
range by cell reference (i.e. "c2:c9") and with a defined name range
that is limited (i.e. Shifts = "f3:f6"). But when I make the defined
name range dynamic, it stops working (i.e. Shifts =
offset(f3,0,0,counta(f3:f100),1) ). The cell loop goes across the
entire sheet, as it was from a more complicated example.

Could someone please explain what I am missing here?

Sub checkvalidation()
Dim LastRow As Long, LastCol As Long, rowstep As Long, colstep As Long,
validtype As Long
Dim validrng As Range

Application.EnableEvents = False
Application.ScreenUpdating = False

On Error GoTo errhandler

LastRow = Cells.SpecialCells(xlLastCell).Column
LastCol = Cells.SpecialCells(xlLastCell).Column

On Error Resume Next

For colstep = 1 To Last Col
For rowstep = 1 To LastRow
validtype = Cells(rowstep, colstep).Validation.Type
If validtype = 3 Then
Set validrng = Range("shifts")
If
IsError(Application.WorksheetFunction.Match(Cells( rowstep, colstep),
validrng, 0)) Then
With Cells(rowstep, colstep)
.Interior.ColorIndex = 45
End With
End If
End If
Next rowstep
Next colstep

errhandler:
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub

End Sub




Marc[_24_]

Trouble with dynamic named range
 
Thanks, Mark. It's definitely a fine point I might not have realized,
but validrng would be changed through each loop and when the macro was
called, so that should be ok.

Mark Driscol wrote:
Be careful in the use of these names. If "Shifts" refers to cells
A1:A5 and then you use

Set validrng = worksheets("Sheet1").range("Shifts")

If "Shifts" then refers to cells A1:A10 later on, validrng will still
refer to cells A1:A5. You may already know that, but I thought I would
mention it in case you didn't.

Mark


wrote:
It appears that the problem is that, in order to address a dynamic
range, validrng needs to be set with a worksheet specified. So that,

Set validrng = worksheets("Sheet1").range("Shifts")

WILL work, but:

Set validrng = Range("Shifts")

will NOT.

Can someone explain this to me?


wrote:
Yeah, sorry about that, it was a quick cut and paste to replace a temp
number while I was trying to trap the problem. Still doesn't work.

marc


Jim Thomlinson wrote:
First things first. I think this line is incorrect...

LastRow = Cells.SpecialCells(xlLastCell).Column

you probably mean

LastRow = Cells.SpecialCells(xlLastCell).Row

--
HTH...

Jim Thomlinson


" wrote:

Hopefully there is a solution to my quandary this time. I am trying to
evaluate cells in a list to confirm that they are in a validation list.
Yes, I know that validation should have been used during entry, but it
was circumvented and I want to cycle through the cells and highlight
any that are not in the validation list.

My problem is that the following example code works when addressing a
range by cell reference (i.e. "c2:c9") and with a defined name range
that is limited (i.e. Shifts = "f3:f6"). But when I make the defined
name range dynamic, it stops working (i.e. Shifts =
offset(f3,0,0,counta(f3:f100),1) ). The cell loop goes across the
entire sheet, as it was from a more complicated example.

Could someone please explain what I am missing here?

Sub checkvalidation()
Dim LastRow As Long, LastCol As Long, rowstep As Long, colstep As Long,
validtype As Long
Dim validrng As Range

Application.EnableEvents = False
Application.ScreenUpdating = False

On Error GoTo errhandler

LastRow = Cells.SpecialCells(xlLastCell).Column
LastCol = Cells.SpecialCells(xlLastCell).Column

On Error Resume Next

For colstep = 1 To Last Col
For rowstep = 1 To LastRow
validtype = Cells(rowstep, colstep).Validation.Type
If validtype = 3 Then
Set validrng = Range("shifts")
If
IsError(Application.WorksheetFunction.Match(Cells( rowstep, colstep),
validrng, 0)) Then
With Cells(rowstep, colstep)
.Interior.ColorIndex = 45
End With
End If
End If
Next rowstep
Next colstep

errhandler:
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub

End Sub





All times are GMT +1. The time now is 09:05 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com