Выпуск № 915 от 19.07.2009, 21:35
Администратор рассылки: Калашников О.А., Руководитель
В рассылке: подписчиков - 362, экспертов - 91
В номере: вопросов - 2, ответов - 2
Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке: оценить выпуск >>
Вопрос № 170423: Доброе время суток Подскажите пожалуйста как при помощи VBA Excel из текстового файла удалить или заменить (например 2-ю) строку полностью. и как заменить или удалить данные которые находятся между разделителями в строке (разделитель &qu...
Вопрос № 170436: В документ ворд вставляю ComboBox Где прописать и как, чтобы при печати не было видно квадратика выбора со стрелкой? <...
Вопрос № 170423:
Доброе время суток
Подскажите пожалуйста как при помощи VBA Excel из текстового файла удалить или заменить (например 2-ю) строку полностью. и как заменить или удалить данные которые находятся между разделителями в строке (разделитель ",")
Отправлен: 14.07.2009, 12:50
Вопрос задал: Lexap, Посетитель
Всего ответов: 1 Страница вопроса >>
Отвечает Megaloman, Практикант :
Здравствуйте, Lexap. Предлагаю Вам решение, которое работает как макрос в Excel, так и как самостоятельный скрипт. Общая идея решения для обеих Ваших задач: - читаем построчно исходный файл, - преобразуем строки - записываем то, что получилось, в промежуточный файл - после того, как весь исходный файл прочитан, удаляем его (при желании, сохраняем его копию) - промежуточный файл переименовываем на имя исходного файла
1.В указанном текстовом файле удалим указанную по номеру строку Вот
текст макроса
Код:
Sub del_row_txt() ' В указанном текстовом файле удалим указанную по номеру строку
InFile = "D:\Примеры макроса\Текстовый файл.txt" ' Путь к текстовому файлу iDelete = 2 '
Какую строку удалить InSave = 0 ' =0 -Не сохраним копию исходного файла, не 0 -сохраним
Set FSO = CreateObject("Scripting.FileSystemObject") Set F1 = FSO.OpenTextFile(InFile, 1, False) Set F2 = FSO.OpenTextFile(InFile + ".tmp", 2, True)
' Переписываем исходный файо в .tmp файл без указанной строки
j = 0
Do On Error Resume Next iString = F1.ReadLine() If Err.Number <>
0 Then Exit Do j = j + 1 If j <> iDelete Then F2.WriteLine (iString) Loop
F1.Close F2.Close
' Если надо сохранить исходный файл в .bak If InSave <> 0 Then
On Error Resume Next Set F1 = FSO.GetFile(InFile + ".bak") If Err.Number = 0 Then F1.Delete True End If
Set F1 = FSO.G
etFile(InFile) F1.Name = F1.Name + ".bak" F1.Close
End If
' Переносим .tmp файл вместо исходного Set F2 = FSO.GetFile(InFile + ".tmp") F2.Copy InFile, True F2.Delete True
End Sub
В первых строках укажите Ваши данные для задачи. Если хотите, чтобы код работал как отдельный скрипт, перенесите приведенный кода в блокнот, но только без строк
Sub .....
End Sub
Текст
должен быть в Windows-кодировке (критично, если в именах файлов присутствуют русские буквы) Сохраните полученное в текстовый файл с расширением .vbs, например del_row_txt.vbs Запускайте его как обычный исполнимый файл, ничего в систему дополнительно устанавливать не нужно.
2. В указанном текстовом файле заменим подтекст в строке, отделяемый разделителями При этом возможна замена на пустую подстроку (при желании с удалением соответствующего разделителя), что эквивалентно удалению подтекста. В Вашем примере 4 разделителя (запятые) отделяют 5 подстрок Любую из них можно заменить, указав её номер по счёту. Аналогично первому решению, его можно использовать как vbs-скрипт.
Код:
Sub repl_txt() ' В указанном текстовом файле заменим
подтекст в строке, отделяемый разделителями
InFile = "D:\Примеры макроса\Для замены.txt" ' Путь к текстовому файлу Delim = "," ' Символ разделителя iRepl = 2 ' Какой по счету кусок в строке меняем sRepl = "Привет мой свет!" ' На что этот кусок меняем iBlank = 0
' Если =0 и Если текст для замены пустой, то убираем и разделитель
InSave = 1 ' =0 -Не сохраним коп
ию исходного файла, не 0 -сохраним
Set FSO = CreateObject("Scripting.FileSystemObject") Set F1 = FSO.OpenTextFile(InFile, 1, False) Set F2 = FSO.OpenTextFile(InFile + ".tmp", 2, True)
' Переписываем исходный файл в .tmp файл, делая замены
L = (Len(sRepl) = 0) Do On Error Resume Next iString = F1.ReadLine() If Err.Number <> 0 Then Exit Do Mass = Split(iString, Delim)
N = UBound(Mass) iString = "" For i = 0 To N If i <> iRepl - 1 Then iString = iString + Mass(i) If i <> N Then iString = iString + Delim Else iString = iString + sRepl If i <> N And Not (L And iBlank = 0) Then iString = iString + Delim End If Next
If Right(iString,
1) = Delim Then iString = Mid(iString, 1, Len(iString) - 1) End If
F2.WriteLine (iString) Loop
F1.Close F2.Close
' Если надо сохранить исходный файл в .bak If InSave <> 0 Then
On Error Resume Next Set F1 = FSO.GetFile(InFile + ".bak") If Err.Number = 0 Then F1.Delete True End If
Set F1 = FSO.GetFile(InFile)
F1.Name = F1.Name + ".bak" F1.Close
End If
' Переносим .tmp файл вместо исходного Set F2 = FSO.GetFile(InFile + ".tmp") F2.Copy InFile, True F2.Delete True
End Sub
Тексты скриптов можно выкачать здесь и здесь. Пишите, если что-то
не удалось. Заранее благодарен
----- Нет времени на медленные танцы
Ответ отправил: Megaloman, Практикант
Ответ отправлен: 14.07.2009, 23:06
Оценка ответа: 5
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 252182
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 170436:
В документ ворд вставляю ComboBox Где прописать и как, чтобы при печати не было видно квадратика выбора со стрелкой?
Отправлен: 14.07.2009, 18:56
Вопрос задал: Lrad, Посетитель
Всего ответов: 1 Страница вопроса >>
Отвечает Витер Александр Анатольевич, 3-й класс :
Здравствуйте, Lrad. Могу предложить такой вариант. За отображение стрелки отвечает свойство ShowDropDownWhen, которое может принимать 3 значения: 0 - fmShowDropDownWhenNever (никогда не показывать), 1 - fmShowDropDownWhenFocus (показывать если курсор находится в этом элементе), 2 - fmShowDropDownWhenAlways (показывать всегда). Задача состоит в том, чтобы прятать при печати стрелочку, для этого нужно писать макрос, который будет перехватывать действия пользователя при печати, скрывать стрелочку, печатать
и делать стрелочку видимой снова. Но я считаю, что лучше всего поставить значение fmShowDropDownWhenFocus и только не забывать выходить из компонента перед печатью.
----- Лучше день потерять - потом за пять минут долететь!
Оценка ответа: 5 Комментарий к оценке: Как вариант это решение подойдет, но есть и другой выход. К сожалению я его не помню. Раньше у меня был шаблон и в нем был этот элемент, без макроса и без выхода из поля - печаталось без стрелки, но я его потерял
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 252176
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке: оценить выпуск >>
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.