Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: Помогите сделать макрос для работы с текстом!  (Прочитано 42715 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
sergius25
Гость
« : 03-11-2006 17:54 » 

Помогите, пожалуйста, сделать макрос:

Макрос в Word вызывает файл F.xls, в котором находится заранее записанный макрос и передаёт ему управление. Этот макрос получает строчку, которая введена в Word, изменяет порядок слов в этом тексте на обратный и выводит каждое слово в ячейке. В тексте с изменённым порядком слов первая буква в первом слове должна быть большой, а первая и последняя буквы в последнем слове должны быть маленькими!
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 06-11-2006 12:28 » 

где затык?
в екселе есть такое Workbook_Open, отсюда и копай
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
sergius25
Гость
« Ответ #2 : 06-11-2006 12:44 » 

А как сделать, чтоб он передал управление макросу?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 06-11-2006 14:08 » 

так он сработает при открытии екселевского файла
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
sergius25
Гость
« Ответ #4 : 07-11-2006 10:43 » 

Как это? По-моему откроется только екселевский файл, а макрос, который прописан в этом екселевском файле нужно запускать отдельной командой!

И как сделать, чтобы этот макрос, нходящийся в екселевском файле, получил строчку, введенную в ворде?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 07-11-2006 13:05 » 

Open Event

Occurs when the workbook is opened.


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Catherine
Гость
« Ответ #6 : 10-11-2006 12:05 » 

Помогите сделать макрос в Wordе, который будет считать количество слов, подкрашенных другим цветом(не чёрным).другими словами есть табличка в документе Word. в неё помещены слова. Вручную изменяю цвет нескольких слов. Нужно составить макрос, который будет считать количество слов, выделенных другим цветом
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #7 : 10-11-2006 12:34 » 

где-то примерно так:

Код:
Sub Макрос()
cnt = 0

With ActiveDocument.Content.Find
    .ClearFormatting
    .MatchWholeWord = True
    .Font.Color = wdColorRed
    Do While .Execute(FindText:="", Forward:=True, _
            Format:=True) = True
        cnt = cnt + 1
        With .Parent
               .Move Unit:=wdCharacter, Count:=1
        End With
    Loop
End With

MsgBox cnt

End Sub

или нужно именно "не чёрным"?
« Последнее редактирование: 10-11-2006 12:37 от PooH » Записан

Удачного всем кодинга! -=x[PooH]x=-
Catherine
Гость
« Ответ #8 : 11-11-2006 10:34 » 

спасибо большое. Лучше, конечно "не чёрным". и ещё одна просьба: можешь объяснить, что делаешь в циклу Do ... While. Я что-то не совсем поняла эту процедуру. Если не сложно, конечно.
Записан
Catherine
Гость
« Ответ #9 : 11-11-2006 10:36 » 

мне просто нужно ещё комментарии к проге написать, а для этого нужно как минимум понять, как это всё работает.
Записан
sergius25
Гость
« Ответ #10 : 12-11-2006 09:51 » 

Цитата
Помогите, пожалуйста, сделать макрос:

Макрос в Word вызывает файл F.xls, в котором находится заранее записанный макрос и передаёт ему управление. Этот макрос получает строчку, которая введена в Word, изменяет порядок слов в этом тексте на обратный и выводит каждое слово в ячейке. В тексте с изменённым порядком слов первая буква в первом слове должна быть большой, а первая и последняя буквы в последнем слове должны быть маленькими!

Я сделал следующее:

В макросе, который выполянется в Word для выделенного текста следующий код:

Dim e As Object
Dim s As String

s = Selection.Words.Parent

Set e = CreateObject("Excel.Application")
e.workbooks.Open ("D:\F.xls")
e.Visible = True
e.Run "WordRevers", s
Set e = Nothing

Т.е. он открывает файл F.xls и запускает макрос WordRevers. А что теперь прописать в этом макросе для того чтобы он изменил порядок слов выделенного текста в Word и вставил каждое слово текста с изменённым порядком слов в отдельную ячейку?
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #11 : 15-11-2006 09:46 » 

Catherine, в цикле увеличивается счетчик и происходит смещение текущей позиции на "один символ после выделения". А если не сделать "сдвиг" Execute ,будет постоянно возвращать одно и тоже выделение. Но у этого стособа есть недостатки. Во-первый, мне кажется нельзя сделать "не черным", а во-вторых, если окрашивать только части слова, то может посчитаться не правильно.  Мне кажется, есть "коллекция слов", тебе нужно по ней пройтись и проверить цвет. То есть, все можно сделать даже проще:

Код:
Sub TEST()
cnt = 0

For Each wrd In ActiveDocument.Content.Words
 If wrd.Font.Color > 0 Then
 cnt = cnt + 1
 End If
Next wrd

MsgBox cnt

End Sub

Есть одно НО, надо сначано все сделать "черным", а потом выделять.
« Последнее редактирование: 16-11-2006 12:01 от PooH » Записан

Удачного всем кодинга! -=x[PooH]x=-
Catherine
Гость
« Ответ #12 : 16-11-2006 11:16 » 

Спасибо, PooH, огромное. я стала проверять ещё ваш послдений код, который вы написали. Там не всё гладко. Если в таблице 3 окрашенных слова, то макрос считает 4, т.е. на 1 слово больше. Возможно, там не учтён символ послдений или ещё что-то в этом роде.
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #13 : 16-11-2006 12:00 » 

Как я заметил, туда может попать еще и спец символ.

Попробуй поставить перед(или после) "cnt=cnt+1" "MsgBox wrd.Text"

И не забывай про "НО", коророе я описал.
Записан

Удачного всем кодинга! -=x[PooH]x=-
Catherine
Гость
« Ответ #14 : 17-11-2006 13:26 » 

Спасибо большое. Правда, то, что ты сказал вставить работает не совсем так. Этот макрос выводит слова, подкрашенные разными количествами. Он не считает их количество.
Всё равно спасибо.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 17-11-2006 14:01 » 

Catherine, ты не внимательно читаешь посты
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Naghual
Модератор

ua
Offline Offline
Пол: Мужской
ОПТИМИСТ


WWW
« Ответ #16 : 18-11-2006 12:05 » 

Deemon, Ваш пост удален.
Ознакомтесь с правилами раздела.

Catherine, так как вы создали свою тему в этом посте ДО публикации правил раздела, к вам подобное действие не применимо.
Впредь, пожалуйста, следуйте правилам.
 
« Последнее редактирование: 18-11-2006 12:53 от Naghual » Записан
Catherine
Гость
« Ответ #17 : 18-11-2006 12:19 » 

Sla, я не поняла, что ты имеешь в виду
Записан
sergius25
Гость
« Ответ #18 : 21-11-2006 19:29 » 

Мне кто-нибудь поможет решить задачу?
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #19 : 22-11-2006 06:41 » 

Мне кто-нибудь поможет решить задачу?

Код:
    Dim e As Excel.Application
    Dim wb As Excel.Workbook

    'открываем и запускаем
    Set e = New Excel.Application
    e.Visible = true
    Set wb = e.Workbooks.Add("Путь к файлу Excel")
           
    e.Run "Вызываемый макрос", Param1, Param2, Param3,...., ParamN
 
    ...
    e.Quit
    set e = nothing
   

P.S.:вызываемый макрос лучше прописывать так MyExcelFile.xls!MyMacros (т.е. сначала имя файла, где находится макрос, потом "восклицательный знак", потом имя макроса, который вызываете) ИМХО

« Последнее редактирование: 16-12-2007 14:22 от Алексей1153++ » Записан

I Have Nine Lives You Have One Only
THINK!
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #20 : 22-11-2006 07:01 » 

Цитата
Помогите, пожалуйста, сделать макрос:

Макрос в Word вызывает файл F.xls, в котором находится заранее записанный макрос и передаёт ему управление. Этот макрос получает строчку, которая введена в Word, изменяет порядок слов в этом тексте на обратный и выводит каждое слово в ячейке. В тексте с изменённым порядком слов первая буква в первом слове должна быть большой, а первая и последняя буквы в последнем слове должны быть маленькими!

Я сделал следующее:

В макросе, который выполянется в Word для выделенного текста следующий код:

Dim e As Object
Dim s As String

s = Selection.Words.Parent

Set e = CreateObject("Excel.Application")
e.workbooks.Open ("D:\F.xls")
e.Visible = True
e.Run "WordRevers", s
Set e = Nothing

Т.е. он открывает файл F.xls и запускает макрос WordRevers. А что теперь прописать в этом макросе для того чтобы он изменил порядок слов выделенного текста в Word и вставил каждое слово текста с изменённым порядком слов в отдельную ячейку?

Извините не заметил этот пост

Тогда сам макрос
Код:
Public Sub WordRevers(s As String)

    Dim ar() As String
    Dim i As Integer
    Dim sTmp As String
       
    'разбиваем предложение на слова
    ar = Split(s, " ")

    For i = LBound(ar) To UBound(ar)
        sTmp = ar(UBound(ar) - i)
       
        'выаполняем условие про большие и маленькие буквы
       
        'если последенее слово, то делаем первую букву большой
        If i = LBound(ar) Then sTmp = UCase(Left(sTmp, 1)) + Mid(sTmp, 2)
       
        'если первое слово, то делаем все буквы маленькими
        If i = UBound(ar) Then sTmp = LCase(sTmp)
       
        'пишем результат
        ThisWorkbook.Worksheets(1).Range("A" & CStr(i + 1)).Value = sTmp
    Next i

End Sub
« Последнее редактирование: 16-12-2007 14:24 от Алексей1153++ » Записан

I Have Nine Lives You Have One Only
THINK!
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #21 : 22-11-2006 08:21 » 

вот еще, как вариант:
Код:
Sub MTest(m_str As String)

Selection.InsertAfter m_str
Set OrigSel = Selection.Range

Dim aux_str
For i = Selection.Words.Count To 1 Step -1
    aux_str = aux_str + " " + Trim(Selection.Words(i).Text)
Next i
aux_str = LTrim(aux_str)

Selection.Range.Delete
Selection.InsertAfter aux_str

Set OrigSel = Selection.Range

OrigSel.Words(1).Characters(1).Case = wdUpperCase
OrigSel.Words(OrigSel.Words.Count).Characters(1).Case = wdLowerCase
OrigSel.Words(OrigSel.Words.Count).Characters(OrigSel.Words(OrigSel.Words.Count).Characters.Count).Case = wdLowerCase

For Each wrd In OrigSel.Words
    wrd.ConvertToTable
Next wrd

End Sub
Записан

Удачного всем кодинга! -=x[PooH]x=-
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 22-11-2006 09:20 » 

sergius25 опиши проблему
я тебе дал совет, ты пошел по другому пути. Далее ты не сказал что не получилось и не РАССКАЗАЛ что делал
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
sergius25
Гость
« Ответ #23 : 25-11-2006 15:08 » 

HandKot
Огромнейшее Вам спасибо!
Но, что нужно изменить в строке ThisWorkbook.Worksheets(1).Range("A" & CStr(i + 1)).Value = sTmp, чтобы слова выводились в строку, а не в столбец!

PooH
Большое спасибо!
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #24 : 27-11-2006 06:42 » new

HandKot
Огромнейшее Вам спасибо!
Но, что нужно изменить в строке ThisWorkbook.Worksheets(1).Range("A" & CStr(i + 1)).Value = sTmp, чтобы слова выводились в строку, а не в столбец!

PooH
Большое спасибо!

мдя...народ совсем обленился С ума сойти...
Код:
ThisWorkbook.Worksheets(1).Cells(1, i + 1) = sTmp
Записан

I Have Nine Lives You Have One Only
THINK!
sergius25
Гость
« Ответ #25 : 01-12-2006 16:53 » 

Спасибо большое!

А как теперь сделать тоже самое задание, только текст введён не в ворде, а в Delphi? Т.е. весь код содержится в макросе Excel_я, а работать нужно с тектсом, который введён в Delphi.
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #26 : 04-12-2006 06:31 » 

Думаю так же как и в Ворде.
Объявить переменную в Делфи как Ексель
и так же работать
Записан

I Have Nine Lives You Have One Only
THINK!
sergius25
Гость
« Ответ #27 : 06-12-2006 13:57 » 

Цитата
Объявить переменную в Делфи как Ексель
А как её объявить?
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #28 : 07-12-2006 08:19 » 

Цитата
Объявить переменную в Делфи как Ексель
А как её объявить?

Как объявляются любые переменные в любых (во многих) языках программирования
Записан

I Have Nine Lives You Have One Only
THINK!
sergius25
Гость
« Ответ #29 : 10-12-2006 17:38 » 

Ну а как это в делфи сделать?
Записан
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines