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

Страницы: 1 2 След.
Загрузка большого json
 
Добрый день.
Ребята, подскажите, какие еще есть варианты обработки json в vba?
В данный момент я гружу из файлов с помощью библиотеки jsonbag. файл порядка 6-10 Мб, данные с сайта, выгруженные через консоль.
Грузится неимоверно долго, приходится срубать через Диспетчер задач.
Распарсить json или получить jaon -объект по get запросу
 
Есть сайт, с которого нужно получать и обрабатывать данные, я нашел гет-запрос для получения json-объекта.
Нужно разобрать объект и распределить данные по стобцам таблицы.
Как я себе это представляю: 2 варианта;
1. запрос из vba к сайту (внутри закрытой сети) с авторизацией и пр., во вложенном файле пример есть - авторизация проходит, куки получает, а дальше "болт"
2. в браузере открыть гет запрос и текстов скопировать json-объект в текстовый файл и оттуда vba читать библмотеками, поскольку вставить в ячейку excel не получится, т.к. более 32000 символов.

Бибилиотеками пробовал - берет только 10 записей в объекте records, когда их 84 вроде. Несколько библиотек попробывал - одно и то же, 10 шт.
help!
В идеале по 1 варианту сделать.
Изменено: Владимир Л - 10.07.2019 17:36:52
Массив дат в AutoFilter
 
Добрый день, подскажите как в AutoFilter передать массив дать.

Код
                        ws.Range("$A$1:$AP$2088").AutoFilter Field:=2, Operator:= _
                            xlFilterValues, Criteria2:=Array(2, "7/20/2018", 2, "7/21/2018", 2, "7/22/2018", 2, _
                            "7/23/2018", 2, "7/24/2018", 2, "7/25/2018", 2, "7/26/2018")

пробовал так, но ошибку выдает:
Код
ws.Range("$A$1:$AP$2088").AutoFilter Field:=2, Operator:= _
                            xlFilterValues, Criteria2:=Arr_date

при этом даты в Arr_date записаны были как 20.07.2018 и как 43301
Адрес ячейки из RefEdit
 
Добрый день.
Получаю из RefEdit адрес ячейки "'Отчет_динамика по неделям_RB'!$AR$5", как мне в эту ячейку теперь записать данные?
Переделать вид объекта из Array(1)(1) в Array(1,1)
 
подскажите как это сделать?
Убрать условное форматирование в выбранной ячейке
 
Есть отчет - табель работы сотрудников, который формируется макросами из разных файлов, есть ячейки, в которых есть текст(тип работы), а есть пустые. Так вот, пустые ячейки я могу заливать другим цветом и вставлять примечание макросом, а заполненные ячейки я не могу заливать никак, но макросом примечание добавляется.
HELP!!!
Изменить ряд данных в диаграмме
 
Добрый день.
Есть диаграмма на листе, которая данные берет с таблицы этого же листа. Таблицу я обновляю макросом, но ряды данных в диаграмме не меняются автоматически = =да и с чего бы.
Хочу сделать обновление рядов, но не могу понять как.
Нашел в объекте диаграмм нужную, нашел имя её, но найти ряды не могу:
Код
Application.ChartsItem(1).Chart.ChartTitle.Caption
Функция всписке() или подобная
 
Добрый день.
есть функция типа всписке(лед, стекло, вода, капрон), которая проверяет существование строки в скобках, только называется она по другому - не могу вспомнить как...
Очистить массив от дублирующихся элементов
 
Добрый день.
Нужно посчитать кол-во рабочих дней за период отсутствия сотрудника, иногда бывает несколько периодов - я их помещаю в массив, есть такое, что периоды дублируются. Подскажите как в массиве оставить только уникальные периоды.
Дублирующиеся периоды могут быть не последовательно размещены.
Изменено: Владимир Л - 25.10.2016 09:24:18
Поместить диапазон ячеек в массив
 
