Barcode Software - SAP
Link auf tec-it.com
For encoding Hex values with TBarCode V9 you have to use "Escape Sequences" in the format "\xhh" (hh=Hex value). It is necessary to convert the hex sequence (e.g. from DP Premiumadress) into this format and turn on the TBarCode property "EscapeSequences". Below we provide VBA sample code for this conversion:
' sHexValue .... Converted data stream
' sets "\x" before each byte
Private Function CreateTBCHEXString(sHexValue)
Dim sTBCText As String
'set the prefix needed by TBarCode "\xhh"
sHexPrefix = "\x"
'bring the generated string into "\xhh" format
For i = 1 To Len(sHexValue) Step 2
sTBCText = sTBCText & sHexPrefix & Mid$(sHexValue, i, 2)
CreateTBCHEXString = sTBCText
Instead of using escape sequences you can use the encoding mode Hexadecimal.
Even if you use an escape sequence for binary data the encoder will use Codepage Conversion (example: \x88 leads to a different value in Data Matrix as desired).
This occurs if the currently selected font does not support rotation. Select a TrueType font to solve the problem (e. g. Arial).
The following workaround can help to solve the problem with the disappearing toolbar (TBarCode V9!) in Word 2007:
File: "TBarCode Add-In.dot"
Path (Windows XP): C:\Documents and Settings\[YourUserName]\Local
Path (Windows Vista): C:\users\[YourUserName]\AppData\Local\TEC-IT\TBarCode9
By doing so, a new .dot file should be created and the plug-in should be visible again.
Dim fnt As stdole.StdFont
Set fnt = new stdole.StdFont
fnt.Name = "Arial"
Set TBC.Font = fnt
COleFont cOF = m_TBarCode.GetFont();
tagCY cy = cOF.GetSize();
cOF.SetName("Arial"); // Font Family = Arial
cy.int64 = cy.int64 * 1.5; // add 50% to original size
set fnt = Server.CreateObject("StdFont")
fnt.name = "Arial"
set TBC.Font = fnt
$bcobj = new COM("TBarCode9.TBarCode9");
$fntobj = new COM("StdFont");
You need to generate an Automation Variable of type OLE Automation.StdFont. This font object is then assigned to the TBarCode COM object.
Name Data type Subtype
StdFont Automation 'OLE Automation'.StdFont
IF ISCLEAR(StdFont) THEN
StdFont.Size := 30;
StdFont.Name := 'Arial';
BC.Font := StdFont;
This is possible by changing the active text index programmatically. Below is an example for Excel VBA. TBarCode111 is the name of the TBarCode instance on the sheet.
' first add a quiet zone for our text area
TBarCode111.QuietZoneTop = 10
TBarCode111.QuietZoneUnit = eMUMM
' set bar code data (+ normal HRT) in text area #0
TBarCode111.ActiveTextIndex = 0
TBarCode111.BarCode = eBC_Code128
TBarCode111.Text = "1234567890"
TBarCode111.DisplayText = ""
Dim fontBarcode As New stdole.StdFont
fontBarcode.Name = "Arial"
fontBarcode.Size = 12
TBarCode111.font = fontBarcode
' change text index to (auxiliary) text area #1
TBarCode111.ActiveTextIndex = 1
' now adjust all settings for text area #1
TBarCode111.DisplayText = "My Label Text"
TBarCode111.TextPositionLeft = 0
TBarCode111.TextPositionTop = 0
TBarCode111.TextClipping = False
TBarCode111.PrintDataText = True
Dim fontLabel As New stdole.StdFont
fontLabel.Name = "Arial"
fontLabel.Size = 10
fontLabel.Weight = 800
TBarCode111.font = fontLabel
' reset text index back to bar code text
TBarCode111.ActiveTextIndex = 0
If this occurs during printing, this effect is caused by the printer driver. Along other printer models this effect happens with Toshiba TEC and DataMax printers.
If this occurs during bitmap generation, this effect is caused by the screen driver.
The solution is to change the draw mode of TBarCode:
Set the ActiveX Property DrawMode to Compatible.
Create a mail merge document with a data source. Insert a bar code into the document. Use the button "Insert Merge Field" to insert a mail merge field into the barcode.
For inserting multiple barcodes you can use the Serial Letter function in the TBarCode Word Toolbar. This function allows you to replace marked text with barcodes after the mail merge document was created. For more information about the TBarCode Toolbar and its functionality, please refer to the TBarCode OCX User Manual.
If you encounter speed problems you may alternatively use the Word Mail Merge Macro which can be downloaded in the TBarCode Download Area. The required steps for using the macro are explained in the enclosed text document.
The common method to print bar codes from within Microsoft® Access™ is by using a report. The TBarCode Object need only be inserted once at the report definition. Therefore you need a table (query) which servers as data source for the report and a data field, that specifies the content of the bar code.
Open a new report in design view. If you need a bar code for each record, then insert the ActiveX® Control into the detail area and position it at the desired place.
Thereto you choose Insert - ActiveX Control in the main menu. You will see a list of all available elements, from which you select TBarCode.
The control will be inserted in the detail area. The detail area will be printed once for each record set in the table (or query).
In design mode right-click the TBarCode - ActiveX® Control. You will see a menu where you select Properties.
In the field Control Source located in the sub menu data you can define the content of the control. That means you can select the table or query field which is encoded as bar code.
Depending on the printer driver the first bar in the symbol may be truncated (when printing through Microsoft Access). Also the symbol may be shifted inside of the bounding box.
If this occurs you can work around this problem by specifying an additional quiet zone around the bar code. This can be done in the property tab Appearance - Quietzone - Adjust.
It isn't possible to add TBarCode directly into a report, but you can create a barcode image “on the fly” and load it to a Picture Box. Follow the instructions below to see how embedding of TBarCode into Crystal Reports 8 works.
Embedding via Picture Box (VB6 sample)
In a form (named “Form1”) embed a TBarCode Control (named “tbc”) and a Picture Box (named “TmpPicture1”). Then add the function code below to the form. It creates a bar code image „on the fly“ and uses the PictureBox as drawing surface.
Public Function BarcodeGenerate(Id As String, Width As Long, Height As Long) As PictureBox
Dim nSizing, cm
tbc.Text = Id
cm = tbc.CountModules
TmpPicture1.ScaleMode = vbPixels
Form1.ScaleMode = vbPixels
Width = ScaleX(Width, vbTwips, vbPixels)
Height = ScaleY(Height, vbTwips, vbPixels)
nSizing = Int(Width / cm)
If nSizing < 1 Then nSizing = 1
TmpPicture1.Width = cm * nSizing
TmpPicture1.Height = Height
tbc.BCDraw TmpPicture1.hDC, 0, 0, TmpPicture1.Width, TmpPicture1.Height
Set BarcodeGenerate = TmpPicture1
In the Report event code (Format event) call the barcode generator function and assign the newly created barcode image to the Picture Box (named Picture1) in the report.
Private Sub Section3_Format(ByVal pFormattingInfo As Object)
'create the bar code for each record set
Dim data As String
data = Field1.Value
Set Me.Picture1.FormattedPicture =
Form1.BarcodeGenerate(data, Me.Picture1.Width, Me.Picture1.Height).Image
Embedding via Bitmap File (VB6 sample)
In a form (named “Form1”) embed a TBarCode Control (named “TBarCode”) and adjust the bar code type and all other settings as desired. This bar code object will be used during report runtime for bar code creation “on the fly”.
In the Report event code (Format event) create a dynamic bar code image in a temp folder and load this image to the Picture Box (named pictBarCode) in the report.
Private Sub Section3_Format(ByVal pFormattingInfo As Object)
' Simulate data binding
' by saving the bar code as bitmap with data from fldArticleID
' then reload it to a picture control
On Error Resume Next
' here we use hard coded temp path (must exist!)
path = "c:\temp\CR8_" & Me.fldArticleID.Value & ".bmp"
' reference the TBarCode Control in the Form1
Form1.TBarCode.Text = Me.fldArticleID.Value
Form1.TBarCode.PrintDataText = False
nWidth = Form1.TBarCode.CountModules * 3 'adapt width to number of graphical modules
Form1.TBarCode.SaveImage path, eIMBmp, nWidth, 100, 96, 96
If you don’t want to add a bar code control on the form you can create an instance of TBarCode also in memory and apply the settings programmatically.
You may get this runtime error if you didn't specify the full Prog-ID with CreateObject. Reference the TBarCode Type Lib in the project settings, and use the following commands to create a TBarCode object in VB (sample for TBarCode OCX V9):
Dim objTB As TBarCode9
Set objTB = CreateObject("TBarCode9.TBarCode9")
For further trouble shooting read Microsoft Knowledge Base Article - 244264
* Fine tuning of the bar width gives you better barcode quality results
Licensing happens during startup of the document which contains the ActiveX® Control.
Private Sub Workbook_Open()
Dim tbc As TBarCode11
Set tbc = CreateObject ("TBarCode11.TBarCode11")
tbc.LicenseMe "Mem:Licensee", eLicKindDeveloper, 1, "Key", TBarCode11Lib.eLicProd1D
Set tbc = Nothing
We recommend to password protect your VBA code in the project property window.
Below we show you how to license at startup of the database (sample for TBarCode OCX V11). Create a new Module with the following function (in Microsoft VBA Editor):
Public Function LicenseTBarCode()
Dim TB As New TBarCode11
TB.LicenseMe "Mem:Licensee", eLicKindDeveloper, 1, "Key", TBarCode11Lib.eLicProd1D
Set TB = Nothing
Create a new Macro named "Autoexec" with the following settings:
Action = RunCode
Functionname = License TBarCode()
The first approach uses a pre-set (custom) module width, sets the DPI and then calculates the total width of the symbol. The principle works for other printers, too.
The OCX method BCWidthHdc2 can be used to calculate the width of the bar code. If a module width has been set, use a dummy value for the [in] nWidth. If you calculate the width in unit=mm, convert it to Pixels afterwards for the SaveImage function. There is a similar function for the height – but the height needs calculation only for 2D bar codes.
Note: When you set a module width of exactly 0.3125mms or 0.0123 inches you are 100% in the printing raster of a 812.8 dpi machine. This is one of the recommended values. If you have enabled the opt resolution flag, the module width is changed to the next (lower) pixel boundaries in the printing raster and therefore “optimized”. Dpi must be set accordingly for this optimization.
Dim widthPx As Long
Dim heightPx As Long
Dim heightMM As Double
TBarCode111.Dpi = 812.8
TBarCode111.SizeMode = eSizeMode_CustomModuleWidth
TBarCode111.ModuleWidth = "312.5"
heightPx = 500
heightMM = heightPx * (25.4 / TBarCode111.Dpi)
widthPx = TBarCode111.BCWidthHdc2(0, 1000, heightMM * 1000, eMUPixel)
TBarCode111.SaveImage "c:\temp\test2.tif", eIMTif, widthPx, heightPx, 812.8, 812.8
With the second, more simple approach, the module width is not set explicitly. Instead the scaling factor passed on to the GetOptimalBitmapSize (OCX API) function controls the module width. If you use it, don’t set a custom module width and/or optimal resolution in the API. The function performs some additional enlarging (based upon dpi), which should be turned off with DPI = 0 while calling the function.
Because we know the DPI of the printer we also know the pixel (printer dot) dimension. We also know that one module should be always an integer multiple of one printer dot. We have to consider that typically one module should not be smaller than 0.190mms at all (but depends on bar code type). Then all you need to do is to pass on the ScaleX = ModuleWidth/PixelSize factor (= 8, 9, 10,…) to the GetOptimalBitmapSize function and use the returned values for SaveImage.
Module width: The 0.0123 inch optimum are 10 Pixels at 812.8 dpi. So the scaling factor would be 10 for the GetOptimalBitmapSize function.
Dim width As Long
Dim height As Long
width = 1
height = 500
TBarCode111.Dpi = 0 'turn off additional dpi/96 scaling
TBarCode111.GetOptimalBitmapSize 10, 10, width, height
TBarCode111.SaveImage "c:\temp\test.tif", eIMTif, width, height, 812.8, 812.8
Please use this code snippet as starting point:
' set barcode type = PDF417
Me.bc.Object.BarCode = 55
' set size mode to CustomModuleWidth
Me.bc.Object.SizeMode = 1
' now adjust module width to 0.254 mms
Me.bc.Object.ModuleWidth = "254"
' set number of data columns
' optional parameter, but required to get constant width
Me.bc.Object.PDF417.Columns = 5
' adjust row height to 3 times of the module width
Me.bc.Object.PDF417.RowHeight = 254 * 3
Me.bc.Object.Text = "my data"
Public Function CalculateMod10(data As String) As String
Dim tbc As TBarCode11Lib.TBarCode11
Set tbc = CreateObject("TBarCode11.TBarCode11")
Dim cd As String
cd = tbc.CalculateCheckdigits(eCDMod10, data)
CalculateMod10 = Left(cd, 1)
Dim barcodeShape As InlineShape
' switch to design mode (optional)
' Insert bar code object at actual position in document
Set barcodeShape = Selection.InlineShapes.AddOLEControl(ClassType:="TBarCode10.TBarCode10.1")
' change size
barcodeShape.Width = 200
barcodeShape.Height = 100
' adjust bar code properties programmatically
barcodeShape.OLEFormat.Object.Barcode = 20 ' 20 = Code-128
barcodeShape.OLEFormat.Object.Text = "Hello"
Barcode.Barcode = eBC_PDF417
Barcode.Text = "My Data... "
' the following settings produce a barcode 82,296 mm wide
' if your barcode should have a constant width, set the data columns
' as shown below (increase/decrease to make wider/smaller symbol)
Barcode.PDF417.Columns = 15
Dim X, Y
' define ratio of module width (small bar width) to row height
X = 1
Y = 1 ' keeps default ratio, which is 1:3
'Y = 3 / 2 ' creates 1:5 ratio
Dpi = 300 ' 300 dpi printer
Scaling = 3 ' 1 Module (smallest bar) = 3 Pixels = 0.254mm
Cols = Barcode.Get2DXCols()
Rows = Barcode.Get2DXRows()
XSize = Int(X * Cols)
YSize = Int(Y * Rows)
' scale with DPI enlarging factor
XSize = XSize * Scaling
YSize = YSize * Scaling
' Save barcode as bitmap
Barcode.SaveImage "c:\temp\barcode.bmp", eIMBmp, XSize, YSize, Dpi, Dpi
Since I've added TBarCode to my Word 2003 document, I cannot protect it.
Solution: You have to leave design mode to be able to protect the document. If you insert a Barcode Control, the document is switched to design mode. Through the Control Toolbox you can leave design mode, then you are able to protect the document.
For further information visit Microsoft Office Online.
Please use this code snippet as starting point.
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Dim obj As New TBarCode10
Dim nWidth As Long
Dim nHeight As Long
Dim dc As Long
.BarCode = eBC_DataMatrix
.DataMatrix.Size = eDMSz_32x32
.Text = myData
.QuietZoneUnit = eMUModules
.QuietZoneBottom = 2
.QuietZoneLeft = 2
.QuietZoneTop = 2
.QuietZoneRight = 2
.ModuleWidth = "508"
.SizeMode = eSizeMode_CustomModuleWidth
.Dpi = 1440 / Screen.TwipsPerPixelX ' screen resolution in dpi
dc = CreateCompatibleDC(0) ' screen DC
nWidth = .BCWidthHdc(dc, 96, 96, eMUPixel) + 0.9999 ' module width should be set
nHeight = .BCHeightHdc(dc, 96, 96, eMUPixel) + 0.9999 ' module width should be set
.CopyToClipboardEx dc, nWidth, nHeight, ""
You change the content of linked cells or the barcode control, then print directly from within VBA. But you see that the bar code controls still contain old values. The reason is that Excel does not send a redraw command to the ActiveX Controls before printing (if done from within VBA). This is a bug in Excel.
There is a workaround to force a redraw of the objects, you need to address each Barcode ActiveX Control programmatically in VBA and change its size before printing. Then it is redrawn by Excel.
'redraw a single barcode object by adressing it through its instance name
origValue = TBarCode101.Width
TBarCode101.Width = origValue + 1
TBarCode101.Width = origValue
' redraw all ActiveX Controls on the current sheet
Dim myShape As shape
Dim counter As Integer
Dim origWidth As Single
For counter = 1 To ActiveSheet.Shapes.Count
Set myShape = ActiveSheet.Shapes(counter)
If (myShape.Type = msoOLEControlObject) Then
' resize => force redraw
origWidth = myShape.Width
myShape.Width = origWidth + 1
myShape.Width = origWidth
VCard is not a bar code itself, it is a special file format, which can be used to store data in a bar code (e.g. into QR Code). A detailed description of the VCard format can be found here:
Wikipedia - VCard Specification
Just bring your data into the given format and you'll be able to read the barcode with your mobile phone and recognize the data as contact information.
With our Barcode Studio we offer an Assistant to create VCard barcodes the easy way.
FNC1 is used as separator character for variable length data fields in the application identifier standard. It can be encoded with \F. Sample: The data field for the batch or lot number varies in length (up to 20 characters) and needs a termination (FNC1).
In this example we generate a GS1-128 barcode with 2 Application Identifier. The batch or lot number (AI =10, variable length so it needs FNC1) and the best before date (AI=15).
' set the barcode type = GS1-128 (EAN/UCC 128)
TBarCode101.BarCode = eBC_GS1_128
' enable Translate Escape Sequences
TBarCode101.EscapeSequences = True
' set the data to be encoded
TBarCode101.Text = "10222333\F15100701"
We use the same sample data like before. To add the functional character FNC1 to your barcode data follow the steps:
The default bar code type can be set through a file named barcode.ini.
The barcode.ini file must be located in the installation path of TBarCode and has to contain the following lines:
The index (in this example 8) for the required barcode type can be found in the barcode reference, chapter 6.
If you have not installed the 64 Bit Office Version, Microsoft Word/Excel/Access are running in 32-Bit compatibility (WOW64) mode. They are no full 64-Bit applications, but they can be still operated under Windows 7 x64.
TBarCode V10 and earlier: For 32 Bit Office you need to install the "normal" TBarCode OCX 32 Bit Edition (remove your TBarCode x64 edition if you have installed it).
TBarCode V11 and later: Install the TBarCode SDK x64 edition, which contains both versions, the 32 Bit and the 64 Bit (so you can use all Office versions).
Then you should see the TBarCode Control in the Legacy Tools selection.
QR Code was originally developed for Japanese bar code applications. The encodable character set consists of:
SHIFT JIS / CP932 contains both of these character sets and is the Multi Byte character set used by TBarCode for QR-Code. For further information see Windows Codepage 932.
The new ISO/IEC 18004:2006 standard for “QR-Code 2005” defines ISO-8859-1 (Latin-1) as default character set. So the “old” QR-Code uses Shift-JIS and the new QR-Code 2005 uses Latin-1 as default character set.
Encoding the full Latin-1 character set with QR-Code 1997/2000 can lead to problems – for details see Barcode Reference (section Encoding Special Latin-1 Characters).
See also FAQ: Encoding Kanji Characters in QR Code Compaction Mode.
QR Code was developed in Japan by Denso (for Toyota) and uses ASCII + Japanese (Kanji) as default character set. So by default the bar code reader tries to decode data in a QR Code with the JIS X 0208 + JIS X 0201 character set. It does not look for UTF-8 or other character sets (except you use the ECI protocol but this is rarely supported by readers)!
Important note for Microsoft Office users: After performing the Microsoft security update from June 9, 2010 barcode objects embedded in Word and Excel documents (TBarCode OCX) may lose their settings:
Security Update for Microsoft Office Word 2003 (KB982134) + Word 2007 (KB982135)
Security Update for Microsoft Office Word 2003 (KB2251399) + Word 2007 (KB2251419)
TBarCode OCX loses barcode settings when opening or saving documents in Word 97-2003 format. Note: The problem does not appear with Word 2007 format (*.docx).
Security Update for Microsoft Office Excel 2003 (KB982133) + Excel 2007 (KB982308)
After opening or saving Excel files in Excel 97-2003 format, TBarCode OCX can no longer be edited or programmed. Note: The problem does not appear with Excel 2007 format (*.xlsx).
Microsoft Access is not affected by this problem, further Office 2003 or 2007 programs can be impaired (details see MS 10-036).
As intermediate workaround (to gain time in production critical applications) you can uninstall the above listed security updates (see KB numbers) at your own risk.
In case of update questions or for technical information please contact us.
When reopening a project with an embedded TBarCode element (on a form), Visual Basic crashes or shows an error message. This problem is caused by a problem in the Active Template Library (details here).
Use the following workaround (VB5, VB6) to solve this issue:
During runtime in the Form Load event set the Enabled property to True (programmatically)
Private Sub Form_Load()
TBarCode111.Enabled = True