Define Object Value With Vb If Elseif Statement
I am trying to define the value of an object on a label using Multiline VB Script. I am working with two text objects in my label design. The first object is named "MODEL NAME". This object is defined by a prompt control Dropdown List with set values. The second object is named "SKU". I would like to have the value for "SKU" to be assigned based on the selection made in the Dropdown List for the "MODEL NAME" object. This is what I have so far and it is not working. I am not a pro with VB so this may be a simple vb code error because I am not very familiar with writing in vb.
This is what I have in the Data Source for the "SKU" object. Source is set to Visual Basic Script. Type is set to Multi-Line Script. Using Bartender 9.4 SR3 Enterprise Automation Edition.
If Format.Objects("MODEL NAME").Value = "350" Then
Value = "1"
ElseIf Format.Objects("MODEL NAME").Value = "400" Then
Value = "2"
ElseIf Format.Objects("MODEL NAME").Value = "450" Then
Value = "3"
End If
I assume I have to set a variable to use in the script after the "Then" and tie that variable to the "Value" that seems to be preset in the Bartender software as a variable for the output to the object data source.
Any help would be much appreciated.
Thanks
Chris
-
Shotaro Ito
★ BarTender Hero ★
Do you want like below?
Print 1 when 350 selected
Print 2 when 400 selected
Print 3 when 450 selected
Looks your script works - at least object SKU's value has been updated at preview / print result. What happens when fail?
0 -
I was getting invalid character at line X error. I think it is a glitch with the bartender software. I kept playing around with it and found that if i removed the quotes from the value = result and saved the error went away, but output was invalid. I then went back in and added the quotes back in to the value result and script began working. I tried this on multiple objects in the label and the result was that with the removal and re addition of the quotes the script began to work.
I ended up something like this:
Dim X
If Format.Objects("MODEL NAME").Value = "350" Then
X = "1"
ElseIf Format.Objects("MODEL NAME").Value = "400" Then
X = "2"
ElseIf Format.Objects("MODEL NAME").Value = "450" Then
X = "3"
End IfValue = X
Now I have another issue though. This label is 32" in length and when I print the label it starts about 11 inches into the label when it prints, so the first portion of the label is not printed. We are using Zebra 110 Xi4 printer with current drivers. I have a similar label with no VB script that is only 4 inches shorter that prints fine. Max label length is 39 inches according to the software. Not sure if the script has something to do with the label not printing correctly.
The script I am using is is a bit longer than the sample I posted above. There are 18 different ElseIf lines in the actual code being used. And the same format of VB script is being used in 4 different objects on the label to define object outputs. This one has me stumped... I have checked all printer and driver settings and can't figure out how to get this to work.
Any suggestions would be greatly appreciated.
Thanks,
Chris
0 -
- When you say latest printer drivers, do you mean v7.3.6 of the Seagull driver?
- Are you printing labels with gaps?
- Could you attach the BarTender document (.btw) for us to examine? - Use the "More Reply Options" button for this.
- Is the printer properly calibrated? What happens when you press the "Feed" button on the printer several times? Do the labels always start at the same position, shortly after the label gap?
- You could also try to perform a "Set Label Length" from the printer driver properties dialog by accessing the "Tools" tab and then going to the "Actions" Drop-Down list.
Also, it should be noted that when making use of the "Format.Objects" object, you should really be using document level VBScript instead:
0 -
To answer the questions above...
1. Yes... v7.3.6 of the Seagull driver.
2. This is a continuous feed printer with cutter, so there are no gaps.
4. If I push the feed button after printing the label in question, the printer feeds the correct length for the label and cuts the stock. The printer is properly calibrated... it is used for hundreds of labels on a daily basis. This is the first time we have seen this issue.
0 -
Have you tried adjusting any of the below settings under the "File > Print > Document Properties > Stock" dialog?
-
Set Top Adjustment. Specifies the length of label that will be fed
out or pulled back into the printer before printing a label. This will offset
the printed image vertically on the label. This setting is only changed if the
checkbox is checked. -
Set Tear-Off Adjustment. Specifies the length of label that will be
fed out or pulled back into the printer after printing a label. This adjusts
where the label will stop. This setting is only changed if the checkbox is
checked.
0 -
Set Top Adjustment. Specifies the length of label that will be fed
-
So I figured out the issue of the label not printing completely. I was using Arial as the font type for everything on the label. I noticed that when I tried to cache the images and format to the printer it was running out of available memory to cache the images. It seems that the issue was due to using the true type font which is sent to the printer as images. I changed all fonts to one of the Zebra fonts and tried to print again (without printer caching enabled) and the label now prints correctly.
0 -
- When you say latest printer drivers, do you mean v7.3.6 of the Seagull driver?
- Are you printing labels with gaps?
- Could you attach the BarTender document (.btw) for us to examine? - Use the "More Reply Options" button for this.
- Is the printer properly calibrated? What happens when you press the "Feed" button on the printer several times? Do the labels always start at the same position, shortly after the label gap?
- You could also try to perform a "Set Label Length" from the printer driver properties dialog by accessing the "Tools" tab and then going to the "Actions" Drop-Down list.
Also, it should be noted that when making use of the "Format.Objects" object, you should really be using document level VBScript instead:
You say that I should be using the "Format.Objects" object at the document level VB script instead of using it at the Data Source level. If that is the case, how do I set the value of an object on the label at the document level VB Script (Label Format Options-VB Scripting)?
I need to set object values based on the value of another object on the label. It looks like all of the Format.Object objects are read only, so how would a value be set if not through the Data Source VB Script source level?
0 -
You would give the data source a shared name instead (do this via the "Name" field under the "Data Source" tab for the object's data source, and then assign the value to the named data source instead:
Format.NamedSubStrings("myvar").Value = "P1"
0
Please sign in to leave a comment.
Comments
8 comments