Option Explicit
Const VERSION = "rev100"
Const VERSIONDATE = "17/10/2016"
Sub ProcessDir(folder)
Dim fname, file, subfolder, i
Const ForReading = 1
Const ForWriting = 2
Const xlOpenXMLWorkbook = 51
For Each file In folder.Files
If extold = LCase(fso.GetExtensionName(file)) Then
fname = file.Path
Set fl = fso.OpenTextFile(fname, ForReading, False)
txt = Split(fl.ReadAll(), vbCrLf)
For i = 0 To UBound(txt)
txt(i) = Replace(txt(i), ";", ",")
Next
fl.Close
file.Name = file.Name & "_bak"
Set fl = fso.CreateTextFile(fname, True)
fl.Write Join(txt, vbCrLf)
fl.Close
End If
Next
For Each file In folder.Files
If extold = LCase(fso.GetExtensionName(file)) Then
fname = file.Path
Set fl = CreateObject("Excel.Application")
' fl.Visible = True ' Debug
With fl.Workbooks.Open(fname)
' Do Something... '
.SaveAs Replace(fname, extold, extnew), xlOpenXMLWorkbook: .Close False
End With
fso.DeleteFile(Replace(fname, extold & "_bak", extold))
End If
Next
For Each file In folder.Files
If extold & "_bak"= LCase(fso.GetExtensionName(file)) Then
file.Name = Replace(file.Name, extold & "_bak", extold)
MsgBox "File " & file.Name & " successfully created.", vbInformation
End If
Next
For Each subfolder In folder.SubFolders
ProcessDir (subfolder)
Next
End Sub
Dim fso, folder, fl, txt
folder = "C:\Users\User\Desktop\"
' Change the extension in the program settings
Const extold = "csv"
' This extension can be written after changing semicolon to a comma
Const extnew = "xlsx"
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folder)
ProcessDir (folder)
Set fso = Nothing
=$C5&$E5
по всей колонке). Рабочую формулу заменить на: =IF($C5;VLOOKUP($B5;'seznam januar 2016'!$B$5:$AI$2500;3);" ")
! Реклама в поиске (старая)
yandex.ru## li[class*="serp-adv-item"]
! Рекламная ссылка-заголовок, описание с телефонами
yandex.ru## li.serp-item > div[class^="organic"] > h2:not([class$="title"]),h2:not([class$="title"]) ~ div
! Прочие ссылки кроме адресов, форумов, картинок, карт, маркета
yandex.ru## li[class^="serp-item "]:not([class$="adresa"]):not([class$="forum"]):not([class*="image-stats"]):not([class*="z-maps"]):not([class*="z-market"])
' 1 - нижняя граница массива, 5 - верхняя граница массива
Dim arr(1 To 5) As Integer
' Если не объявлять нижнюю границу,
' то по умолчанию в Excel нижняя граница массива будут начинаться с 0 до 5
ReDim
. Параметр Preserve
можно опустить:Dim arr() As Integer
b = 5
' Параметр Preserve нужен для сохранения значений в массиве при изменении верхней границы
ReDim Preserve arr(1 To b)
=ПОИСКПОЗ($A1;$A:$A;0)<>СТРОКА($A1)
, а диапазон укажите =$A:$A
. =$A1+СТЕПЕНЬ(0,5;3)
и протянуть до 41-й строки, а в ячейку A1 записать значение "-2,5
" =ОКРУГЛ(ПИ()*$A1;2)
=SIN(ПИ()*$A1)
0
" (в моём примере "21"). Chr(160)
и Chr(30)
.43003
и значение Дата_2 равно 44764
, то в формула ниже посчитается с ошибкой (будет значение ИСТИНА):{ IF { MERGEFIELD Дата_1 \@"DD.MM.YYYY' г.'" \* MERGEFORMAT } = { MERGEFIELD Дата_2 \@"DD.MM.YYYY' г.'" \* MERGEFORMAT } "ИСТИНА" "ЛОЖЬ" }
Option Explicit
'123456789012345678901234567890123456h8nor@ya567890123456789012345678toster56789
Sub Replacement_tags()
Dim Content_Find As Find ' Объект Find
Set Content_Find = ActiveDocument.Content.Find
With Content_Find ' Найти маркер
.ClearFormatting: .Replacement.ClearFormatting ' Очистить формат
.MatchWildcards = False ' ВАЖНО! Отключить Подстановочные знаки
.Text = "[Шапка]": .Replacement.Text = "Начальнику управления..."
.Execute Forward:=True, Replace:=wdReplaceAll ' Заменить все маркеры [Шапка]
' Хитрость: перемещение курсора в конец заменённого текста
.Execute FindText:=.Replacement.Text, _
Forward:=True, Wrap:=wdFindStop, Replace:=wdReplaceNone
.Parent.Select ' Выделяем текст для управления курсором
'Selection.Collapse Direction:=wdCollapseEnd ' Курсор в конец найденного
End With
End Sub
.Replacement.Text = "Начальнику управления..." & String(3, Chr(13)) & "Начальнику управления..."
или вводить количество дублей в переменную Text
перед заменой:' Chr(13) - код символа возврата каретки. В других языках более привычная запись "\r"
CapText = "Начальнику управления..."
CapСount = InputBox("Введите количество 'Шапок'", , 1)
If Not CInt(Val(CapСount)) = CapСount Then _
MsgBox "Введите целое число", vbCritical: Exit Sub _
Else Text = CapText
While CapСount > 1
Text = Text & String(3, Chr(13)) & CapText
CapСount = CapСount - 1
Wend
' Используем хитрость из п.1, если планируем создать таблицу в месте маркера
Set tblNew = ActiveDocument.Tables.Add(Selection.Range, 3, 2)
With tblNew
.Columns(1).PreferredWidth = CentimetersToPoints(4) ' Колонка 1, Ширина 4 см
.Borders(wdBorderTop).LineStyle = wdLineStyleNone ' Границы таблицы, например
.Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle
.Borders(wdBorderVertical).LineStyle = wdLineStyleDot
For i = 1 To 2
.Cell(1, i).Range.Text = "Строка 1; #" & i
Next i
.Cell(1, 1).Range.InsertAfter Chr(13) & "Строка 2" ' Добавить текст
.Cell(tblNew.Rows.count, tblNew.Columns.count).Range.InsertAfter "Последняя ячейка"
End With
Private Sub Document_Open()
Replacement_tags ' Процедура из п.1
End Sub
Данные для заполнения шаблона можно поместить в отдельный файл.
- Открыть MS Word, в тексте написать маркер [Шапка]
- Открыть VBA в приложении (Alt+F11)
- Выбирать в меню Insert -> Module
- Вставить процедуру (из п.1)
- Нажать F5 (запустится процедура, в которой установлен курсор)
Selection
. Код для VBA:Option Explicit
'123456789012345678901234567890123456h8nor@ya567890123456789012345678toster56789
Sub Replacement_tags()
Dim Content_Find As Find ' Объект Find (в VBScript переменные объявляются без указания типа)
Const wdFindContinue = 2 ' для VBScript
Const wdReplaceAll = 1 ' для VBScript
' Set objWrd = CreateObject("Word.Application") ' В MS Word объявлять не нужно
' в VBScript всё равно придётся открывать файл, так что objDoc = objWrd.ActiveDocument
' Set objDoc = objWrd.Documents.Open(Filename:="C:\FullName.doc")
Set Content_Find = ActiveDocument.Content.Find ' в VBScript - objDoc.Content.Find
With Content_Find ' Найти метку
.ClearFormatting: .Replacement.ClearFormatting ' Очистить формат
.MatchWildcards = False ' ВАЖНО! Отключить Подстановочные знаки
.Replacement.Font.Color = wdColorAutomatic ' wdColorAutomatic = -587137025
.Text = "p***p": .Replacement.Text = "newText"
.Execute2007 Forward:=True, Replace:=wdReplaceAll, Wrap:=wdFindContinue
End With
' Подсветить ".Text" в документе Word 2007+ (визуальная отладка)
With Content_Find ' Отменяется после метода "Execute" или "ClearHitHighlight"
.Parent.HomeKey wdStory ' wdStory = 6
.HitHighlight .Text, wdColorTan ' wdColorTan = &H99CCFF
End With
End Sub
.Selection.EndKey
не нужен, т.к. в вашем примере указана замена по всему тексту (.Replace = 1
), а поиск начинается с позиции курсора, т.е. сначала. Цикла поиска по тексту нет, так что .Wrap
можно не использовать.objWrd.ScreenUpdating = False
.