Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
VBA: подобрать расстояние между этикетками
 
Огромное всем спасибо за помощь и за рекомендации!  
Фронт работы понятен. Буду формировать этикетки на основании строк и столбцов, затем постараюсь реализовать через dpl.
VBA: подобрать расстояние между этикетками
 
Уважаемые DenSyo, БМВ огромное Вам спасибо за отклик и помощь.
Цитата
БМВ написал: Это обычны просто принтер или специализированный?
Касательно принтера - это обычный термо принтер для печати этикеток ( citizen cl-7000). Разрыв страницы я могу выставить, только в любом случае объект label(надпись) может выходить за границы разрыва т.к. объект не привязан к ячейке. Координаты построения объекта Label в свою очередь создаются параметрами left = постоянному значению, и Top = dTop, который равен 115, т.е. dTop обозначает, что через 115 points нужно начинать рисовать снова объект Label.
Цитата
БМВ написал: В результате работы кода у вас образуется куча объектов на листе, что не полезно. Какой в этом смысл, если можно подготовить шаблон этикетки обычными строками и столбцами
Сначала я создал класс модуля, в котором все Label создавались как object, при этом вставка большого количества объектов занимала очень много времени. Потом класс был переписан на использование объектов типа Shape и вставка объектов осуществляется моментально.
Почему я начал реализовывать через объекты label, а не через строки и столбцы? Хотел сделать универсальную программу которая на основании созданного шаблона будет создавать любые этикетки, т.е. добавлять и размещать на листе объекты label и затем программа получает координаты всех объектов и далее строит их, но сейчас понимаю что это проще сделать через строки и столбцы.
Цитата
БМВ написал: относительно одной ячейки вставить контрл с штрихкодом
Не совсем понимаю, что имеется ввиду "относительно одной ячейки" здесь? Ведь штрихкод это activex элемент, координаты (left и Top) которого задаются в point'ах. Боюсь что он будет у меня смещаться вниз/вверх на каждой этикетке. Можно ли как нибудь зафиксировать объект в ячейке.
Цитата
БМВ написал: штрихкодовые принтера достаточно интелектуальны и имеют все для того чтоб генерить штрихкод самостоятельно, но для этого этикетку на до оформит на их языке.
Спасибо за информацию, я не знал об этом. Принтер работает c языком DPL. Уже нашел мануал по dpl для программирования по части штрихкодов. Интересная тема. Буду над этим работать. Но сначала думаю, переписать класс модуля на основе строк и столбцов без использования объектов.
VBA: подобрать расстояние между этикетками
 
Добрый день! Написал макрос, который формирует этикетки с штрихкодом на основании данных из базы данных.
Текст записывается в объекты типа "Label" ( надпись) класса "shape". Штрихкод создается объектом Barcode.Ctrl.1 класса object.(activeX)Принцип работы следующий:
1. Запрос к БД
2. Полученные данные записываются на лист "RecordSet"
3. Созданный мною модуль класса "Classlabel_1" генерирует одну этикетку. Цикл обрабатывает класс столько раз, сколько нужно этикеток. Этикеток может быть от 1 до 500. Все этикетки уникальные. Размер этикетки составляет 58 мм х 40 мм. Расстояние между первой этикеткой и последующей задается переменной dTop (код создания этикетки ниже) и далее печатается на принтер этикеток:
Код
Sub CreateLabels(lRows)
Dim i As Integer, x As Integer
Dim dTop As Double
dTop = 0
Dim lab As New ClassLabel_1
Dim arrdata() As Variant
arrdata() = Sh1.Range(Sh1.Cells(2, 10), Sh1.Cells(lRows, 15))

For i = 1 To UBound(arrdata, 1) Step 1
With lab
            .stLabArticle = arrdata(i, 3)
            .stLabBarcode = arrdata(i, 6)
            .stLabName = arrdata(i, 1)
            lab.createLabel (dTop)
        End With
dTop = dTop + 115
Next i
Erase arrdata()
Приложенный файл возможно не запуститься, т.к. там нужна спец. библиотека которая формирует activeX элемент - штрихкод.

Проблема в следующем.
На моем мониторе параметр dTop я задал как 115, но на других компьютерах нужно этот параметр подбирать. Этот параметр служит для расположения в зоне печати одной этикетки. Если создается их n-количество штук, то текст сползает вниз или вверх тем самым заходя на другую этикетку.
Можно это как то решить? Может я иду неправильным путем и через объекты "Label" я не смогу решить задачу. В целом все работает, только вот с определением границ печати проблема.

Как правильно лучше решить эту проблему?
ADODB.Stream ошибка argument not optional
 
Андрей VG спасибо Вам огромное за помощь и извините за невнимательность.  
ADODB.Stream ошибка argument not optional
 

Добрый день! Пишу процедуру смены кодировки данных из базы данных (БД). Идея следующая, вытаскиваю данные из БД и кладу их в массив. Затем запускаю процедуру, в которую передаю аргументы, делаю замену данных в массиве c новой кодировкой и затем отображаю их на листе.  При компиляции возникает ошибка Argument not optional на строке .WriteText = strArr(iR, iC). Аргументы все заданы при вызове, массив заполнен данными. Если эту строку убрать, то все работает.
С чем это может быть связано?
Код
Sub ConvertToCyrillic(strArr() As Variant, Sh As Worksheet, iRow As Integer, iCol As Integer)

'variables declaration
Dim TextStream As New ADODB.Stream
Dim iR As Integer, iC As Integer


' to specify the properties of the object
With TextStream
        .Type = 2 'text data
        .Mode = 3 'read/write
End With

' to start to convert of the Charset
For iC = 1 To UBound(strArr, 2) Step 1
    For iR = 1 To UBound(strArr, 1) Step 1
        With TextStream
        .Charset = "ISO-8859-1"
        .Open
        .WriteText = strArr(iR, iC)
        .Position = 0
        .Charset = "Windows-1251"
         strArr(iR, iC) = .ReadText
        .Close
        End With
    Next iR
Next iC
' to delete the object from memory
Set TextStream = Nothing
' to assign the array to range
Sh.Range(Cells(iRow, iCol), Cells(UBound(strArr, 1), UBound(strArr, 2))) = strArr

Erase strArr
End Sub

Процедура выборки данных и запуск процедуры смены кодировки.

Код
 SUB connection_db 
Set CS = CreateObject("ADODB.Connection") 
Set RS = CreateObject("ADODB.Recordset") 
Set CMD = CreateObject("ADODB.Command")  

'ISeries connection String 
ConnectString = "Driver={ISeries Access ODBC Driver};System = 00.00.00.000;Uid=" & strLogin & ";Pwd=" & strPassword & ";Library=XXXX;CCSID=1251" 
CS.Open (ConnectString)  

'select from db 
sqlstring = " SELECT * From ABC "
  
CMD.ActiveConnection = CS 
CMD.CommandText = sqlstring 
Set RS = CMD.Execute  

'RS.Open sqlstring,CS  

Dim A1() As Variant 
A1 = RS.GetRows()   

Call ConvertToCyrillic(A1, TST, 2, 1)  

RS.Close 
CS.Close 
End Sub 

Заранее благодарю за Вашу помощь!

Изменено: Dionysus - 11.05.2018 11:41:05
Страницы: 1
Наверх