Добрый день.
Делаю так:
Код
arr_holiday = Worksheets("Êàëåíäàðü").Range(Cells(3, t), Cells(old_cell, t)).Value
Массив создается, но обращаться к элементу нужно arr_holiday(1,1),arr_holiday(2,1), т.е. с вложенными элементами.
Как без вложенности получить массив?
Посчитать остаток рабочих часов сотрудника роизводственному календарю с учетом отсутсвий(отпуск, больничный)
 
Добрый день.
Нужно посчитать количество оставшихся рабочих часов в месяце.
Есть даты начала/окончания отпуска у сотрудника, к примеру с 1 по 13 марта 2016 г. В месяце 175 рабочих часов при 40 часовой рабочей недели. рабочие числа 1 - 5 и 9-11, 5 - рабочая суббота. Получается, что с 1 по 13 марта у сотрудника должно было быть 8 рабочих дней по 8 часов = 64 часа. Итого получается 111 рабочих часов.
Данные по отсутствиям предоставлены в таком виде:                                                                                                                      
ФИОВид отсутствияНачало отсутствияОкончание отсутствия
Иванов Иван Иванович0100 - Основной отпуск11.04.201623.04.2016
Иванов Иван Иванович0100 - Основной отпуск19.03.201602.04.2016
Иванов Иван Иванович0200 - Больничный лист01.04.201610.04.2016
Иванов Иван Иванович0600 - Неявка по невыяс.причине01.04.201610.04.2016
Шалимова Наталия Геннадьевна0100 - Основной отпуск03.04.201616.04.2016
Земнухаев Павел Викторович0100 - Основной отпуск26.03.201610.04.2016

из таблички нужно получить список дат за 4 месяц, в которых он был в отпуске, из них вычесть субботу, воскресенье и будние дни, на которые приходятся гос. праздники (получается 7 и 8 марта - красные дни календаря), но не вычитать сб, вск, если на них приходится рабочий день (в марте 5 число, суббота - рабочий день.)
Изменено: Владимир Л - 14.10.2016 11:53:04
Ошибка при открытии файла с формой
 
Добрый день. На листе есть форма UserForn1 с кнопкой. По нажатию кнопки запускается процедура для копирования данных (но пока открываю книгу) из другой книги.
Событие срабатывает - книга открывается, но вылетает ошибка: Can't show non-modal form when modal form is displayed. В файле, который я открываю после открытия книги автоматом открывается форма с меню.
Попробывал другой файл открыть  - все ОК.
Как обойти автостарт формы в открываемом файле.
Открываю просто:
Код
Workbooks.Open Filename:=Path
Повесить события на выпадающий список
 
Добрый день.
Есть 100 ячеек с выпадающим списком (сделан ч\з проверку данных). При выборе варианта из списка (к примеру список в ячейке A1 Листа 1) нужно диапазон с листа Лист2!D1:K4 копировать в диапазон Лист1!D1:K4.
Копировать знаю как, но можно ли на такой список повесить события?
Очистка контента в объединенных ячейках
 
Добрый день.
знаю, что ClearContent, но он ругается, что ячейки объединены
В цикле назначить диапазону имя из диспетчера имен
 
Добрый день.
В диспетчере имен есть имя диапазона Type_work с листа 2, на листе 1 нужно в цикле пройти по ячейкам, содержащим текст "Рабочие часы"(колонка B) и диапазону C:Y назначить имя Type_work.
Проверить существование массива
 
Добрый день, из 1 процедуры в другую передается массив(массив выбранных элементов листбокса) параметром, если в листбоксе ничего не выбрано, то во 2 процедуре вылетает ошибка на Ubound(массив).
Как сделать проверку?
Отключение Missing
 
Добрый день.
Подскажите как решить проблему. может другое решение есть?
для отключения оповещения нашел кусок кода и поставил его при открытии книги, дабы не ругался на библиотеки:
Код
Private Sub Workbook_Open()
    Dim oReferences As Object, oRef As Object
    Set oReferences = ThisWorkbook.VBProject.References
    For Each oRef In oReferences
        If (oRef.IsBroken) Then oReferences.Remove Reference:=oRef
    Next
