Если с примером, то наверно это будет совсем другая тема. Выложу сюда и изменю постановку попроса, если что не так, надеюсь модераторы перенесут куда надо или изменят имя темы.
нужно таблицу в пункте 4.1 заполнить из таблицы "Таб_ФП" колонки "фио наказанного", "Принятые меры" в зависимости от выбранного месяца и года в строке 5
Добрый день. Суть вопроса: есть таблица с данными условно за год. Подскажите можно ли сделать именованный диапазон на определенный месяц при условии, что месяц (и год) будет задаваться отдельно в ячейке (выпадающем списке).
т.е. условно: А1 - выпадающий список месяцев (май), В1 - год(2019). в именованный диапазон попадают все данные за период с 01.05.2019 по 31.05.2019
Добрый день. Есть ссылка, по которой вставляются данные в таблицу: Нужно обновить эти данные, но с другими параметрами (изменить диапазон даты, дата в ячейках условно А1, В1). Подскажите как реализовать, а то приходится лезть менять источник
Doober, спасибо, что отозвались, конечно Ваш вариант имеет место на жизнь, но не всегда есть интернет для доступа к сайту. Я только, что запустил свой вариант.
Подкрутил так. Все равно не пляшет результат. Подолкните хотябы в нужном напрвлении.
Код
Function CRC_16_RTU(OutputString, h12, h13 As String) As String ' функция подсчета контрольной суммы сообщения RTU
Dim Polenom, crc As Long
Dim i As Integer, j As Integer, Length As Integer
Dim Bit As Boolean
Dim Temp As Byte
Length = Len(OutputString)
crc = 65535
Polenom = 8005 ''&H1F45 ''40961
For i = 1 To Length
Temp = "&H" & Mid(OutputString, i, 1)
' Temp = Asc(Mid(OutputString, i, 1))
crc = crc Xor Temp
For j = 1 To 8
Bit = crc And 1
crc = crc \ 2
If Bit = True Then crc = crc Xor Polenom
Next j
Next i
' CRC_16 = Chr(CRC Mod 256) & Chr(CRC \ 256)
CRC_16_RTU = Hex(crc Mod 256) & Hex(crc \ 256)
If Len(Hex(crc Mod 256)) = 1 Then h12 = 0 & Hex(crc Mod 256) Else h12 = Hex(crc Mod 256)
If Len(Hex(crc \ 256)) = 1 Then h13 = 0 & Hex(crc \ 256) Else h13 = Hex(crc \ 256)
End Function
Есть функция которая вычисляет CRC-16 но результат не совпадает. Для данного значения "0d84580000000001010800" в hex должно получится AEB1. Проверял на сайте калькулятор crc, совпадает. Помогите подправить.
Код
Function CRC_16_RTU(OutputString As String) As String
Dim Generator, CRC As Long
Dim I As Integer, J As Integer, Length As Integer
Dim Bit As Boolean
Dim Temp As Byte
Length = Len(OutputString)
CRC = 65535
Generator = 8005 '40961
For I = 1 To Length
Temp = Asc(Mid(OutputString, I, 1))
CRC = CRC Xor Temp
For J = 1 To 8
Bit = CRC And 1
CRC = CRC \ 2
If Bit = True Then
CRC = CRC Xor Generator
End If
Next J
Next I
' CRC_16 = Chr(CRC Mod 256) & Chr(CRC \ 256)
CRC_16_RTU = Hex(CRC Mod 256) & Hex(CRC \ 256)
End Function
Добрый день. Нужны макросы а точнее 2-е функции, одна для расчета а вторая для проверки CRC кода. Описание во вложении.
Скрытый текст
Контроль циклическим кодом применяется для повышения надежности передачи данных. Смысл контроля заключается в следующем. Запрос подвергается шифровке циклическим кодом. Полученный результат добавляется в конец запроса, и весь пакет отправляется подчиненному устройству. Подчиненное устройство выполняет те же действия над байтами запроса и сравнивает полученный результат с CRC принятого пакета, и в случае положительного результата выполняет требуемое действие. Затем оно формирует ответное сообщение, подвергает его той же процедуре шифровки, “ прицепляет ” полученный код в конец пакета и посылает его обратно главному устройству. Главное устройство выполняет ту же процедуру дешифровки, проверяя правильность принятого пакета. Вероятность обнаружения ошибки в одном разряде байта пакета равна 99,998%. В качестве примера рассмотрим вычисление CRC в виде функции написанной на языке С . Все возможные значения CRC помещены в два массива. Один массив содержит все возможные значения для старшего байта CRC, а второй – для младшего.
Функции в качестве параметров принимает указатель на сообщение используемое для формирования CRC (msg) и размер сообщения в байтах (len), а возвращает 16-ти битное значение CRC.
Добрый день. Нужна помощь. Необходимо "опросить" (получить данные) оборудование, отправив (команду "0d 84 58 00 00 00 00 01 01 02 00 b7 0e") в COM порт в hex формате. Когда отправляю ниже приведенным кодом, данные уходят как String, соответственно оборудование не отвечает. пробовал разные варианты, но не получилось. Помогите допилить.
Скрытый текст
Private Sub CommandButton1_Click() Dim adr As String Dim h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11, h12, h13, out, inut As Long 'SendSubArray(Buffer as Byte array, NumBytes as Integer) as Integer MSComm1.CommPort = 1 MSComm1.Settings = "9600,N,8,1" MSComm1.InputLen = 0 On Error Resume Next MSComm1.PortOpen = True If Err Then MsgBox "Com" & MSComm1.CommPort & ": not available. Change CommPort property to another port.": MSComm1.PortOpen = False: Exit Sub i = 2 ' Номер строки с которой начинается база lLastRow = Cells(Rows.Count, 1).End(xlUp).Row ' Номер последней строки в базе 'lLastCol = Cells(1, Columns.Count).End(xlToLeft).Column For i = 2 To lLastRow Step 1 adr = 5884 ' Sheet3.Cells(i, 2).Value ' Номер счетчика для опроса adr = Fun_adress(adr)
' Do ' Dummy = DoEvents() ' Loop Until MSComm1.InBufferCount >= 8 If MSComm1.InBufferCount < 8 Then MsgBox "Com - " & MSComm1.CommPort & ": Нет ответа. Bit-" & MSComm1.InBufferCount: MSComm1.PortOpen = False: Exit Sub TextBox2.Text = MSComm1.Input Next i MSComm1.PortOpen = False End Sub
Доброго времени суток. Есть файл 01300665.210 (имя меняется). Помогите написать макрос, что бы импортировать такие файлы в эксель одним нажатием кнопки.
Добрый вечер. Я к вам за советом. Я в VBA самоучка. Так случилось, что на работе меня озадачили "создать шаблоны для написания процентовок мастерам" (не моя примая специальность я электрик). Я все это дело соорудил (создал шаблоны, свою панельку, формы для из заполнения, и еще кучу макросов для удобства и максимальной автомаизации процесса). В итоге у меня идин файл размером метра 4. В файле 10 лиистов + добавленые процентовки (1 лист на процентовку). При этом размер файла еще увеливается. И теперь этот файл надо раздать мастерам для работы.
Теперь собственно вопрос: Как все это дело упростить (уменьшить размер одно файла)? У меня есть такой вариан, на сколько я понимаю постоении программ: 1.Создать (уже скопировать) шаблоны в отдельные файлы.xlt 2.Все формы и макросы с паннелькой отдельный файл (главный файл).xls (или xla что лучше?) 3.Созданная процентовка сохранялась в отдельный файл (сколькопроцентовок столько и файлов).
Я правильно мыслю? или подскажите свой вариант как оптимально организовать?
В ListBox1 все отабражается отлично, но как только счелкаю по какой либо строке сразу ошибка 381. При этом ListBox1.ListIndex=-1. У меня такое чувство что ListBox1.ListIndex не возвращает значение, но почему???
Добрый день. Нужна помощь. Есть форма для заполнения таблицы, на форме имеется ListBox1 в котором отображаются материалы (5 столбцов: 1-номенклатурный номер, 2-Наименование, 3-Ед.изм., 4-Количество, 5-Цена). ListBox1.RowSource присваиваю так (в зависимости от значения ComboBox1): If ComboBox1.Text = .Range("AT7") Then UserForm4.ListBox1.RowSource = "oborot_530" End If именованный список oborot_530=СМЕЩ('530'!$AW$9;0;0;СЧЁТЕСЛИ('530'!$AW$9:$AW$2000;">0");5) Вот код
Private Sub ListBox1_Click() Dim str As String Dim pp As String Dim vo As String Dim korschet As String Dim kauk As String Dim kvz As String Dim dkvz As String Dim nomenklat As String Dim naimenov As String Dim izm As String Dim kolvo As String Dim cena As String Dim vidrab As String Dim AL26 As String ' Вид опрерации Dim AM26 As String ' Кор. счет Dim AN26 As String ' КАУК Dim AO26 As String ' КВЗ Dim AR26 As String ' Доп.КВЗ Dim str1 As String Dim str2 As String
TM = 200 'задержка в мс ss = GetTickCount: DoEvents Do While GetTickCount - ss < TM: DoEvents: Loop ' ActiveCell = UserForm4.ListBox1.Text ' на следующей строке останавливается с ошибкой 381 TextBox2.Text = ListBox1.List(ListBox1.ListIndex, 0) ' Инвентарный номер TextBox3.Text = ListBox1.List(ListBox1.ListIndex, 1) ' Наименование TextBox4.Text = ListBox1.List(ListBox1.ListIndex, 2) ' Ед. изм TextBox6.Text = ListBox1.List(ListBox1.ListIndex, 4) ' Цена
str = ActiveCell.Row '-------------------определение КАУК, КВЗ, Кор.счет With ActiveWorkbook.ActiveSheet vidrab = .Range("A4") pp = str - 1 pp = .Cells(pp, 1).Value + 1 End With
With ActiveWorkbook.Sheets("Дано") str1 = 6 'Номер строки с которой начинать поиск str2 = str1 Do Until .Cells(str1, 1).Value = vidrab 'Поиск первой ячейки в 1м столбце соответствующую выбранному авто str1 = str1 + 1 'перебор номера строк пока не выполнится условие
If str1 > str2 + 16 Then Exit Sub End If Loop AL26 = .Cells(str1, 9).Value ' Вид опрерации AM26 = .Cells(str1, 12).Value ' Кор. счет AN26 = .Cells(str1, 16).Value ' КАУК AO26 = .Cells(str1, 20).Value ' КВЗ AR26 = .Cells(str1, 23).Value ' Доп.КВЗ
End With vo = AL26 korschet = AM26 kauk = AN26 kvz = AO26 dkvz = AR26 nomenklat = TextBox2.Text naimenov = TextBox3.Text izm = TextBox4.Text kolvo = TextBox5.Text cena = TextBox6.Text
If nomenklat > 111111111 Then vo = 61 kvz = 11 End If
Добрый вечер. Есть таблица, в одном из столбцов вводится дата в формате "12.янв" и так целый месяц и каждый месяц. Подскажите как можно используя автофильтр отфильтровать значения по месяцу, т.е. по какому месяцу фильтровать данные брались из ячейки L5.
Добрый день. Есть таблица (оборотка), в столбце В имеются номенклатурный номер материала. Необходимо выполнить поиск одинаковых номенклатурных номеров и если таковые имеются то сложить ячейки в столбце М (количество), после чего удалить последующие строки с таким номенклатурным номером. Т.е. если например имеется 5 ячеек с одинаковым значением в столбике В (номенклатурный номенр)и значением в столбце М (количество) 2,5,4,1,3, то после выполнения макроса должно получится одна строка с номенклатурным номером в ячейке В и в ячейке М значение 15 (сумма значений счеек в столбце М) а остальные 4 строки удалены.
Добрый вечер. Есть документ txt в котором таблица с фиксированной шириной. Необходимо его сохранить в xls, ручками все получается без проблем а вот с помощью макроса не получается. Выкладываю примеры. Подскажите как это сделать автоматически.
Спасибо все работает. Но вызникает новый вопрос как это: {quote}{login=}{date=12.10.2011 01:31}{thema=}{post}в модуль книги: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If Not progsaving Then Cancel = True End Sub
в стандартный модуль:
Public progsaving As Boolean
Sub макрос_сохранения() progsaving = True ... ...saveas progsaving = False End Sub{/post}{/quote}
удалить из сохраненного файла, т.е. макрос должен быть только в шаблоне?