sergius25
Гость
|
|
« : 03-11-2006 17:54 » |
|
Помогите, пожалуйста, сделать макрос:
Макрос в Word вызывает файл F.xls, в котором находится заранее записанный макрос и передаёт ему управление. Этот макрос получает строчку, которая введена в Word, изменяет порядок слов в этом тексте на обратный и выводит каждое слово в ячейке. В тексте с изменённым порядком слов первая буква в первом слове должна быть большой, а первая и последняя буквы в последнем слове должны быть маленькими!
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #1 : 06-11-2006 12:28 » |
|
где затык? в екселе есть такое Workbook_Open, отсюда и копай
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
sergius25
Гость
|
|
« Ответ #2 : 06-11-2006 12:44 » |
|
А как сделать, чтоб он передал управление макросу?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #3 : 06-11-2006 14:08 » |
|
так он сработает при открытии екселевского файла
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
sergius25
Гость
|
|
« Ответ #4 : 07-11-2006 10:43 » |
|
Как это? По-моему откроется только екселевский файл, а макрос, который прописан в этом екселевском файле нужно запускать отдельной командой!
И как сделать, чтобы этот макрос, нходящийся в екселевском файле, получил строчку, введенную в ворде?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #5 : 07-11-2006 13:05 » |
|
Open Event
Occurs when the workbook is opened.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Catherine
Гость
|
|
« Ответ #6 : 10-11-2006 12:05 » |
|
Помогите сделать макрос в Wordе, который будет считать количество слов, подкрашенных другим цветом(не чёрным).другими словами есть табличка в документе Word. в неё помещены слова. Вручную изменяю цвет нескольких слов. Нужно составить макрос, который будет считать количество слов, выделенных другим цветом
|
|
|
Записан
|
|
|
|
PooH
Глобальный модератор
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
Глобальный модератор
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
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #13 : 16-11-2006 12:00 » |
|
Как я заметил, туда может попать еще и спец символ.
Попробуй поставить перед(или после) "cnt=cnt+1" "MsgBox wrd.Text"
И не забывай про "НО", коророе я описал.
|
|
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
Catherine
Гость
|
|
« Ответ #14 : 17-11-2006 13:26 » |
|
Спасибо большое. Правда, то, что ты сказал вставить работает не совсем так. Этот макрос выводит слова, подкрашенные разными количествами. Он не считает их количество. Всё равно спасибо.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #15 : 17-11-2006 14:01 » |
|
Catherine, ты не внимательно читаешь посты
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Naghual
|
|
« Ответ #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
Молодой специалист
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
Молодой специалист
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
Глобальный модератор
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
|
|
« Ответ #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
Молодой специалист
Offline
|
|
« Ответ #24 : 27-11-2006 06:42 » |
|
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
Молодой специалист
Offline
|
|
« Ответ #26 : 04-12-2006 06:31 » |
|
Думаю так же как и в Ворде. Объявить переменную в Делфи как Ексель и так же работать
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
sergius25
Гость
|
|
« Ответ #27 : 06-12-2006 13:57 » |
|
Объявить переменную в Делфи как Ексель А как её объявить?
|
|
|
Записан
|
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #28 : 07-12-2006 08:19 » |
|
Объявить переменную в Делфи как Ексель А как её объявить? Как объявляются любые переменные в любых (во многих) языках программирования
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
sergius25
Гость
|
|
« Ответ #29 : 10-12-2006 17:38 » |
|
Ну а как это в делфи сделать?
|
|
|
Записан
|
|
|
|
|