Сортировка с обновлением
Есть хтмл файл, вид - таблица, типа слово - число.
Файл Ексел присутствует.
Так вот.
Из хтмл"а надо загнать в ексел таким образом, что бы значения столбца "число" встало со значениями столбца "слово". Простую сортировку реализую - это не проблема. Но бывает такое, что встречаются уникальные слова. Тут мои познания "пас"уют :) (прикольно сказано). Как быть?
З.Ы. Вообщем это только начало. Задача расширится. если надо пример - предоставлю.
Тань, ничего не понятно.
Так, подробно:
В ескеле лежит, к примеру
Ст1 Ст2 Ст3
.а.....3.....4
.б.....5.....6
.в.....7.....6
.г.....7.....7
.е.....5.....9
В хтмл
Ст1 Ст2
.а.....4
.б.....6
.в.....8
.г.....9
.д.....5
Хтмл файло всегда одной структуры идет см. выше
А ексел должен посмотреть хтмл и выдать
Ст1 Ст2 Ст3 Ст4
.а.....3.....4.....4
.б.....5.....6.....6
.в.....7.....6.....8
.г.....7.....7.....9
.д.................5 (См. сюда)
.е.....5.....9.....0
Жду вопросы.
Тань, ничего не понятно.
В догонку,
Сравнение в ВБА к типу значений чувствительно?
В догонку,
Сравнение в ВБА к типу значений чувствительно?
Сравнение чувствительно к типу везде.
В любом языке программирования 111>12, но "111"<"12"
1. Делаешь Workbooks.Open FileName:="www.yandex.ru"
При этом твой хтмл каким-то образом раскинется по экселевскому листу. Приятных ощущений добавляет тот факт, что один и тот же хтмл может по-разному разложиться на лист в 97-м и 2000-м Экселе.
2. Находишь, куда попало начало твоей таблица.
Это может быть либо определенная ячейка (если формат хтмл абсолютно точно не меняется), либо искать какие-то уникальные слова (типа "Таблица 1")
3. Дальше анализируешь свою старую таблицу и новую, вносишь изменения.
4. Потом хтмл закрываешь.
С какими пунктами тебе помочь?
Сравнение чувствительно к типу везде.
В любом языке программирования 111>12, но "111"<"12"
Ну З-Л-22-23 4ever :)
Читаем вопрос внимательно
Чувствительно к [крупно]типу значения[/крупно], а не к [крупно]значению[/крупно]
Чуем разницу, а ? :)
Ну З-Л-22-23 4ever :)
Читаем вопрос внимательно
Чувствительно к [крупно]типу значения[/крупно], а не к [крупно]значению[/крупно]
Чуем разницу, а ? :)
Извини, может я чего не понимаю, но мне кажется, что я ответил именно на твой вопрос. А что ты называешь "типом значения"?
Что касается твоей задачи:
1. Делаешь Workbooks.Open FileName:="www.yandex.ru"
При этом твой хтмл каким-то образом раскинется по экселевскому листу. Приятных ощущений добавляет тот факт, что один и тот же хтмл может по-разному разложиться на лист в 97-м и 2000-м Экселе.
2. Находишь, куда попало начало твоей таблица.
Это может быть либо определенная ячейка (если формат хтмл абсолютно точно не меняется), либо искать какие-то уникальные слова (типа "Таблица 1")
3. Дальше анализируешь свою старую таблицу и новую, вносишь изменения.
4. Потом хтмл закрываешь.
С какими пунктами тебе помочь?
По 1 пункту
файл хтмл ручками закидываю в ексел и причесываю
2
Начало будет фиксированным
3
SOS
4
Да, это я не умею и 111<12 :)
Извини, может я чего не понимаю, но мне кажется, что я ответил именно на твой вопрос. А что ты называешь "типом значения"?
Тип значения - integer
значение - 5
Да?
Тип значения - integer
значение - 5
Да?
Хм, сошлось... Ну и чем тебя не устроил мой ответ?
Если же ты имела в виду, важно ли иметь тип Integer или Long, Single или Double - то не важно.
Хм, сошлось... Ну и чем тебя не устроил мой ответ?
Хех, ну вообщем, то вопрос был про типы, а не про значения, то что 111>22, без претензий :)
Sub UpdateXL()
Dim wx As Worksheet, wh As Worksheet
Dim ix As Long, ih As Long, jx As Long
Application.ScreenUpdating = False
'Здесь поставишь правильные ссылки
Set wx = ThisWorkbook.Worksheets("XL")
Set wh = ThisWorkbook.Worksheets("HTML")
jx = 2 'Номер столбца на листе Эксель
While wx.Cells(1, jx).Value <> "" 'Ищем пустой
jx = jx + 1
Wend
wx.Cells(1, jx).Value = "Ст" & jx 'Сочиняем заголовок нового
ix = 2 'Номер строки на листе Эксель
While wx.Cells(ix, 1).Value <> "" 'Заполняем нулями новый столбец
wx.Cells(ix, jx).Value = 0
ix = ix + 1
Wend
ih = 2 'Номер строки на листе хтмл
While wh.Cells(ih, 1).Value <> "" 'Пробегаем по хтмл-ным строкам
ix = 2
While wx.Cells(ix, 1).Value <> wh.Cells(ih, 1).Value And wx.Cells(ix, 1).Value <> "" 'Ищем такой
ix = ix + 1
Wend
If wx.Cells(ix, 1).Value = "" Then 'Новая строка
wx.Cells(ix, 1).Value = wh.Cells(ih, 1).Value
End If
wx.Cells(ix, jx).Value = wh.Cells(ih, 2).Value 'Новое значение параметра
ih = ih + 1
Wend
wx.Range("A1").CurrentRegion.Sort Key1:=wx.Columns(1), Order1:=xlAscending, Header:=xlYes
Application.ScreenUpdating = True
End Sub
На, получай программу. Естественно, надо будет подогнать ее под твои данные.
Текс, на, получай спасибо. В понедельник помурыжу прогу, счас неохота работать.
На, получай программу.
Первый анализ:
Как я понимаю, прога напрямую работает с ХТМЛ. Так вот просьба, махонькая такая, переделай что-бы из екселя, с другого листа загрузка шла. Т.е. будто бы я копорнула из ХТМЛ в Ексел, причесала, и потом макрос заработал.
Но не выкладывай, самой охота дойти. Потом сравню.
Договорились.
Первый анализ:
Как я понимаю, прога напрямую работает с ХТМЛ. Так вот просьба, махонькая такая, переделай что-бы из екселя, с другого листа загрузка шла. Т.е. будто бы я копорнула из ХТМЛ в Ексел, причесала, и потом макрос заработал.
Но не выкладывай, самой охота дойти. Потом сравню.
Договорились.
Так она так и сделана.
Set wh = ThisWorkbook.Worksheets("HTML") - это типа лист в экселе так назван, на который хтмл был скопирован.
Так она так и сделана.
Set wh = ThisWorkbook.Worksheets("HTML") - это типа лист в экселе так назван, на который хтмл был скопирован.
Мда, стыдно прямо.
1. Название нового столбца = текущая дата, жирно и центрировано
2. Сравнение по двум столбцам. Т.е. равенство Двух первых столбцов друг другу является условием заполнения столбца.
Вообщем все тоже, но по двум столбцам.
По 1 пункту я сама попробую, а со вторым помоги, :)
Range(Cells(1, jx), Cells(1, jx)).Activate
ActiveCell.Font.Bold = True
ActiveCell.HorizontalAlignment = xlCenter
ActiveCell.VerticalAlignment = xlBottom
И еще, где в переменная которая отвечает за столбец с которого мы начинаем просматривать ХТМЛ данные? Что-то плохо врубаюсь нонче :(
Sub UpdateXL()
Dim wx As Worksheet, wh As Worksheet
Dim ix As Long, ih As Long, jx As Long
Application.ScreenUpdating = False
'Здесь поставишь правильные ссылки
Set wx = ThisWorkbook.Worksheets("XL")
Set wh = ThisWorkbook.Worksheets("HTML")
jx = 3 'Номер столбца на листе Эксель ***
While wx.Cells(1, jx).Value <> "" 'Ищем пустой
jx = jx + 1
Wend
wx.Range("C1").Copy Destination:=wx.Cells(1, jx) '***
wx.Cells(1, jx).Value = Date 'Сочиняем заголовок нового ***
ix = 2 'Номер строки на листе Эксель
While wx.Cells(ix, 1).Value <> "" 'Заполняем нулями новый столбец
wx.Cells(ix, jx).Value = 0
ix = ix + 1
Wend
ih = 2 'Номер строки на листе хтмл
While wh.Cells(ih, 1).Value <> "" 'Пробегаем по хтмл-ным строкам
ix = 2
While (wx.Cells(ix, 1).Value <> wh.Cells(ih, 1).Value Or _
wx.Cells(ix, 2).Value <> wh.Cells(ih, 2).Value) And wx.Cells(ix, 1).Value <> "" 'Ищем такой ***
ix = ix + 1
Wend
If wx.Cells(ix, 1).Value = "" Then 'Новая строка
wx.Cells(ix, 1).Value = wh.Cells(ih, 1).Value
wx.Cells(ix, 2).Value = wh.Cells(ih, 2).Value '***
End If
wx.Cells(ix, jx).Value = wh.Cells(ih, 3).Value 'Новое значение параметра '***
ih = ih + 1
Wend
wx.Range("A1").CurrentRegion.Sort Key1:=wx.Columns(1), Order1:=xlAscending, _
Key2:=wx.Columns(2), Order2:=xlAscending, Header:=xlYes '***
Application.ScreenUpdating = True
End Sub
Я строчки, которые изменились пометил ***.
По поводу жирноцентровыравнивания. В принципе, ты правильно делаешь. Разве что необязательно делать Activate. Вместо ля-ля.Activate более эстетично делать Set c = ля-ля (где с - типа Range), а дальше вместо Activecell.жик-жик делать c.жик-жик
Такой вариант будет чуть-чуть быстрее работать, чем твой. Но еще лучше (на мой взгляд) делать вот как: копировать формат с заглавной ячейки первого из твоих столбцов. Чем лучше? Во-первых, легче настраивать программу - если ты захочешь вдруг не жирноцентрированную, а подчеркнутокраснотаймсньюроманную, да чтоб дата была еще отформатирована dd.mm.yyyy, то просто меняешь формат имеющихся заголовков, и всё.
Во-вторых, ячейка, куда ты копируешь, может быть уже "испорчена" - например, пользователь уже там раньше все покрасил в зеленый цвет. Тогда надо делать предварительно .ClearFormats
В общем, делай как я советую. Вот.