Format cell based on function result

L

laura_in_abq

Would like to format conditionally using VB. I know how to use "conditional
format" on a cell in the spreadsheet, but want to do this in the code.

In particular, I have thousands of rows of "events". Content of first two
cells in each are strings representing time. The function "get_diff" returns
difference, in seconds. So cell A3 contains
"='PERSONAL.xls'!Module1.get_diff(A1,A2)"

Function get_diff(str0 As String, str1 As String, Optional dbg_flag As
Boolean = False) As Double
Dim xDiff As Double
xDiff = convert_to_sec(str1, dbg_flag) - convert_to_sec(str0, dbg_flag)
If dbg_flag Then
MsgBox "Diff is " & Format(xDiff, "#######.######")
End If
get_diff = xDiff
End Function

How do I format the cell that gets the result based on value returned from
get_diff? That is the A3 (or any other cell from which I called get_diff)
gets formatted based on the result. I can't figure out how to select the
cell in the code.
I need something like:
If xDiff > 3.001 Then
.....Font.Bold = True
.....Font.ColorIndex = 3
Else
.....Font.Bold = False
.....Font.ColorIndex = 10
Endif
 
J

Jim Thomlinson

Functions (UDF) called from within a sheet return values... Period. They can
not modify formats or change the values of cells that they are not in. If the
function is called in code then it can do whatever it wants but not called
from a cell. Your formatting will have to be done externally via conditional
formats or some other means... Assuming that I understood your question
correctly...
 
L

laura_in_abq

Jim,
hmmm, what do you think if I also pass a reference to cell A3 in the UDF?
 
J

Jim Thomlinson

A UDF can know what cell it is located in something like this

Public Function Tada() As String
Tada = Application.Caller.Address
End Function

In Cell A1 add the formula =tada()

That being said even if it knows what cell it is in it can not change the
formatting of that cell. There is NO formula that you can type in a cell to
change it's format (conditional formatting is different as it is not entered
in a cell). Assuming that you do not want to do any kind of math on the
return value of the function you can make it text and the text can be
formatted however you want...

Public Function ThisDate() As String
ThisDate = Format(Now(), "Mmm dd")
End Function

Public Function ThatDate() As String
ThatDate = Format(Now(), "dddd mmmm d, yyyy")
End Function
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top