Здравствуйте, уважаемые знатоки!. Как обратиться к элементам страницы HTML внутри inframe. Код страницы сайта прикладываю. В итоге необходимо с помощью VBA заполнить форму с логином и паролем и нажать вход. Решение нашел:
Код
Dim workFrame As HTMLIFrame
Dim objShell As Object, oWin As Object
Dim HTMLDoc As HTMLDocument
Dim ie As InternetExplorer
url = "http://..."
Set ie = New SHDocVw.InternetExplorer
ie.Visible = True
ie.navigate url
Set workFrame = ie.document.getElementById("PageContent")
Set HTMLDoc = workFrame.contentWindow.document
HTMLDoc.getElementById("username").Value = 1
Wild.Godlike,Пришлось удалить, т.к. кто-то в файле запускал макрос, который отправляет сообщение на рабочую рассылку. Задачу, кстати, решил сам, оставлю код на случай, если кому пригодиться.
Код
objIE.Document.getElementsByTagName("select")(0).Value = "0"
For j = 0 To 17
a = objIE.Document.getElementsByTagName("select")(0).Children(j).Value
For i = a To a
Select Case i
Case Is = 86, 83, 85, 84
With objIE.Document.getElementsByTagName("select")(0)
.Children(j).Selected = True
End With
End Select
Next
Next
Sanja,Спасибо большое. Добился нужного результата немного подредактировав Ваш код:
Код
Set POSR = Workbooks("AutoReport_Din").Worksheets("Выгрузка_POSReport")
On Error Resume Next
For j = 2 To lLastRow - 1
If Not IsEmpty(POSR.Cells(j, 1)) Then
d = POSR.Cells(j, 1).Value
Workbooks(strFileName2).Worksheets("Сводная").Activate
Set clf = Worksheets("Сводная").Columns(1).Find(What:=CDate(d), LookIn:=xlValues) ' поиск даты
If Not clf Is Nothing Then
Workbooks(strFileName2).Worksheets("Сводная").Cells(clf.Row, 2).Copy
POSR.Cells(j, 13).PasteSpecial Paste:=xlPasteValues
End If
End If
Next
Не подходит, потому что в таком случае, макрос просто переходит на новую строчку и получается в отчет вставит значение за прошлую дату, а должен сразу переходить на Next в случае если дата не найдена.
Файл выложить не могу, запрет в организации. Суть макроса в следующем: Из одного файла копируются данные в отчет, бывает, что в файле некоторые дни отсутствуют, в данном случае макрос должен пропускать отсутствующий день и переходить к следующему. Ошибка возникает на строке 9, т.к. не находит значение d (даты). Хотелось бы, чтобы в подобном случае, макрос переходил на строку 22 (брал следующий день), сейчас же макрос переходит на 22 строку только при первом срабатывании ошибки, т.е. когда не находит дату.
Прошу помощи, подскажите пожалуйста, почему в коде ниже возникает ошибка "object variable or with block variable not set"
Хотелось бы чтобы макрос пропускал и брал следующее значение если не находил текущее искомое.
Оператор On Error срабатывает только один раз и пропускает значение которое не нашел, на втором круге цикла возникает ошибка "object variable or with block variable not set"
Код
For j = 2 To lLastRow - 1
Workbooks("AutoReport_Din").Worksheets("Выгрузка_POSReport").Activate
On Error GoTo errH1
If Not IsEmpty(Cells(j, 1)) Then
On Error GoTo errH2
d = Cells(j, 1).Value
End If
Workbooks(strFileName2).Worksheets("Сводная").Activate
Set clf = Worksheets("Сводная").Columns(1).Find(What:=d, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _
SearchFormat:=False) ' поиск даты
j1 = clf.Row
Cells(j1, 2).Select
Selection.Copy
Workbooks("AutoReport_Din").Worksheets("Выгрузка_POSReport").Activate
Cells(j, 13).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
errH1:
errH2:
Next
Sub BackLog()
'Application.DisplayAlerts = False
'Application.ScreenUpdating = False
'Application.EnableEvents = False
'Application.Calculation = xlAutomatic
strDirPath = "G:\Customer Service Department\UIP Supervisors\Контроль за реестром\на согласование\" 'Папка поиска
strName = "Отчет Из РИО. "
strDate = Workbooks("AutoReport_Din.xlsm").Worksheets("Переменные").Range("B6").Value
strYear = Workbooks("AutoReport_Din.xlsm").Worksheets("Переменные").Range("B7").Value
strMaskSearch = ".xlsx"
strFileName2 = strName & strDate & " " & strYear
strFileName = strDirPath & strFileName2 & strMaskSearch
Dim MyDate, MyDate1 As Date
MyDate = Workbooks("AutoReport_Din.xlsm").Worksheets("BackLog").Range("A11").Value
MyDate1 = Workbooks("AutoReport_Din.xlsm").Worksheets("BackLog").Range("A2").Value
Dim i As Long, PvtItem As PivotItem
With Sheets("Сводная").PivotTables("СводнаяТаблица1")
ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Дата создания").CurrentPage = _
"(All)"
ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Дата создания"). _
EnableMultiplePageItems = True
ActiveSheet.PivotTables("СводнаяТаблица1").PivotCache.Refresh
With .PivotFields("Дата создания")
.NumberFormat = "dd/mm/yyyy"
' Установка ручной сортировке поля
.AutoSort xlManual, .AutoSortField
' Показ минимум одного элемента
For MyDate1 = MyDate1 To MyDate
For Each PvtItem In .PivotItems
If IsDate(.Value) Then
If PvtItem.Value <> MyDate1 Then PvtItem.Visible = False: Exit For
End If
Next
For Each PvtItem In .PivotItems
With PvtItem
If IsDate(.Value) Then
PvtItem.Visible = PvtItem.Value = MyDate1
End If
End With
Next
' Сортировка по возрастанию
.AutoSort xlAscending, .AutoSortField
'Аналитический результат
With Sheets("Сводная").PivotTables("СводнаяТаблица1")
ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Аналитический результат").CurrentPage = _
"(All)"
ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Аналитический результат"). _
EnableMultiplePageItems = True
ActiveSheet.PivotTables("СводнаяТаблица1").PivotCache.Refresh
With .PivotFields("Аналитический результат")
' Установка ручной сортировке поля
.AutoSort xlManual, .AutoSortField
' Показ минимум одного элемента
For Each PvtItem In .PivotItems
If .Value = "Дубликат" Then .Visible = False: Exit For
Next
For Each PvtItem In .PivotItems
With PvtItem
.Visible = .Value <> "Дубликат"
End With
Next
' Сортировка по возрастанию
.AutoSort xlAscending, .AutoSortField
End With
End With
' шаг обработка заявки
With ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("обработка заявки")
.PivotItems("1").Visible = False
End With
' Тип заявки ДК
With Sheets("Сводная").PivotTables("СводнаяТаблица1")
ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Тип заявки").CurrentPage = _
"(All)"
ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Тип заявки"). _
EnableMultiplePageItems = True
ActiveSheet.PivotTables("СводнаяТаблица1").PivotCache.Refresh
With .PivotFields("Тип заявки")
' Установка ручной сортировке поля
.AutoSort xlManual, .AutoSortField
' Показ минимум одного элемента
For Each PvtItem In .PivotItems
If PvtItem.Value <> "Сквозная проверка" Then PvtItem.Visible = False
Next
' Сортировка по возрастанию
.AutoSort xlAscending, .AutoSortField
End With
End With
Range("A16").Select
Selection.Copy
Workbooks("AutoReport_Din").Worksheets("BackLog").Activate
'поиск ячейки с датой
Set c = Cells.Find(What:=MyDate1, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not c Is Nothing Then
Range(c.Rows, c.Columns).Activate
End If
Columns("A:A").Select
Selection.Find(What:=MyDate1, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Workbooks(strFileName2).Worksheets("Сводная").Activate
ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Тип заявки"). _
ClearAllFilters
' Тип заявки локалс
With Sheets("Сводная").PivotTables("СводнаяТаблица1")
ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Тип заявки").CurrentPage = _
"(All)"
ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Тип заявки"). _
EnableMultiplePageItems = True
ActiveSheet.PivotTables("СводнаяТаблица1").PivotCache.Refresh
With .PivotFields("Тип заявки")
' Установка ручной сортировке поля
.AutoSort xlManual, .AutoSortField
' Показ минимум одного элемента
For Each PvtItem In .PivotItems
If PvtItem.Value <> "Locals" And PvtItem.Value <> "Интернет Магазин" Then PvtItem.Visible = False
Next
' Сортировка по возрастанию
.AutoSort xlAscending, .AutoSortField
End With
End With
Range("A16").Select
Selection.Copy
Workbooks("AutoReport_Din").Worksheets("BackLog").Activate
'поиск ячейки с датой
Set c = Cells.Find(What:=MyDate1, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Range(c.Rows, c.Columns).Activate
ActiveCell.Offset(0, 2).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Workbooks(strFileName2).Worksheets("Сводная").Activate
ActiveSheet.PivotTables("СводнаяТаблица1"). _
ClearAllFilters
Next MyDate1
End With
End With
End Sub
Добрый день, Уважаемые знатоки! Есть следующая вырезка из кода:
Код
Set c = Cells.Find(What:=MyDate1, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Range(c.Rows, c.Columns).Activate
Где MyDate1 поочередно меняется И почему то возникает ошибка "Object variable or block variable not set" когда цикл доходит до 10.12.2016. Подскажите пожалуйста в чем может быть причина. Спасибо.
Спасибо большое за предложенный вариант, проверил, все работает, но хотелось бы чтобы макрос сам переносил данные из выгрузки со всех строк с датами в архив. Теперь у меня по крайней мере есть наработка попытаюсь еще сам разобраться как можно подредактировать макрос для достижения нужного результата.
1) Вывод сообщения об ошибке 2) Перезаписывать (небольшое уточнение, если в файле выгрузка и архив за определенную дату и определенный параметр есть значение, то значение в ячейки из выгрузки должно перезаписать значение ячейки в архиве) 3) Оставить без изменения
Добрый день, уважаемые форумчане! Подскажите пожалуйста как можно выполнить следующее: Есть два файла, в обоих файлах первый столбец это даты, первая строка это название показателей, на пересечении строк и столбцов данные. В первом файле данные обновляются на ежедневной основе, назову его для понимания (выгрузка), во втором файле хранится информация за исторический период (архив). Необходимо перенести актуальные данные из выгрузки в архив. Сложность заключается в том, что в файле архив присутствуют названия других показателей. Таким образом задача сводится к тому чтобы найти значение за определенную дату и с определенным показателем из файла выгрузка скопировать его и вставить в файл архив в ячейку с такой же датой и названием показателя. Реализовать необходимо макросом. Приложил 2 файла, первый - пример файла выгрузка, второй - пример файла архив. Данные проставлены для примера.
К сожалению сам файл не могу Вам выложить, информация конфиденциальная т.к. работаю в банке. Думал что вырезки из кода будет достаточно. Сложность заключается в том, как изменить код чтобы он оставлял заявки меньше 8 часов, а все что более 8 скрывал при условии, что присутствуют значения более 24 часов, как видно на скрине выше это может быть и 26 часов и 46 и 79 и т.д.
Попробовал использовать первый способ, результат прежний, скрываются только значения с 08:00:00 до 24:00:00 все что больше 24:00:00, так же остается выделенным, как применить второй способ не понял. Не могли бы объяснить поподробнее. Спасибо за помощь!
Всем, привет. Очень нужна помощь в написании макроса. Есть такой код:
Код
[COLOR=#696a6a]With ActiveSheet.PivotTables("СводнаяТаблица2" ;) .PivotFields( _ [/COLOR]
[COLOR=#696a6a]"Тайминг обработки для партнера" ;) [/COLOR]
[COLOR=#696a6a].NumberFormat = "[hh]:mm:ss" [/COLOR]
[COLOR=#696a6a].AutoSort xlManual, .AutoSortField [/COLOR]
[COLOR=#696a6a]For Each PvtItem In .PivotItems [/COLOR]
[COLOR=#696a6a]If IsDate(.Value) Then [/COLOR]
[COLOR=#696a6a]If .Value > "08:00:00" Then .Visible = False: Exit For [/COLOR]
[COLOR=#696a6a]End If [/COLOR]
[COLOR=#696a6a]Next [/COLOR]
[COLOR=#696a6a]For Each PvtItem In .PivotItems [/COLOR]
[COLOR=#696a6a]With PvtItem [/COLOR]
[COLOR=#696a6a]If IsDate(.Value) Then [/COLOR]
[COLOR=#696a6a].Visible = .Value <= "08:00:00" [/COLOR]
[COLOR=#696a6a]End If [/COLOR]
[COLOR=#696a6a]End With [/COLOR]
[COLOR=#696a6a]Next [/COLOR]
[COLOR=#696a6a].AutoSort xlAscending, .AutoSortField [/COLOR]
[COLOR=#696a6a]End With
[/COLOR]
Но столкнулся с такой сложностью, что в фильтре по "Тайминг обработки для партнера" присутствуют значения больше 24:00:00, соответственно данным кодом они не скрываются. Подскажите пожалуйста как можно решить эту проблему.
Подскажите пожалуйста как будет выглядеть макрос для фильтрации в сводной таблице. Ситуация следующая, есть сводная таблица, в ней фильтр "причина превышенного тайминга обработки заявки" уникальных значений в этом фильтре нет (все причины начинаются со слов перезвон_в, дозвонился_в, Нет_номера_телефона, долгий_разговор_с_клиентом и т.д.) необходимо поставить фильтр по всем причинам кроме по всем перезвонам, по всем дозвонился. Как это можно сделать, думал ввести что то типа переменной perezvon = "перезвон*" и оставлять все значения кроме этой переменной.