== == File of "Microsoft Word Objects" aka ThisDocument: Форум_GallopeRU_v001.cls == == VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = "Форум_GallopeRU_v001" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = True ' _v001 -- 1) поддержка текстованных urlов; они синие и подчёркиваются (порядок тэгов для форума важен) ' 2) убрал маленький шрифт для форумтэгов (нафига, когда они undoца) ' подключаемся к событиям окон, для ловли выделения (больше ничего Word не может предложить) Dim События As New Класс_Событий Sub Document_Open() Set События.прога = Word.Application End Sub == == File of "Class Modules": Класс_Событий.cls == == VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = "Класс_Событий" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = False Attribute VB_Exposed = False Public WithEvents прога As Word.Application Attribute прога.VB_VarHelpID = -1 Sub прога_WindowSelectionChange(ByVal Sel As Selection) Dim i, j, s, d, возврат, имя If Len(Sel.Range.Document.Content.Text) = Len(Sel.Text) Then параментры_поста.Show If параментры_поста.Tag <> "АГА" Then Exit Sub End If If Right(параментры_поста.адрес, 1) <> "/" Then параментры_поста.адрес = параментры_поста.адрес & "/" End If ActiveDocument.Save имя = ActiveDocument.Path + "\" + ActiveDocument.Name d = ActiveDocument.Path + "\" + "Картинки-" & ActiveDocument.Name Set fs = CreateObject("Scripting.FileSystemObject") On Error Resume Next ' вЫрубаем ошибки fs.DeleteFolder ActiveDocument.Path + "\" + d + ".files" On Error GoTo 0 ' врубаем ошибки ActiveDocument.SaveAs FileName:=d + ".htm", FileFormat:=wdFormatFilteredHTML, AddToRecentFiles:=False возврат = 0 ' жирный Sel.HomeKey Unit:=wdStory With Sel.Find .ClearFormatting .Font.Bold = True Do While .Execute(FindText:="", Forward:=True, Format:=True, Wrap:=wdFindStop) = True i = Len(Sel.Text) With .Parent .InsertBefore "[b]" .InsertAfter "[/b]" End With Selection.MoveRight Unit:=wdCharacter, Count:=1 возврат = возврат + 2 Loop End With ' курсив Sel.HomeKey Unit:=wdStory With Sel.Find .ClearFormatting .Font.Italic = True Do While .Execute(FindText:="", Forward:=True, Format:=True, Wrap:=wdFindStop) = True i = Len(Sel.Text) With .Parent .InsertBefore "[i]" .InsertAfter "[/i]" End With Selection.MoveRight Unit:=wdCharacter, Count:=1 возврат = возврат + 2 Loop End With ' подчёркнутый Sel.HomeKey Unit:=wdStory With Sel.Find .ClearFormatting .Font.Underline = wdUnderlineSingle Do While .Execute(FindText:="", Forward:=True, Format:=True, Wrap:=wdFindStop) = True i = Len(Sel.Text) With .Parent .InsertBefore "[u]" .InsertAfter "[/u]" End With Selection.MoveRight Unit:=wdCharacter, Count:=1 возврат = возврат + 2 Loop End With ' картинки i = 0 j = Dir(d + ".files\image*.*") For Each картинка In ActiveDocument.InlineShapes Dim f s = Right(j, 4) If картинка.AlternativeText = "" Then ' формируем туповатое имя и расширение f = параментры_поста.имя + VBA.CStr(i) + s s = vbCrLf + "[img]" + параментры_поста.адрес + f + "[/img]" Else ' альтернативный текст -- это имя файла картинки, и оно должно быть похоже на имя для Винды f = VBA.Replace(VBA.Replace(картинка.AlternativeText, " ", "_"), ":", "") f = VBA.Replace(VBA.Replace(VBA.Replace(VBA.Replace(f, "\", ""), "/", ""), "?", ""), "*", "") f = VBA.Replace(VBA.Replace(VBA.Replace(VBA.Replace(f, "<", ""), ">", ""), "|", ""), Chr(34), "") f = параментры_поста.имя + f + s ' к префиксу добавляем имя и расширение s = vbCrLf + "[img]" + параментры_поста.адрес + f + "[/img]" End If On Error Resume Next ' вЫрубаем ошибки fs.DeleteFile d + ".files\" + f ' убираем, возможно уже имеющийся файл fs.MoveFile d + ".files\" + j, d + ".files\" + f ' переименовываем On Error GoTo 0 ' врубаем ошибки картинка.Range.InsertAfter s j = Dir i = i + 1 возврат = возврат + 1 Next ' линки For Each h In ActiveDocument.Hyperlinks With h.Range .InsertBefore "[url=" + h.Address + "#" + h.SubAddress + "][color=#0000FF]" .InsertAfter "[/color][/url]" End With возврат = возврат + 2 Next ' завершение работы Selection.WholeStory Selection.Copy ActiveDocument.Undo возврат ActiveDocument.SaveAs имя, wdFormatDocument Sel.EndKey Unit:=wdStory ActiveWindow.View.Type = wdNormalView fs.DeleteFile d + ".htm" ChDir ActiveDocument.Path End If End Sub == == File of "Forms": параментры_поста.frm == == VERSION 5.00 Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} параментры_поста Caption = "Преобразование текста для форума Galloper.ru (движок phpBB)" ClientHeight = 3300 ClientLeft = 45 ClientTop = 330 ClientWidth = 11055 OleObjectBlob = "параментры_поста.frx":0000 StartUpPosition = 1 'CenterOwner Tag = "0" End Attribute VB_Name = "параментры_поста" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Sub CommandButton1_Click() Tag = "АГА" Hide End Sub Sub CommandButton2_Click() Tag = "" Hide End Sub