Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сортировка с обновлением

269
28 ноября 2003 года
Greenering
892 / / 04.02.2003
Задача
Есть хтмл файл, вид - таблица, типа слово - число.
Файл Ексел присутствует.
Так вот.
Из хтмл"а надо загнать в ексел таким образом, что бы значения столбца "число" встало со значениями столбца "слово". Простую сортировку реализую - это не проблема. Но бывает такое, что встречаются уникальные слова. Тут мои познания "пас"уют :) (прикольно сказано). Как быть?
З.Ы. Вообщем это только начало. Задача расширится. если надо пример - предоставлю.
267
28 ноября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Тань, ничего не понятно.
269
28 ноября 2003 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by Cutty Sark
Тань, ничего не понятно.


Так, подробно:
В ескеле лежит, к примеру

Ст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


Жду вопросы.

269
28 ноября 2003 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by Cutty Sark
Тань, ничего не понятно.


В догонку,
Сравнение в ВБА к типу значений чувствительно?

267
28 ноября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by Greenering

В догонку,
Сравнение в ВБА к типу значений чувствительно?



Сравнение чувствительно к типу везде.
В любом языке программирования 111>12, но "111"<"12"

267
28 ноября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Что касается твоей задачи:

1. Делаешь Workbooks.Open FileName:="www.yandex.ru"

При этом твой хтмл каким-то образом раскинется по экселевскому листу. Приятных ощущений добавляет тот факт, что один и тот же хтмл может по-разному разложиться на лист в 97-м и 2000-м Экселе.

2. Находишь, куда попало начало твоей таблица.

Это может быть либо определенная ячейка (если формат хтмл абсолютно точно не меняется), либо искать какие-то уникальные слова (типа "Таблица 1")

3. Дальше анализируешь свою старую таблицу и новую, вносишь изменения.

4. Потом хтмл закрываешь.

С какими пунктами тебе помочь?
269
28 ноября 2003 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by Cutty Sark


Сравнение чувствительно к типу везде.
В любом языке программирования 111>12, но "111"<"12"


Ну З-Л-22-23 4ever :)
Читаем вопрос внимательно
Чувствительно к [крупно]типу значения[/крупно], а не к [крупно]значению[/крупно]
Чуем разницу, а ? :)

267
28 ноября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by Greenering

Ну З-Л-22-23 4ever :)
Читаем вопрос внимательно
Чувствительно к [крупно]типу значения[/крупно], а не к [крупно]значению[/крупно]
Чуем разницу, а ? :)



Извини, может я чего не понимаю, но мне кажется, что я ответил именно на твой вопрос. А что ты называешь "типом значения"?

269
28 ноября 2003 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by Cutty Sark
Что касается твоей задачи:

1. Делаешь Workbooks.Open FileName:="www.yandex.ru"

При этом твой хтмл каким-то образом раскинется по экселевскому листу. Приятных ощущений добавляет тот факт, что один и тот же хтмл может по-разному разложиться на лист в 97-м и 2000-м Экселе.

2. Находишь, куда попало начало твоей таблица.

Это может быть либо определенная ячейка (если формат хтмл абсолютно точно не меняется), либо искать какие-то уникальные слова (типа "Таблица 1")

3. Дальше анализируешь свою старую таблицу и новую, вносишь изменения.

4. Потом хтмл закрываешь.

С какими пунктами тебе помочь?


По 1 пункту
файл хтмл ручками закидываю в ексел и причесываю
2
Начало будет фиксированным
3
SOS
4
Да, это я не умею и 111<12 :)

269
28 ноября 2003 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by Cutty Sark


Извини, может я чего не понимаю, но мне кажется, что я ответил именно на твой вопрос. А что ты называешь "типом значения"?


Тип значения - integer
значение - 5
Да?

267
28 ноября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by Greenering

Тип значения - integer
значение - 5
Да?



Хм, сошлось... Ну и чем тебя не устроил мой ответ?
Если же ты имела в виду, важно ли иметь тип Integer или Long, Single или Double - то не важно.

269
28 ноября 2003 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by Cutty Sark


Хм, сошлось... Ну и чем тебя не устроил мой ответ?


Хех, ну вообщем, то вопрос был про типы, а не про значения, то что 111>22, без претензий :)

267
28 ноября 2003 года
Cutty Sark
1.2K / / 17.10.2002
На, получай программу. Естественно, надо будет подогнать ее под твои данные.

Код:
Option Explicit

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
269
28 ноября 2003 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by Cutty Sark
На, получай программу. Естественно, надо будет подогнать ее под твои данные.


Текс, на, получай спасибо. В понедельник помурыжу прогу, счас неохота работать.

269
28 ноября 2003 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by Cutty Sark
На, получай программу.


Первый анализ:
Как я понимаю, прога напрямую работает с ХТМЛ. Так вот просьба, махонькая такая, переделай что-бы из екселя, с другого листа загрузка шла. Т.е. будто бы я копорнула из ХТМЛ в Ексел, причесала, и потом макрос заработал.
Но не выкладывай, самой охота дойти. Потом сравню.
Договорились.

267
28 ноября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by Greenering

Первый анализ:
Как я понимаю, прога напрямую работает с ХТМЛ. Так вот просьба, махонькая такая, переделай что-бы из екселя, с другого листа загрузка шла. Т.е. будто бы я копорнула из ХТМЛ в Ексел, причесала, и потом макрос заработал.
Но не выкладывай, самой охота дойти. Потом сравню.
Договорились.



Так она так и сделана.
Set wh = ThisWorkbook.Worksheets("HTML") - это типа лист в экселе так назван, на который хтмл был скопирован.

269
28 ноября 2003 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by Cutty Sark


Так она так и сделана.
Set wh = ThisWorkbook.Worksheets("HTML") - это типа лист в экселе так назван, на который хтмл был скопирован.


Мда, стыдно прямо.

269
02 декабря 2003 года
Greenering
892 / / 04.02.2003
Сереж, условия чуть поменялись:
1. Название нового столбца = текущая дата, жирно и центрировано
2. Сравнение по двум столбцам. Т.е. равенство Двух первых столбцов друг другу является условием заполнения столбца.
Вообщем все тоже, но по двум столбцам.

По 1 пункту я сама попробую, а со вторым помоги, :)
269
02 декабря 2003 года
Greenering
892 / / 04.02.2003
По первому пункту: Может проще вариант есть?
 
Код:
wx.Cells(1, jx).Value = Date
Range(Cells(1, jx), Cells(1, jx)).Activate
ActiveCell.Font.Bold = True
ActiveCell.HorizontalAlignment = xlCenter
ActiveCell.VerticalAlignment = xlBottom


И еще, где в переменная которая отвечает за столбец с которого мы начинаем просматривать ХТМЛ данные? Что-то плохо врубаюсь нонче :(
267
02 декабря 2003 года
Cutty Sark
1.2K / / 17.10.2002
На, получай обновлённую версию.
Код:
Option Explicit

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
В общем, делай как я советую. Вот.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог