Carolyn Johnson
cjlabs at worldnet.att.net
Wed Nov 18 12:56:06 CST 2009
Thanks. I didn't know that the format funtion would return a string, but I should have at least caught the space I put there. Unfortunately, I still don't see how to replace the null values with 0 when the control source is set in code. Carolyn Johnson ----- Original Message ----- From: Heenan, Lambert To: 'Access Developers discussion and problem solving' Sent: Wednesday, November 18, 2009 12:18 PM Subject: Re: [AccessD] set control source for text box in VBA using Nz Carolyn, I have a problem with this use of Nz Nz(Format(rstData.Fields("Date"), "ddd") & " " & rstData.Fields("ProductName"), 0) The expression inside Nz() is *never* null for several reasons. Taking the first part of the expression: Format(rstData.Fields("Date"), "ddd") The field named 'Date' (not a good name for a field as 'Date' is a reserved word in VBA) is first being formatted and then passed to Nz, but therein lies a problem, the Format function will change null values to something that is not null. Type the following in the immediate window and hit enter: ? "!" & format(null,"dddd") & "!", "@" & nz(format(null,"dddd"),0) & "@", "$" & nz(null,0) & "$" The output is: !! @@ $0$ Notice that nothing is printed between the two @ symbols. That is because format(null,"dddd") does not return null. Instead it returns an *empty string*. Format always returns some sort of string, and there is no such thing as a null string. As a result of this nz(format(null,"dddd"),0) does not return 0 (zero), it just gives you an empty string. So the first part of you expression is always a string, never null. But you should also not that ? "$" & nz(null,0) & "$" does indeed result in $0$, because Nz sees the null value. The next part of your expression also guaranteed not to be null: & " " & It adds a space to the first part, and so is not null. That expression inside Nz is always going to be a space character at a minimum, and so the Nz function will never see null. Lambert -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Carolyn Johnson Sent: Wednesday, November 18, 2009 12:20 PM To: Access Developers Subject: [AccessD] set control source for text box in VBA using Nz Access2003, WinXP I have a report using a dynamic crosstab query. I have set the control source for the text boxes based on the output field names of the crosstab query in the Report open property of the report. I would like to have 0 printed instead of nothing if the value from the crosstab is null. When I set the control source as Me.Controls("txt" & rstData.Fields("Day") & "Product").ControlSource = Nz(Format(rstData.Fields("Date"), "ddd") & " " & rstData.Fields("ProductName"), 0) in the Report open code, the Nz function is ignored. The data are dsiplayed, but the null values are blank instead of 0. If I set the control source in the property of the text box, the Nz function would work. Is there a way to use the Nz function if the control source is set by code? Thanks Carolyn Johnson St Louis, MO -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com