Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » Office | страница 16
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 16 из 18
На страницу: Пред.  1, 2, 3 ... 15, 16, 17, 18  След.    Перейти:   Все страницы
Поиск в этой теме:
Железный канал: «Office»
Alex A. Florov
 970 EGP


Рейтинг канала: 5(187)
Репутация: 220
Сообщения: 5662
Откуда: [Харьков,UA]
Зарегистрирован: 24.03.2003
файлы случаем не разролись до двух гигов?
_________________
-= Errare humanum est... =-
    Добавлено: 22:15 26-10-2011   
Dymon
 1177 EGP


Модератор
Рейтинг канала: 3(25)
Репутация: 238
Сообщения: 5296
Откуда: точка
Зарегистрирован: 14.10.2004
ZIP :
Вот тут вроде описывается решение:

Спасибо, помогло. Улыбка
_________________
Геолух-газовик, нефтяник и ретроГад Лебедев.
А ещё - злобный тупой дурак. :)
    Добавлено: 07:10 28-10-2011   
Снуч
 941 EGP


Киборг
Рейтинг канала: 5(100)
Репутация: 232
Сообщения: 2696
Откуда: Ракслатенон
Зарегистрирован: 09.08.2005
что-то не пойму, почему Exel игнорит закрытие цикла For.. Next

Код:
Private Sub Workbook_Open()
    Dim newa, i, k, index As Integer
    Dim switch As Boolean
    Dim wordTofind As String, listName As String, lLastrow As Integer
    listName = ThisWorkbook.ActiveSheet.Name
    lLastrow = Cells(Rows.Count, 1).End(xlUp).Row