End Sub
Но при открытии но другом ПК вываливается ошибка:
Run-Time error "1004" Программный доступ к проекту Visual Basic не является доверенным.
...хотя галочка стоит в настройках...
Установить владельца файла при создании
 
Добрый день.
Есть книга с несколькими листами. Нужно сохранить лист1 в PDF(знаю как), и при создании файла назначить ему владельца.
Это нужно для того, чтобы в определенном каталоге с файлами владелец мог менять только файл, в котором он прописан владельцем.
Количество дней в месяце за дату
 
Добрый день.
Подскажите как правильно получить количество дней в месяце за дату.
Даты берутся из ячеек.
Делаю пока так, но если Day_end > Day, то получаю число дней с минусом.
Код
    If Day > Day_end Then
            MsgBox "Неверные даты"
        Else:
            If Day_end - Day + 1 > 31 Then
                MsgBox "Выберите правильный период табелирования"
                UserForm4.Hide
                Exit Sub
                Else: Count_Day = Day_end - Day + 1
            End If
    End If
..Изменил, немного допилил...
Изменено: Владимир Л - 30.09.2016 11:38:04
Добавление даты в ячейку с Monthview
 
Добрый день.
Есть 2 ячейки, при клике на которые должен вываливаться календарь.
Код
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)     If Target.Cells.Count > 1 Then Exit Sub
     If Not Application.Intersect(Worksheets("Òàáåëü").Range("D4"), Target) Is Nothing Then
         UserForm1.Show
     End If
     
          If Target.Cells.Count > 1 Then Exit Sub
     If Not Application.Intersect(Worksheets("Òàáåëü").Range("F4"), Target) Is Nothing Then
         UserForm1.Show
     End IfEnd Sub
Нужно, чтобы при клике на D4, дата писалась в ячейку D4, если F4, то, соответственно, в F4. Так пишется только в D4, Как сделать условие?
Код
Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
    Worksheets("Òàáåëü").Range("D4").Value = DateClicked
    UserForm1.Hide
End Sub
Разбить массив на подмассивы
 
Добрый день.
Есть массив одномерный с числами от 1 до 30.
Нужно его разбить на 5 частей по 7 элементов, соответственно.
Подскажите как это сделать?
Заполнить массив с листа с шагом
 
Добрый день.
Есть колонка с данными (фио), строки объединены по 4 штуки, т.е 1 - 4, 5-8 и т.д. Но данные берутся по 1 ячейке объединенного диапазона, т.е. 1, 5 и т.д.
Мне нужно заполнить динамический массив этими данными. Я for'ом могу обойти с шагом 4 строки, но как заполнится массив?
Определить зависимости по клиентам
 
Добрый день.
Подскажите, пожалуйста, в решении задачи: есть 15000000 строк данных по клиентам(ID, количество выходов на просроченную задолженность(ПЗ), количество нарушенных обещаний об оплате(PTP), срок задолженности, возраст, сумма задолженности, адрес и пр.)
Нужно определить насколько жестко/лояльно разговаривать с клиентом в зависимости от кол-ва нарушенных обещаний и срока просрочки.
т.е. если ПЗ от 1 до 30 дня и кол-во PTP менее 3, то разговариваем по 1 алгоритму, если ПЗ от 1 до 30 дня и кол-во PTP более 3, то по 2 алгоритму и т.д.
можно условиями множественными это сделать, но хочется как-то функциями статистики или поиска решений это сделать...
Количество строки с датой
 
Добрый день, есть лист с данными, в одной колонке дата в формате "27.07.2016". Мне нужно посчитать кол-во строк с датой "01.08.2016" - Как?
С числами проще:
Код
Application.WorksheetFunction.CountIf(Sheets(File_Name).Range("G:G"), "1")
Заполнить массив с листа с шагом
 
Добрый день.
Есть 3 колонки и некоторое кол-во строк, нужно обойти эти данные в цикле с некоторым шагом(к примеру 2, может быть и другой) и поместить данные в массив, потом этот массив мне нужно будет "скормить" процедуре. т.е если шаг 2, то будет 2 массива и оба скормятся процедуре, если шаг 5, то 5 массивов и т.д.
Может сделать массив массивов?
Хелп!
Оптимизировать процедуру
 
