Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 14
Default Help passing Range to Class Module method

I am attempting to instantiate a user defined object (a Class Module)
and then pass a range of cells to that object by calling one of its
methods.

This is what I have so far:

'==================
' Class Module: "DowntimeReport"

Option Explicit

' this is intended to be an object method
Public Function PopulateByRange(R1 As Range) As Boolean

Dim MyRec As Range

For Each MyRec In R1
MyRec.Cells(1, 1).Interior.ColorIndex = 43
Next MyRec

End Function

'==================
' Module: "Kernel"

' this is just a VB Macro
Sub KWTest()
Dim MyObj As DowntimeReport
Set MyObj = New DowntimeReport
Dim MyRng As Range
Set MyRng = Selection
With MyObj
.PopulateByRange (ActiveSheet.Range("B2:F44"))
'.PopulateByRange (MyRng)
End With
End Sub

'==================

This works as written, and it changes the background color of cells
B2:F44

What I would like to have it do is change the background color of the
Selection, not just a hard-coded range of cells. If I uncomment the
line above (.PopulateByRange(MyRng)) it fails with "Object Required."

How can I pass the active selection as a range to my method
PopulateByRange() ?

In case it matters, I am initiating this by assigning the macro
"KWTest" to a custom button on a custom toolbar. I select a range of
cells and the press the custom button.

Brian Herbert Withun
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 789
Default Help passing Range to Class Module method

Hi
Try Activesheet.Selection
regards
Paul
On Feb 12, 2:58*pm, Brian Herbert Withun wrote:
I am attempting to instantiate a user defined object (a Class Module)
and then pass a range of cells to that object by calling one of its
methods.

This is what I have so far:

'==================
' Class Module: "DowntimeReport"

Option Explicit

' this is intended to be an object method
Public Function PopulateByRange(R1 As Range) As Boolean

* * Dim MyRec As Range

* * For Each MyRec In R1
* * * * MyRec.Cells(1, 1).Interior.ColorIndex = 43
* * Next MyRec

End Function

'==================
' Module: "Kernel"

' this is just a VB Macro
Sub KWTest()
* * Dim MyObj As DowntimeReport
* * Set MyObj = New DowntimeReport
* * Dim MyRng As Range
* * Set MyRng = Selection
* * With MyObj
* * * * .PopulateByRange (ActiveSheet.Range("B2:F44"))
* * * * '.PopulateByRange (MyRng)
* * End With
End Sub

'==================

This works as written, and it changes the background color of cells
B2:F44

What I would like to have it do is change the background color of the
Selection, not just a hard-coded range of cells. *If I uncomment the
line above (.PopulateByRange(MyRng)) it fails with "Object Required."

How can I pass the active selection as a range to my method
PopulateByRange() ?

In case it matters, I am initiating this by assigning the macro
"KWTest" to a custom button on a custom toolbar. *I select a range of
cells and the press the custom button.

Brian Herbert Withun


  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 33
Default Help passing Range to Class Module method

On 12 Feb, 15:23, wrote:
Hi
Try Activesheet.Selection
regards
Paul
On Feb 12, 2:58*pm, Brian Herbert Withun wrote:



I am attempting to instantiate a user defined object (a Class Module)
and then pass a range of cells to that object by calling one of its
methods.


This is what I have so far:


'==================
' Class Module: "DowntimeReport"


Option Explicit


' this is intended to be an object method
Public Function PopulateByRange(R1 As Range) As Boolean


* * Dim MyRec As Range


* * For Each MyRec In R1
* * * * MyRec.Cells(1, 1).Interior.ColorIndex = 43
* * Next MyRec


End Function


'==================
' Module: "Kernel"


' this is just a VB Macro
Sub KWTest()
* * Dim MyObj As DowntimeReport
* * Set MyObj = New DowntimeReport
* * Dim MyRng As Range
* * Set MyRng = Selection
* * With MyObj
* * * * .PopulateByRange (ActiveSheet.Range("B2:F44"))
* * * * '.PopulateByRange (MyRng)
* * End With
End Sub


'==================


This works as written, and it changes the background color of cells
B2:F44


What I would like to have it do is change the background color of the
Selection, not just a hard-coded range of cells. *If I uncomment the
line above (.PopulateByRange(MyRng)) it fails with "Object Required."


How can I pass the active selection as a range to my method
PopulateByRange() ?


In case it matters, I am initiating this by assigning the macro
"KWTest" to a custom button on a custom toolbar. *I select a range of
cells and the press the custom button.


Brian Herbert Withun- Hide quoted text -


- Show quoted text -



Phillip London UK

Try this

'Standard Module

Sub KWTest()
Dim MyObj As DownTimeReport
Set MyObj = New DownTimeReport
With MyObj
.PopulateByRange R1:=Selection
End With
End Sub


'Class Module

Option Explicit

' object method
Public Sub PopulateByRange(R1 As Range)
Dim MyRec As Range
For Each MyRec In R1
MyRec.Cells(1, 1).Interior.ColorIndex = 43
Next MyRec
End Sub





  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 14
Default Help passing Range to Class Module method

With MyObj
.PopulateByRange R1:=Selection


This did it! Thank you.


I would feel considerably less icky if I knew why that is different
from this:

.PopulateByRange (Selection)

for calls to this method:

Public Function PopulateByRange(R1 As Range) As Boolean
....
  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,600
Default Help passing Range to Class Module method

"Brian Herbert Withun" wrote -

I would feel considerably less icky if I knew why that is different
from this:

.PopulateByRange (Selection)

for calls to this method:

Public Function PopulateByRange(R1 As Range) As Boolean


Placing the selection in brackets like that Evaluates the Range before
passing it to the function. The evaluated range will be a Variant array or a
single value (if selection is a single cell). Either way it'll fail as your
function expects to receive a Range object.

If you really want to place Selection in brackets you could do it like this

Call .PopulateByRange(Selection)


In passing, referring to the snippet of code in your OP

For Each MyRec In R1
MyRec.Cells(1, 1).Interior.ColorIndex = 43
Next MyRec

No need to loop, simply -

R1.Interior.ColorIndex = 43
or
R1.Value = 123.34

Regards,
Peter T




  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 126
Default Help passing Range to Class Module method

I think it's because you use Function but not return value.

i change your code a little

' Class Module: "DowntimeReport"

Public Function PopulateByRange(R1 As Range) As Boolean

Dim MyRec As Range
On Error GoTo errhandle
For Each MyRec In R1
MyRec.Cells(1, 1).Interior.ColorIndex = 43
Next MyRec
'as Peter said, just the code below
'R1.Interior.ColorIndex = 43
'would do
PopulateByRange = True
Exit Function

errhandle:
PopulateByRange = False
End Function

' Module: "Kernel"

Sub KWTest()
Dim MyObj As Downtimereport
Set MyObj = New Downtimereport
Dim MyRng As Range
Dim result As Boolean

Set MyRng = Selection
With MyObj
'.PopulateByRange (ActiveSheet.Range("a1:b5"))
result = .PopulateByRange(MyRng)
If result Then
MsgBox "Method Succeeded"
Else
MsgBox "Method Failed"
End If
End With
End Sub

keiji

"Brian Herbert Withun" wrote in message
...
With MyObj
.PopulateByRange R1:=Selection


This did it! Thank you.


I would feel considerably less icky if I knew why that is different
from this:

.PopulateByRange (Selection)

for calls to this method:

Public Function PopulateByRange(R1 As Range) As Boolean
...


  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 14
Default Help passing Range to Class Module method

Try Activesheet.Selection
regards
Paul


trying:

Set MyRng = ActiveSheet.Selection

causes:

Runtime-error '438':
Object doesn't support this property or method

  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 789
Default Help passing Range to Class Module method

oops, can't set to Selection directly. This should work:
Set myrange = Range(Selection.Address)

regards
Paul
On Feb 12, 3:38*pm, Brian Herbert Withun wrote:
Try Activesheet.Selection
regards
Paul


trying:

* * Set MyRng = ActiveSheet.Selection

causes:

Runtime-error '438':
Object doesn't support this property or method


  #9   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 6,582
Default Help passing Range to Class Module method

Simply using Selection is fine. The problem was parentheses around the
argument.

- Jon
-------
Jon Peltier, Microsoft Excel MVP
Tutorials and Custom Solutions
Peltier Technical Services, Inc. - http://PeltierTech.com
_______


wrote in message
...
oops, can't set to Selection directly. This should work:
Set myrange = Range(Selection.Address)

regards
Paul
On Feb 12, 3:38 pm, Brian Herbert Withun wrote:
Try Activesheet.Selection
regards
Paul


trying:

Set MyRng = ActiveSheet.Selection

causes:

Runtime-error '438':
Object doesn't support this property or method



Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Select method of Range class failed Capo Excel Programming 4 August 9th 06 04:27 PM
Select method of range class failed sa02000[_4_] Excel Programming 1 October 5th 05 01:20 PM
What did I do? (Select Method of Range Class Failed ) HotRod Excel Programming 9 May 20th 05 02:11 PM
Delete method of Range class failed - HELP!!! richilli Excel Programming 1 October 20th 04 06:24 PM
Calling a module function from a class method ranafout[_2_] Excel Programming 1 November 12th 03 11:08 AM


All times are GMT +1. The time now is 06:44 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"