For index = 2 To lLastrow
Cells.Find(What:="value", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
k = ActiveCell.Row
Dim Strr As String
Strr = ActiveCell.Value
Strr = Replace(Strr, "<value>", "")
Strr = Replace(Strr, "</value>", "")
Cells(k, 2).Value = Val(Strr)
Next
End Sub
гоняет по кругу и не парится, что цикл закончился. может где в настройках чего не то?

p.s. на работе всё нормально завершает. на домашнем компе - крутит счётчик.

Последний раз редактировалось: Снуч (20:11 18-02-2012), всего редактировалось 3 раз(а)
    Добавлено: 20:09 18-02-2012   
Криптон
 995 EGP


Рейтинг канала: 5(116)
Репутация: 164
Сообщения: 2665
Откуда: Москва
Зарегистрирован: 05.04.2008
А если исправить
Next
на
Next index
?
    Добавлено: 20:42 18-02-2012   
Снуч
 941 EGP


Киборг
Рейтинг канала: 5(100)
Репутация: 232
Сообщения: 2696
Откуда: Ракслатенон
Зарегистрирован: 09.08.2005
всё гениальное просто.

но, в двойном цикле такое не прокатывает
Код:
Private Sub Workbook_Open()
    Dim newa, i, k, index As Integer
    Dim switch As Boolean
    Dim wordTofind As String, listName As String, lLastrow As Integer
    listName = ThisWorkbook.ActiveSheet.Name
' çàïîìèíàåì íîìåð ïîñëåäíåé çàïîëíåííîé ÿ÷åéêè â ñòîëáöå À
    lLastrow = Cells(Rows.Count, 1).End(xlUp).Row
For index = 2 To lLastrow
Cells.Find(What:="measuringchannel", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
For i = 1 To 145
Cells.Find(What:="value", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
' îáðàáàòûâàåì ñòðî÷íîå çíà÷åíèå òàê, ÷òîáû îñòàëîñü ëèøü ÷èñëî
k = ActiveCell.Row
Dim Strr As String
Strr = ActiveCell.Value
Strr = Replace(Strr, "<value>", "")
Strr = Replace(Strr, "</value>", "")
Cells(k, 2).Value = Val(Strr)
Next i
Next index
End Sub


добавлено спустя 7 минут:
п.с. дело в том, что считывается содержимое ХМЛ документа в А столбец построчно, строки примерно такие:
Код:
<measuringchannel example for>
<trampampam>
<value>1111</value>

p.s. пока что влом писать/искать ХМЛ-парсер, но если придется то ладно..

Последний раз редактировалось: Снуч (20:52 18-02-2012), всего редактировалось 3 раз(а)
    Добавлено: 20:51 18-02-2012   
Криптон
 995 EGP


Рейтинг канала: 5(116)
Репутация: 164
Сообщения: 2665
Откуда: Москва
Зарегистрирован: 05.04.2008
[режим занудствования включён]
Не хватает описания:
1)Что ожидалось получить
2)Что наблюдается в реале

"такое не прокатывает" - слишком расплывчато

Последний раз редактировалось: Криптон (21:07 18-02-2012), всего редактировалось 1 раз
    Добавлено: 21:06 18-02-2012   
Снуч
 941 EGP


Киборг
Рейтинг канала: 5(100)
Репутация: 232
Сообщения: 2696
Откуда: Ракслатенон
Зарегистрирован: 09.08.2005
ожидалось: чтобы оба цикла выполнились и случился End Sub
наблюдается: после открытия файла, основной цикл повторяется до бесконечности, то есть index доходит до lLastrow и заново.. на работе такое не случалось, но там office2003, а дома 2007. соответственно, exel и vba соответствуют.
    Добавлено: 21:10 18-02-2012   
Криптон
 995 EGP


Рейтинг канала: 5(116)
Репутация: 164
Сообщения: 2665
Откуда: Москва
Зарегистрирован: 05.04.2008
Я, видимо, чего-то не понимаю, но смысл макроса представляется мне достаточно загодочным.
Значит, как я вижу ситуацию:
За один проход внешнего цикла мы отыскиваем первую (от текущей активной ячейки) ячейку, содержащую "measuringchannel".
Далее мы находим 145 следующих ячеек, содержащих "value". Если ячеек с "value" не хватает, то поиск начинается с первой строки листа.
И всю эту бодягу мы повторяем (<кол-во заполненных строк> -1) раз, что как минимум в 145 раз больше необходимого.
Не удивительно, что курсор мечется по таблице сверху вниз раз за разом.

Но, возможно, я и в самом деле нифига не понимаю. Сколько строк в файле? Сколько раз там повторяется measuringchannel? Верно ли, что между всеми measuringchannel ровно 145 value?

добавлено спустя 5 минут:
На тестовом файле из 20 строк 2755 прогонов внутреннего цикла Совсем запутался...

Последний раз редактировалось: Криптон (21:52 18-02-2012), всего редактировалось 2 раз(а)
    Добавлено: 21:51 18-02-2012   
Снуч
 941 EGP


Киборг
Рейтинг канала: 5(100)
Репутация: 232
Сообщения: 2696
Откуда: Ракслатенон
Зарегистрирован: 09.08.2005
Криптон :
За один проход внешнего цикла мы отыскиваем первую (от текущей активной ячейки) ячейку, содержащую "measuringchannel".
Далее мы находим 145 следующих ячеек, содержащих "value". Если ячеек с "value" не хватает, то поиск начинается с первой строки листа.
нашли указатель, один из двух (А+ и Р+), далее считали значения и преобразовали текст к цифровому значению. далее следует хитрость с true-false, и снова мы на на указателе, после которого считывается 146 ячеек, треть из которых с тегами value, и так далее до последней строки в столбце А. но вот ведь, после прохода по всем ячекам цикл запускается заново... может вначале макроса указать, чтобы стопился по признаку какому? а то первый цикл он заканчивает, а потом заново его начинает..
    Добавлено: 22:37 18-02-2012   
Криптон
 995 EGP


Рейтинг канала: 5(116)
Репутация: 164
Сообщения: 2665
Откуда: Москва
Зарегистрирован: 05.04.2008
Но мы же не перебираем все ячейки. Мы всё время ищем соответствующие критериям.
Я бы предложил такой вариант, с заменой For...next на do...loop until:
Код:

Private Sub Workbook_Open()
     Dim newa, i, k, index,MRow As Integer
     Dim switch As Boolean
     Dim wordTofind As String, listName As String, lLastrow As Integer
     listName = ThisWorkbook.ActiveSheet.Name
 ' caiiieiaai iiia? iineaaiae caiieiaiiie y?aeee a noieaoa A
     lLastrow = Cells(Rows.Count, 1).End(xlUp).Row

 MRow = 0
 Do
 Cells.Find(What:="measuringchannel", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
 :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
 False, SearchFormat:=False).Activate
 i = 1
 if ActiveCell.Row>MRow then
   MRow = ActiveCell.Row
 End If
 Do
 Cells.Find(What:="value", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
 :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
 False, SearchFormat:=False).Activate
 ' ia?aaaouaaai no?i?iia cia?aiea oae, ?oiau inoaeinu eeou ?enei
 k = ActiveCell.Row
 Dim Strr As String
 Strr = ActiveCell.Value
 Strr = Replace(Strr, "<value>", "")
 Strr = Replace(Strr, "</value>", "")
 Cells(k, 2).Value = Val(Strr)
 i = i + 1
 Loop Until (i > 145) Or (ActiveCell.Row >= lLastrow) Or (ActiveCell.Row < MRow)
 Loop Until (ActiveCell.Row >= lLastrow) Or (ActiveCell.Row < MRow)
End Sub


добавлено спустя 1 минуту:
Конечно, это всё равно не идеальный вариант, но, по-моему, лучше предыдущего.

добавлено позже
внесены исправления

Последний раз редактировалось: Криптон (23:54 18-02-2012), всего редактировалось 3 раз(а)
    Добавлено: 23:24 18-02-2012   
Dimaxx
 980 EGP


Рейтинг канала: 8(868)
Репутация: 204
Сообщения: 5727
Откуда: Северодвинск
Зарегистрирован: 26.06.2002
Снуч :
пока что влом писать/искать ХМЛ-парсер

А зачем искать, когда в винде есть свой хмл. В редакторе в меню Tools - References. Там отметить галочкой "Microsoft XML, v3.0". Далее пишем нечто подобное (делал для парсинга цен на миники в EVE):

Код:
Private Sub Workbook_Open()
  Dim XMLDoc As DOMDocument
  Dim ObjectNodeList As IXMLDOMNodeList
  Dim ObjectNode As IXMLDOMElement
  Dim PropertyNode As IXMLDOMElement
  Dim S1, S2 As String
  Dim I
     
Set XMLDoc = New DOMDocument
XMLDoc.Load "http://api.eve-central.com/api/evemon/"
  I = Timer
  Do While Timer < I + 3
    DoEvents  ' обеспечивает параллельное выполнение других процессов
  Loop
  Set ObjectNodeList = XMLDoc.documentElement.selectNodes("mineral")
  If ObjectNodeList.Length > 0 Then
    For Each ObjectNode In ObjectNodeList
      For Each PropertyNode In _
        ObjectNode.selectNodes("name")
        S1 = LCase(PropertyNode.Text)
      Next
      For Each PropertyNode In _
        ObjectNode.selectNodes("price")
        S2 = PropertyNode.Text
      Next
      If S1 = "tritanium" Then
        ThisWorkbook.Worksheets("Data").Range("C50").Value = S2
      End If
      If S1 = "pyerite" Then
        ThisWorkbook.Worksheets("Data").Range("D50").Value = S2
      End If
      If S1 = "mexallon" Then
        ThisWorkbook.Worksheets("Data").Range("E50").Value = S2
      End If
      If S1 = "isogen" Then
        ThisWorkbook.Worksheets("Data").Range("F50").Value = S2
      End If
      If S1 = "nocxium" Then
        ThisWorkbook.Worksheets("Data").Range("G50").Value = S2
      End If
      If S1 = "zydrine" Then
        ThisWorkbook.Worksheets("Data").Range("H50").Value = S2
      End If
      If S1 = "megacyte" Then
        ThisWorkbook.Worksheets("Data").Range("I50").Value = S2
      End If
      If S1 = "morphite" Then
        ThisWorkbook.Worksheets("Data").Range("J50").Value = S2
      End If
    Next
  End If
End Sub

_________________
"Если мы не покончим с войной, война покончит с нами." Г. Г. Уэллс

Последний раз редактировалось: Dimaxx (23:27 18-02-2012), всего редактировалось 1 раз
    Добавлено: 23:26 18-02-2012   
Снуч
 941 EGP


Киборг
Рейтинг канала: 5(100)
Репутация: 232
Сообщения: 2696
Откуда: Ракслатенон
Зарегистрирован: 09.08.2005
референсы не помогают - придётся изучать DOM-модель под VBA.

Последний раз редактировалось: Снуч (15:42 21-02-2012), всего редактировалось 1 раз
    Добавлено: 15:40 21-02-2012   
3d.Maxuz
 1032 EGP


Рейтинг канала: 3(25)
Репутация: 47
Сообщения: 6023
Откуда: Краматорск, Донецкая область!
Зарегистрирован: 28.09.2004
Есть задача - раскидать значения с одного листа в заданные ячейки других листов этой же книги.
Исходные данные.
Столбец А с названиями листов.
Столбец B со значениями для каждого листа.
Нужно значения установить в ячейку А1 на каждом из листов данного списка.

добавлено спустя 34 минуты:
Пытался и вручную записать похожий макрос, но тогда получаются фиксированные указатели на листы, и значения.

Может кто с кодом помочь?
_________________
Гоп-стоп, мы подошли из-за угла,
Гоп-стоп...

Последний раз редактировалось: 3d.Maxuz (14:46 05-09-2014), всего редактировалось 1 раз
    Добавлено: 14:46 05-09-2014   
Voha
 930 EGP


Модератор
Рейтинг канала: 9(1032)
Репутация: 167
Сообщения: 4917
Откуда: Moscow, Russia
Зарегистрирован: 15.02.2001
Лень меня сподвигает вопросить помощи коллективного разума. А то перлом я могу, а вбс-ом как-то не очень, читать надо всякое Улыбка За помощь - спасибки, ежопки, пиво-шоколадки (это если меня поймать Улыбка) и просто благодарность.
Вводная: есть клетка с произвольным образом представленным телефонным номером. 1234567890 или 123-456-7890 или 8(123)456-78-90 или +7123 456-7890 или 7 123 45 67890 или еще как-то.
Нужно: нажатием комбинации клавиш (типа Ctrl+Ж) превратить ее содержимое в текст вида +7(123)4567890. Т.е. из строки в ячейке выбрать цифры, 7 штук справа поставить подряд, 8-10-ю справа взять в скобки, полученный набор вида (123)4567890 дополнить слева +7 и получившееся +7(123)4567890 поместить в ту же ячейку. Если цифр меньше 10 или больше 11 - хрюкнуть звуковым сигналом и не делать с содержимым ничего. Хрюкать - опционально, можно просто не делать ничего.
Ограничения: использовать чудеса "Формат ячеек -> Дополнительный -> номер телефона" (как и вообще "Формат ячеек") нельзя. Формат должен остаться обычным текстом.
_________________
Time will show...
    Добавлено: 14:53 05-09-2014   
3d.Maxuz
 1032 EGP


Рейтинг канала: 3(25)
Репутация: 47
Сообщения: 6023
Откуда: Краматорск, Донецкая область!
Зарегистрирован: 28.09.2004
Voha :
а вбс-ом как-то не очень,
это решается не вбсом, а формулами. Сейчас у самого времени нет, но на вскидку "заменить" плюс поискпозиции. Поройся в описании текстовых формул. А вобще для начала хорошо бы привести все к единому виду, поубирав тире, скобки, пробелы и плюсы через найти и заменить.
_________________
Гоп-стоп, мы подошли из-за угла,
Гоп-стоп...
    Добавлено: 15:07 05-09-2014   
Voha
 930 EGP


Модератор
Рейтинг канала: 9(1032)
Репутация: 167
Сообщения: 4917
Откуда: Moscow, Russia
Зарегистрирован: 15.02.2001
3d.Maxuz :
А вобще для начала хорошо бы привести все к единому виду, поубирав тире, скобки, пробелы и плюсы через найти и заменить.
Not a chance. Т.е. так конечно можно, если у тебя стопиццот клеток с телефонами и нужно их все рано или поздно привести к единому формату. Но workflow, где применяется задача - он другой. Необходимо в один момент времени одну клетку модифицировать. Это автоматизация одной, но достаточно часто случайно встречающейся операции - и хочется, чтоб выполнялась она не сложнее вставки текущей даты.
Собственно, по этим же причинам она и формулами не решается. Да и исходник строк чуть шире - в нем может быть текст ("тел. 1234567890" или "81234567890, Сергей")
_________________
Time will show...
    Добавлено: 15:24 05-09-2014   
ratmane2012
 272 EGP


Рейтинг канала: 4(80)
Репутация: 31
Сообщения: 707
Откуда: Красная планета
Зарегистрирован: 03.07.2012
Вопросик такой. У меня есть огромная страница ссылок в Ворде, но они не кликабельны, то есть не гиперссылки. Можно ли их как-то все выделить и какой-нибудь комбинацией клавишь превратить в гиперссылки? Иначе мне приходится ставить курсор после каждой ссылки и нажимать энтер, чтобы она стала гиперссылкой.. Расстроен
    Добавлено: 14:11 13-02-2015   
Grebomet
 1460 EGP


Модератор
Рейтинг канала: 8(753)
Репутация: 261
Сообщения: 4765
Откуда: Питербурх
Зарегистрирован: 06.01.2003
ratmane2012 :
Можно ли их как-то все выделить и какой-нибудь комбинацией клавишь (убил бы!) превратить в гиперссылки?

Комбинацией клавиш - нет.
Можно сконвертировать скриптом, но для этого его надо сначала написать.
Вот тут народ под конкретный случай что-то писал, но оно не очень работало: http://stackoverflow.com/questions/17119497/word-macro-to-convert-text-into-hyperlinks
_________________
Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов.
    Добавлено: 15:03 13-02-2015   
ratmane2012
 272 EGP


Рейтинг канала: 4(80)
Репутация: 31
Сообщения: 707
Откуда: Красная планета
Зарегистрирован: 03.07.2012
Жалко, спасибо - скрипты я тоже не умею писать.. Расстроен
    Добавлено: 15:40 13-02-2015   
Dimaxx
 980 EGP


Рейтинг канала: 8(868)
Репутация: 204
Сообщения: 5727
Откуда: Северодвинск
Зарегистрирован: 26.06.2002
Проще простого (для 2003 офиса). Выделяем весь текст со ссылками. Идем Формат -> Автоформат. Жмем ОК и получаем тучу ссылок.
_________________
"Если мы не покончим с войной, война покончит с нами." Г. Г. Уэллс
    Добавлено: 21:31 13-02-2015   
Железный канал: «Office»
На страницу: Пред.  1, 2, 3 ... 15, 16, 17, 18  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Что-то дельное сказать хотел, а пока весь флуд прочитал, ничего дельного в голове не осталось... (расстроился $atana)

  » Office | страница 16
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18