胡乱写写,依然是vba控制单元格粗细呈现code128b码,很遗憾没能实现code128 auto,占地面积会大点。(仅支持WPS pro2016)- '计算CODE128校验位
- Private Function Get_CODE128_CheckSum(rawString As String, idx As Object)
-
- Dim s As Integer
- s = 0
-
- For i = 1 To Len(rawString)
- s = s + idx(Mid$(rawString, i, 1)) * i
- Next
-
- '函数返回值
- Get_CODE128_CheckSum = (s + idx("StartB")) Mod 103
-
- End Function
- '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-
- '填充CODE128码区边界
- Private Function Fill_CODE128_Bounds(ByVal x As Integer, ByVal y As Integer)
-
- '初始化码区尺寸、背景色
- For i = 1 To 300
- Cells(y, x + i).ColumnWidth = 0.2
- Cells(y, x + i).RowHeight = 100
- Cells(y, x + i).Interior.ColorIndex = 0
- Next
- End Function
- '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-
-
- '填充CODE128条码线
- Private Function Fill_CODE128_Lines(ByVal x As Integer, ByVal y As Integer, ByVal m As Integer, rawString As String)
-
- Dim pOffSet As Integer
- pOffSet = 0
-
- For i = 1 To m
-
- For j = 0 To (Val(Mid$(rawString, i, 1)) - 1)
- Cells(y, x + pOffSet + j).Interior.ColorIndex = (i Mod 2)
- Next j
-
- pOffSet = pOffSet + j
- Next i
-
- '函数返回值
- Fill_CODE128_Lines = 0
-
- End Function
- '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-
- '主过程
- Private Sub worksheet_change(ByVal Target As Range)
-
- 'Append_EAN_Checksum焦点不在目标区域则退出
- If Target.Address <> "$A$1" Then
- Exit Sub
- End If
-
- '创建dic字典
- Dim dic As Object
- Set dic = CreateObject("Scripting.Dictionary")
-
- '初始化字典主键
- dic.Add " ", "212222"
- dic.Add "!", "222122"
- dic.Add """", "222221"
- dic.Add "#", "121223"
- dic.Add "$", "121322"
- dic.Add "%", "131222"
- dic.Add "&", "122213"
- dic.Add "'", "122312"
- dic.Add "(", "132212"
- dic.Add ")", "221213"
- dic.Add "*", "221312"
- dic.Add "+", "231212"
- dic.Add ",", "112232"
- dic.Add "-", "122132"
- dic.Add ".", "122231"
- dic.Add "/", "113222"
- dic.Add "0", "123122"
- dic.Add "1", "123221"
- dic.Add "2", "223211"
- dic.Add "3", "221132"
- dic.Add "4", "221231"
- dic.Add "5", "213212"
- dic.Add "6", "223112"
- dic.Add "7", "312131"
- dic.Add "8", "311222"
- dic.Add "9", "321122"
- dic.Add ":", "321221"
- dic.Add ";", "312212"
- dic.Add "<", "322112"
- dic.Add "=", "322211"
- dic.Add ">", "212123"
- dic.Add "?", "212321"
- dic.Add "@", "232121"
- dic.Add "A", "111323"
- dic.Add "B", "131123"
- dic.Add "C", "131321"
- dic.Add "D", "112313"
- dic.Add "E", "132113"
- dic.Add "F", "132311"
- dic.Add "G", "211313"
- dic.Add "H", "231113"
- dic.Add "I", "231311"
- dic.Add "J", "112133"
- dic.Add "K", "112331"
- dic.Add "L", "132131"
- dic.Add "M", "113123"
- dic.Add "N", "113321"
- dic.Add "O", "133121"
- dic.Add "P", "313121"
- dic.Add "Q", "211331"
- dic.Add "R", "231131"
- dic.Add "S", "213113"
- dic.Add "T", "213311"
- dic.Add "U", "213131"
- dic.Add "V", "311123"
- dic.Add "W", "311321"
- dic.Add "X", "331121"
- dic.Add "Y", "312113"
- dic.Add "Z", "312311"
- dic.Add "[", "332111"
- dic.Add "\", "314111"
- dic.Add "]", "221411"
- dic.Add "^", "431111"
- dic.Add "_", "111224"
- dic.Add "`", "111422"
- dic.Add "a", "121124"
- dic.Add "b", "121421"
- dic.Add "c", "141122"
- dic.Add "d", "141221"
- dic.Add "e", "112214"
- dic.Add "f", "112412"
- dic.Add "g", "122114"
- dic.Add "h", "122411"
- dic.Add "i", "142112"
- dic.Add "j", "142211"
- dic.Add "k", "241211"
- dic.Add "l", "221114"
- dic.Add "m", "413111"
- dic.Add "n", "241112"
- dic.Add "o", "134111"
- dic.Add "p", "111242"
- dic.Add "q", "121142"
- dic.Add "r", "121241"
- dic.Add "s", "114212"
- dic.Add "t", "124112"
- dic.Add "u", "124211"
- dic.Add "v", "411212"
- dic.Add "w", "421112"
- dic.Add "x", "421211"
- dic.Add "y", "212141"
- dic.Add "z", "214121"
- dic.Add "{", "412121"
- dic.Add "|", "111143"
- dic.Add "}", "111341"
- dic.Add "~", "131141"
- dic.Add "DEL", "114113"
- dic.Add "FNC3", "114311"
- dic.Add "FNC2", "411113"
- dic.Add "SHIFT", "411311"
- dic.Add "CODEC", "113141"
- dic.Add "FNC4", "114131"
- dic.Add "CODEA", "311141"
- dic.Add "FNC1", "411131"
- dic.Add "StartA", "211412"
- dic.Add "StartB", "211214"
- dic.Add "StartC", "211232"
- dic.Add "Stop", "2331112"
-
- '创建dic字典索引idx
- Dim idx As Object
- Set idx = CreateObject("Scripting.Dictionary")
-
- '初始化字典主、索引
- idx.Add " ", "0"
- idx.Add "!", "1"
- idx.Add """", "2"
- idx.Add "#", "3"
- idx.Add "$", "4"
- idx.Add "%", "5"
- idx.Add "&", "6"
- idx.Add "'", "7"
- idx.Add "(", "8"
- idx.Add ")", "9"
- idx.Add "*", "10"
- idx.Add "+", "11"
- idx.Add ",", "12"
- idx.Add "-", "13"
- idx.Add ".", "14"
- idx.Add "/", "15"
- idx.Add "0", "16"
- idx.Add "1", "17"
- idx.Add "2", "18"
- idx.Add "3", "19"
- idx.Add "4", "20"
- idx.Add "5", "21"
- idx.Add "6", "22"
- idx.Add "7", "23"
- idx.Add "8", "24"
- idx.Add "9", "25"
- idx.Add ":", "26"
- idx.Add ";", "27"
- idx.Add "<", "28"
- idx.Add "=", "29"
- idx.Add ">", "30"
- idx.Add "?", "31"
- idx.Add "@", "32"
- idx.Add "A", "33"
- idx.Add "B", "34"
- idx.Add "C", "35"
- idx.Add "D", "36"
- idx.Add "E", "37"
- idx.Add "F", "38"
- idx.Add "G", "39"
- idx.Add "H", "40"
- idx.Add "I", "41"
- idx.Add "J", "42"
- idx.Add "K", "43"
- idx.Add "L", "44"
- idx.Add "M", "45"
- idx.Add "N", "46"
- idx.Add "O", "47"
- idx.Add "P", "48"
- idx.Add "Q", "49"
- idx.Add "R", "50"
- idx.Add "S", "51"
- idx.Add "T", "52"
- idx.Add "U", "53"
- idx.Add "V", "54"
- idx.Add "W", "55"
- idx.Add "X", "56"
- idx.Add "Y", "57"
- idx.Add "Z", "58"
- idx.Add "[", "59"
- idx.Add "\", "60"
- idx.Add "]", "61"
- idx.Add "^", "62"
- idx.Add "_", "63"
- idx.Add "`", "64"
- idx.Add "a", "65"
- idx.Add "b", "66"
- idx.Add "c", "67"
- idx.Add "d", "68"
- idx.Add "e", "69"
- idx.Add "f", "70"
- idx.Add "g", "71"
- idx.Add "h", "72"
- idx.Add "i", "73"
- idx.Add "j", "74"
- idx.Add "k", "75"
- idx.Add "l", "76"
- idx.Add "m", "77"
- idx.Add "n", "78"
- idx.Add "o", "79"
- idx.Add "p", "80"
- idx.Add "q", "81"
- idx.Add "r", "82"
- idx.Add "s", "83"
- idx.Add "t", "84"
- idx.Add "u", "85"
- idx.Add "v", "86"
- idx.Add "w", "87"
- idx.Add "x", "88"
- idx.Add "y", "89"
- idx.Add "z", "90"
- idx.Add "{", "91"
- idx.Add "|", "92"
- idx.Add "}", "93"
- idx.Add "~", "94"
- idx.Add "DEL", "95"
- idx.Add "FNC3", "96"
- idx.Add "FNC2", "97"
- idx.Add "SHIFT", "98"
- idx.Add "CODEC", "99"
- idx.Add "FNC4", "100"
- idx.Add "CODEA", "101"
- idx.Add "FNC1", "102"
- idx.Add "StartA", "103"
- idx.Add "StartB", "104"
- idx.Add "StartC", "105"
- idx.Add "Stop", "106"
-
- '输入字符串
- Dim iStr As String
- iStr = Range("$A$1").Text
-
- '要绘制的坐标区域
- Dim x, y As Integer
- x = 2
- y = 3
-
- '调用CODE128绘线函数
- Dim ret, checkNum As Integer
-
- '初始化码区边界
- ret = Fill_CODE128_Bounds(x, y)
-
- '绘制开始符
- ret = Fill_CODE128_Lines(x, y, 6, dic("StartB"))
-
- '绘制数据位
- For i = 1 To Len(iStr)
- ret = Fill_CODE128_Lines(x + 11 * (i - 1) + 11, y, 6, dic(Mid$(iStr, i, 1)))
- Next
-
- '绘制校验符
- checkNum = Get_CODE128_CheckSum(iStr, idx)
- ret = Fill_CODE128_Lines(x + Len(iStr) * 11 + 11, y, 6, dic(Chr(checkNum + 32)))
-
- '绘制结束符
- ret = Fill_CODE128_Lines(x + Len(iStr) * 11 + 11 + 11, y, 7, dic("Stop"))
-
- End Sub
- '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
复制代码
|