Что нужно изменить в коде, чтобы данные считывались в исходным виде.
(Прошу прощения, не нашел как правильно вставить текст макроса. Привожу в "корявом виде")
Код
Sub Пример()
Workbooks("Пример.xlsm").Worksheets("Парсинг").Cells.Delete
With Workbooks("Пример.xlsm").Worksheets("Парсинг").Select
Range("A1:Z1000").Select
Selection.NumberFormat = "@"
End With
With Workbooks("Пример.xlsm").Worksheets("Парсинг").QueryTables.Add("URL;[URL=https://www.roseltorg.ru/past/procedure/0131100011418000094"]https://www.roseltorg.ru/past/procedure/0131100011418000094"[/URL];, Workbooks("Пример.xlsm").Worksheets("Парсинг").Range("A1"))
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebDisableDateRecognition = True
.Refresh BackgroundQuery:=False
End With
End Sub
Sub Пример()
With ThisWorkbook.Worksheets("Парсинг")
.Cells.Delete
.Range("B:B").NumberFormat = "@"
With .QueryTables.Add("URL;https://www.roseltorg.ru/past/procedure/0131100011418000094", Workbooks("Пример.xlsm").Worksheets("Парсинг").Range("A1"))
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebDisableDateRecognition = True
.Refresh BackgroundQuery:=False
End With
.Range("B1") = .Range("B1").FormulaLocal
End With
End Sub
Нет, так применимо только в данном конкретном примере. На самом деле обрабатываются разные сайты и в URL далеко не всегда присутствует нужный номер (как в данном случае). Нужен прием, который обеспечивает адекватное представление полей сайта, содержащих длинный цифровой код.
текст - вот адекватное представление любой буквенно-цифровой информации буковка за буковкой, циферка за циферкой и в любых сочетаниях! хотя есть и тут подводные камни, когда некоторые сочетания символом отображаются потом как смайлик думаете я это рисовал? просто написал ; и ) только вместе, а не через пробелы с и в средине.
Согласен, "текст - это наше все" Поэтому и вставил в свой код Selection.NumberFormat = "@" перед считыванием данных сайта. После считывания формат ячеек остается текстовым, однако происходит преобразование в экспоненту. что нужно еще ?
alpens, не так давно столкнулся с похожей ситуацией. Решил ее, как и писал выше: - текстовый формат ячеек-приемщиков - перед вставкой к каждому такому числу прилепляется "" (пустая строка)
Sub test()
Dim aa, a&, URL$
URL = "01234/004563/09871"
aa = Split(URL, "/")
For a = 0 To UBound(aa): aa(a) = "" & aa(a): Next
[B1].Resize(a).NumberFormat = "@"
[B1].Resize(a) = Application.Transpose(aa)
End Sub
Anchoret, Вы обрабатываете текстовую строку, выделяя нужный фрагмент и преобразовывая его. У меня данные считываются с сайта запросом QueryTable. После считывания в ячейке уже обрезанное значение 131100011418000000, а надо бы 0131100011418000094, как на сайте. Как этого избежать? Видимо нужно задать правильное сочетание свойств QueryTable. Но какое ?
alpens, полагаю дело не в QueryTable, а в Excel, который любит додумывать все за пользователей. Выгрузка идет напрямую на лист. Если как-то обойти и выгружать в массив, то шанс победить есть) Лично я с Query не работал.
Перехватывать сам факт выгрузки тоже ничего не даст, т.к. данные уже на листе.
Power Query исппользовать не смог: 1. не нашел примера его использования в макросах VBA; 2. если правильно понял Power Query предполагает знание структуры сайта. Импорт каждой табл. сайта производится на отдельный лист, что затрудняет обработку данных, тогда как QueryTabl позволяет импортировать все данные сайта на один лист.
Цитата
Anchoret написал: Если как-то обойти и выгружать в массив, то шанс победить есть
Вероятно, нужно выгружать не в массив, а в переменную типа QueryTable. Что-то вроде
alpens написал: Не смог найти способ найти нужное поле в переменной QT1, чтобы обработать его значение.
Смог. Данные в QT1 появляются также после QT1.Refresh и поле Value2 содержит 1,311000011418Е+17, т.е. тоже обрезано. Тип этого поля Variant/Double. Как сделать, чтобы все поля были Variant/String. Есть ли настройка ?