Добрый день.
При открытии файла выполняется следующая процедура, но вешает ПК почти наглухо, хотя я отключаю все, что возможно.

процедура копирует с 12 листов ФИО сотрудников на 0 лист и все.
Можно ли как-то оптимизировать её?
Код
Sub AllListSotr() 

   lLastRow = Cells.SpecialCells(xlLastCell).Row - 1
    For i = 1 To 12        '   Последняя строка
        lLastRow_this = Worksheets("0").UsedRange.Row + Worksheets("0").UsedRange.Rows.Count        '   Последняя строка
        lLastRow = Worksheets(CStr(i)).UsedRange.Row + Worksheets(CStr(i)).UsedRange.Rows.Count - 1 
        Worksheets(CStr(i)).Range("A2:A" & lLastRow).Copy
        Worksheets("0").Range("A" & lLastRow_this).PasteSpecial Paste:=xlPasteValues 
       
    Next
    
    
    
    '   Удаляем дубликаты
    Worksheets("0").Range("A:A").RemoveDuplicates Columns:=1, Header:=xlNo
    
    '   Сортируем
    ActiveWorkbook.Worksheets("0").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("0").Sort.SortFields.Add Key:=Range("A:A"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("0").Sort
        .SetRange Range("A:A")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
Не заполняется данными диаграмма
 
Добрый день.
Не заполняется данными диаграмма
Код
Public Sub Chart(arrAll, Mount, Pokazatel)
 
 '  Формируем график с данными из параметров
    For i = 0 To UBound(Pokazatel)
            
                Sheets("Досье").ChartObjects.Add(i * 230, 300, 225, 250).Select
                With ActiveChart()
        
                    .ChartType = xlColumnClustered
                    .HasTitle = True
                    .ChartTitle.Text = Pokazatel(i)
                    .SeriesCollection.NewSeries
                    .SeriesCollection(1).HasDataLabels = True
                    .SeriesCollection(1).XValues = Mount
                    .SeriesCollection(1).Values = arrAll(i)
                    .HasLegend = False
                End With
                
            Next
    
End Sub

Массив arrAll(i) заполнен значениями, округлены нормально, до сотых = график формируется без данных...
но если изменение ряда через интерфейс делать, там ={0;0;0;0;0;0;0;0;0;0;0;0}
Проблема с активацией формы (Method or data member not found), ошибка при отработке процедуры активации формы
 
Добрый день.
нашел вот такой календарь:ссыль
но ругается на этот кусок, говорит "Method or data member not found":
Код
Private Sub UserForm_Activate()
    Me.Calendar1.Value = Date
End Sub
Что такое Me?
Combobox и ListFillRange
 
Добрый день.
добавил комбобокс, хочу данные с листа взять, но диапазон меняется.
если так делаю - данные вообще не берутся.
Код
Private Sub ComboBox21_Change()
ComboBox21.ListFillRange = Worksheets("0").Range("A1:A252")
End Sub
Цикл по листам, имена которых числа
 
Хелп.
нужно обойти 12 листов с именами 1 - 12(есть другие листы)  и скопировать диапазоны ячеек на лист 0.
Так не получается, Worksheet(i) берет 1 лист по порядку.
Код
Sub t()    '   Последняя строка
    
    lLastRow_this = Worksheets("0").UsedRange.Row + Worksheets("0").UsedRange.Rows.Count - 1
  
    For i = 1 To 12
         
        '   Последняя строка
        lLastRow = Worksheets("i").UsedRange.Row + Worksheets(i).UsedRange.Rows.Count - 1
    
        Worksheets(i).Range("A2:A" & lLastRow).Copy
        Worksheets("0").Range("A" & lLastRow_this).PasteSpecial Paste:=xlPasteValues
    NextEnd Sub
Страницы: 1 2 След.
Наверх