Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 След.
VBA Ошибка "object required" при работе команды Replace, в другом скрипте этот же код, но чуть в другом виде, работает нормально
 
bigorq, да, спасибо, глупейшая ошибка
VBA Ошибка "object required" при работе команды Replace, в другом скрипте этот же код, но чуть в другом виде, работает нормально
 
Как работает: есть таблица с 2 столбцами, в первой искомый текст, во втором текст на замену. Выделяю первый столбец и запускаю скрипт. Все проверил 100 раз - должно работать, но не работает. Имя файла верное, строки для поиска и замены верные, но ошибка при попытке выполнить саму замену в строке. Наверняка, глупая ошибка, но в упор не вижу. Заранее спасибо.
P.S. при выделении 1 ячейки в первом столбце все работает, проблема появляется лишь при выделении диапазона ячеек (2 и более). Значит, после первого прохода ссылка на диапазон теряется? Я даже не знаю, в чем может быть ошибка.
Цитата
k.UsedRange.Replace i.Value, i.Offset(, 1).Value
Код
'Список файлов на пакетную обработку
Function ScanFolder()
    Dim sFolder As String, sFiles As String
    Dim str As String
    Dim s() As String
    'диалог запроса выбора папки с файлами
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Function
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
    sFiles = Dir(sFolder & "*.xls*")
    str = ""
    Do While sFiles <> ""
        'сохраняем полный путь  в массив строк
        If str = "" Then str = sFolder & sFiles Else str = str & "^" & sFolder & sFiles
        sFiles = Dir()
    Loop
    s = Split(str, "^")
    ScanFolder = s
End Function

Sub Замена()
    Dim fls() As String  'файлы на обработку
    Dim sFld As String 'запрашиваем адрес папки на сохранение
    Application.ScreenUpdating = False
    fls = ScanFolder()
    Dim r As Range
    Set r = Selection
For Each f In fls() 'перебираем файлы в папке
    MsgBox f
    Set wa = Application.Workbooks.Open(f)
    For Each k In wa.Worksheets
        For Each i In r 'делаем замену в документе
            'открываем документ в новом окне
            'ищем текст на земену и заменяем
            MsgBox i.Value
            MsgBox i.Offset(, 1).Value
            'wa.Worksheets(1).UsedRange.Replace i.Value, i.Offset(, 1).Value
            k.UsedRange.Replace i.Value, i.Offset(, 1).Value
            wa.Save
            wa.Close
        Next i
    Next k
Next f
End Sub
Изменено: zenija2007 - 16.12.2024 06:57:21
VBA Скрипты для создания и управления Базами Данных без установки драйвера, VBA Скрипты для создания и управления Базами Данных без установки драйвера
 
Здравствуйте. Для удобства работы и скорости запросов понадобилось хранить данные в базе данных с возможностью редактирования. По сути, сейчас решаю, дальше изучать VBA, или перейти на C#.
Установка драйвера баз данных ранее уже приводила к багам и замедлению работы некоторых приложений на старых ПК. Начал искать портативные решения - на форумах пишут, что mysql и sqlite требуют обязательной установки драйвера на ПК.
Существуют ли какие-то не очень сложные портативные варианты создания и управления базой данных через VBA?
VBA usedrange.replace выдает ошибку 13 Неверный тип, при изменении текста на простой все работает
 
Sanja,
спасибо, кнопку прикрепления файла не увидел.
кстати, обойти ограничение, наверное, можно, разбив строку на 250 символов, при каждой замене прикрепляя в конце маркер, на который в свою очередь будет срабатывать замена при следующей итерации цикла.
ничего лучше пока не могу придумать.
VBA usedrange.replace выдает ошибку 13 Неверный тип, при изменении текста на простой все работает
 
небольшое дополнение. тот же самый текст спокойно заменяется в текстовом поле (хотя там конечно используется другой код).
Очень хочется понять, почему же скрипт выдает ошибку. Тип данных не меняется, меняется текст в ячейке, причем там даже  новых символов не появляется.
Изменено: zenija2007 - 30.07.2024 06:53:09
VBA usedrange.replace выдает ошибку 13 Неверный тип, при изменении текста на простой все работает
 
Здравствуйте. Сделал небольшой пример для воспроизведения возникшей у меня ошибки при замене текста на листе.
Код
Sub test()
    'MsgBox Range("A1").Value
    Dim txt As String
    ActiveSheet.UsedRange.Replace "Рразд1", Range("A1").Value
End Sub
Текстовое поле вставил для проверки, что ошибку провоцирует не оно, данный код по идее не должен с ним взаимодействовать. Замена текста долгое время работала, а потом при изменении формулировок начало выдавать ошибку Неверный тип.
Если изменить текст в ячейке А1 на "123", все заработает.
Файл
Замена текста из Excel в текстовом поле Word (VBA), Замена текста из Excel в текстовом поле Word (VBA)
 
можете закрывать тему, нашел.
Код
Set wa = CreateObject("Word.Application")
Set wd = wa.Documents.Open(f)
wa.Activate
msgbox wd.Shapes.Range(wd.Shapes.Count).TextFrame.TextRange.Text
Замена текста из Excel в текстовом поле Word (VBA), Замена текста из Excel в текстовом поле Word (VBA)
 
можете закрывать тему, нашел.
Код
Set wa = CreateObject("Word.Application")
Set wd = wa.Documents.Open(f)
wa.Activate
msgbox wd.Shapes.Range(wd.Shapes.Count).TextFrame.TextRange.Text
Замена текста из Excel в текстовом поле Word (VBA), Замена текста из Excel в текстовом поле Word (VBA)
 
Здравствуйте. Вставил в документ Word текстовое поле (Вставка - Текстовое поле), ввел в него текст. Проверил - встроенная функция Word заменяет в нем текст так же, как и любой другой, при записи макроса выдает стандартный код vba для замены текста.
При запуске этого скрипта из Excel замена обычного текста работает, текста в поле - нет. Пожалуйста, дайте пример, как обратиться к тексту внутри текстового поля.
Sub Макрос1()
Код
'
' Макрос1 Макрос
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "99887766"
        .Replacement.Text = "работает"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Оформление документа с переносом строк на новую и подчеркиванием, Оформление документа с автопереносом строк на новую и подчеркиванием до конца листа
 
Пытливый, вот думал о разбиении. один раз скрипт сделать, и пользуешься себе. набить таблицу, проверить данные куда легче, чем каждый акт просматривать. и не выглядит сложным. даже похожие вопросы находил.
Оформление документа с переносом строк на новую и подчеркиванием, Оформление документа с автопереносом строк на новую и подчеркиванием до конца листа
 
mimoprohodil, чтобы у каждой строки было подчеркивание на ширину ячейки. это невозможно сделать в excel. Точнее, проще уж тогда все в word делать, потому что придется наделать кучу длиннющих скриптов.
Изменено: zenija2007 - 16.12.2023 10:40:28
Оформление документа с переносом строк на новую и подчеркиванием, Оформление документа с автопереносом строк на новую и подчеркиванием до конца листа
 
Здравствуйте. Есть текстовый документ формата А4, оформленный в формате excel. Самая проблемная часть здесь - многострочные поля с подчеркиванием до конца листа.
Нельзя просто взять и вставить длинную строку в ячейку, приходится тратить время и вручную разбивать на две или более. Можно конечно использовать автоперенос текста в пределах ячейки, но подчеркивание тогда будет лишь у последней строки теста. А нужно, чтобы у каждой и обязательно до конца листа.
Правильно ли я понимаю, что данная проблема не имеет решения в excel?
VBA, как открыть файл CSV в виде строк с разделителями, VBA, как открыть файл CSV в виде строк с разделителями
 
evgeniygeo, как оказалось, работает не так хорошо, как хотелось бы. При сохранении все равно добавляет кавычки там, где их не было. Есть способ работы с файлом, чтобы при открытии и сохранении все знаки оказывались на своих местах? Просто редактирование в excel куда проще, чем работа с текстовым файлом, но эта программа постоянно что-то пытается делать с символами.
Изменено: zenija2007 - 19.03.2023 05:59:56
VBA, как открыть файл CSV в виде строк с разделителями, VBA, как открыть файл CSV в виде строк с разделителями
 
evgeniygeo, спасибо, работает )
VBA, как открыть файл CSV в виде строк с разделителями, VBA, как открыть файл CSV в виде строк с разделителями
 
Здравствуйте. Если открыть файл CSV двойным щелчком, откроется в виде неоформленной таблицы excel в один столбец с разделителями. Если открыть через скрипт vba, откроется таблица в несколько столбцов с данными.
Код
    Dim fl
    fl = Application.GetOpenFilename("Файл локализации мода(*.csv*),*.csv*", 1, "Выбрать файл локализации мода", , False)
    If VarType(fl) = vbBoolean Then
        'была нажата кнопка отмены - выход из процедуры
        Exit Sub
    End If
    Application.ScreenUpdating = False
    Set fnd = ActiveSheet.Range("A2:A5722")
    'открываем книгу в новом окне
    Set ww = Application.Workbooks.Open(fl)

Вопрос: как с помощью скрипта открыть CSV файл в том же виде, как он открывается двойным щелчком? Нет, мне не надо импортировать данные, мне нужно, чтобы скрипт открыл CSV файл именно в таком виде.
Изменено: zenija2007 - 16.03.2023 12:42:27
Поиск строк в файле Autocad из excel посредством vba, Поиск строк в файле Autocad из excel посредством vba
 
БМВ,

спасибо, как всегда, максимально глупая ошибка. все работает.
Поиск строк в файле Autocad из excel посредством vba, Поиск строк в файле Autocad из excel посредством vba
 
testuser,

простите, а можно пример?
Поиск строк в файле Autocad из excel посредством vba, Поиск строк в файле Autocad из excel посредством vba
 
Здравствуйте. Обращаюсь к единственному открытому документу autocad из excel. Ищу строки по шаблону (как умею) и заношу в excel. Первое значение записывает нормально, на втором выдает ошибку - object required. Никак не могу понять, в чем дело. Тип объекта, значение выводил посредством msgbox, все было правильно. Но при попытке записать в ячейку выдает ошибку.
Код
'ищем текст по шаблону и пишем в excel
Sub TextList()
    Dim aApp As AcadApplication 'доступ к приложению
    Dim aDoc As acaddocument 'доступ к документу
    
    Set aApp = GetObject(, "Autocad.Application")
    Set aDoc = aApp.ActiveDocument 'обращаемся к активному чертежу
    Set r = ActiveSheet.Cells.Range("A1")
    For Each entity In aDoc.ModelSpace
        If entity.ObjectName = "AcDbMText" Then 'если мультитекст
            If Left(Right(entity.TextString, Len(entity.TextString) - InStr(entity.TextString, "/")), 4) = "М4.2" And Left(entity.TextString, 2) = "Cт" Then
                r.Value = CStr(entity.TextString)
                r = r.Offset(1)
            End If
        End If
    Next
End Sub
Команда vba Replace не работает с данными, считанными из ячеек, Команда vba Replace не работает с данными, считанными из ячеек
 
Здравствуйте. Создал скрипт для пакетной замены одной фамилии на другую. Когда вбиваю в команду Replace текст на поиск и замену напрямую, все работает, когда считываю из ячеек и подставляю через переменные - не работает.
Код
'Список файлов на пакетную обработку
Function ScanFolder()
    Dim sFolder As String, sFiles As String
    Dim str As String
    Dim s() As String
    'диалог запроса выбора папки с файлами
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Function
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
    sFiles = Dir(sFolder & "*.xls*")
    str = ""
    Do While sFiles <> ""
        'сохраняем полный путь  в массив строк
        If str = "" Then str = sFolder & sFiles Else str = str & "^" & sFolder & sFiles
        sFiles = Dir()
    Loop
    s = Split(str, "^")
    ScanFolder = s
End Function
Sub Замена()
    Dim fls() As String  'файлы на обработку
    Dim sFld As String 'запрашиваем адрес папки на сохранение
    Application.ScreenUpdating = False
    fls = ScanFolder()
    'sFld = GetFolder("E:\Скрипты")
For Each f In fls()
    'открываем книгу в новом окне
    Set ww = Application.Workbooks.Open(f)
    'ищем текст на земену и заменяем
    Set fnd = ww.ActiveSheet.Range("B1")
    Set zam = ww.ActiveSheet.Range("B2")
    ww.ActiveSheet.UsedRange.Replace fnd.Value, zam.Value
    Application.DisplayAlerts = False
    ww.Save
    ww.Close
    Application.DisplayAlerts = True
Next f
    Application.ScreenUpdating = True
End Sub
Vba самопроизвольно меняет путь сохранения файлов и названия некоторых файлов, Vba самопроизвольно меняет путь сохранения файлов и названия некоторых файлов
 
Спасибо
Vba самопроизвольно меняет путь сохранения файлов и названия некоторых файлов, Vba самопроизвольно меняет путь сохранения файлов и названия некоторых файлов
 
Здравствуйте. Есть несложный скрипт. Получаю список всех файлов excel в указанной папке, по очереди открываю, делаю замену некоторых слов и закрываю. Сохранение происходит через .save.
1. Vba сохраняет изменённые файлы не с перезаписью оригиналов, а на уровень выше. Это странно, ведь используется команда .save, которая не подразумевает создание нового файла.
2. Имена файлов 1.xlsx и 2.xlsx превратились в 11 и 21.xlsx. Повторю, использовал команду .save.
Вопрос: почему подробное может происходить? Windows 10. Если важно, запросы отключаю перед сохранением.
Код
'Список файлов на пакетную обработку
Function ScanFolder()
    Dim sFolder As String, sFiles As String
    Dim str As String
    Dim s() As String
    'диалог запроса выбора папки с файлами
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Function
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
    sFiles = Dir(sFolder & "*.xls*")
    str = ""
    Do While sFiles <> ""
        'сохраняем полный путь  в массив строк
        If str = "" Then str = sFolder & sFiles Else str = str & "^" & sFolder & sFiles
        sFiles = Dir()
    Loop
    s = Split(str, "^")
    ScanFolder = s
End Function

Sub test()
    Dim fls() As String  'файлы на обработку
    Dim sFld As String 'запрашиваем адрес папки на сохранение
    
    Application.ScreenUpdating = False
    fls = ScanFolder()
    'sFld = GetFolder("E:\Скрипты")
For Each f In fls()
    'открываем книгу в новом окне
    Set ww = Application.Workbooks.Add(f)
    'ищем текст на земену и заменяем
    ww.ActiveSheet.UsedRange.Replace "Мезеровский А.В.", "Шишкин С.Н."
    Application.DisplayAlerts = False
    ww.Save
    ww.Close
    Application.DisplayAlerts = True
Next f
    Application.ScreenUpdating = True
End Sub

Изменено: zenija2007 - 06.09.2022 15:01:46
vba как использовать в excel типы данных word?, vba как использовать в excel типы данных word?
 
Здравствуйте. Требуется выделить текст между 2-я словами в документе word из excel и затем заменить. Столкнулся с тем, что придется использовать тип данных range из word. Как определить переменную этого типа в excel?
Как передать аргумент в событие при программном создании формы?
 
как я понимаю, подобное никто не делал, и ответа не знает. зато написать с умным видом нерабочий совет - это завсегда. разочарован в местных гуру. далеко не первый случай.
Изменено: zenija2007 - 11.05.2018 04:57:07
Как передать аргумент в событие при программном создании формы?
 
Дмитрий Щербаков,
загрузил файл. весь скрипт находится в модуле Module1, процедура для удаления формы находится там же, но доступ к ней  Application.Ontime получить не может. Такая же процедура с чуть изменным именем добавляется непосредственно в форму, и доступ к ней получить также не удается. В приведенном вами примере было написано Me.Name, а это и есть имя формы.
Главная процедура в самом низу nform().
Изменено: zenija2007 - 08.05.2018 04:52:57
Как передать аргумент в событие при программном создании формы?
 
Дмитрий Щербаков,
исправил, но ошибка точно такая же - и при обращении к процедуре основного кода, и при создании процедуры в форме.
Не удается выполнить макрос "DelForms(UserForm1)". Возможно, этот макрос отсутствует в текущей книге, либо все макросы отключены.
Основной код находится в модуле Module1, хотя вряд ли это на что то влияет.
Изменено: zenija2007 - 07.05.2018 12:53:57
Как передать аргумент в событие при программном создании формы?
 
Dima S,
попытался. попробовал вызвать процедуру основного кода, потом добавил ее прямо в код формы. в итоге в форме получился такой код:
Код
Option Explicit

Sub Button1_Click()
Application.OnTime Now + TimeValue("00:00:05"), "DelForms(Me)"
Unload Me
End Sub
Sub DelForms(nf As Object)
ThisWorkbook.VBProject.VBComponents.Remove nf
End Sub
но при попытке вызвать процедуру DelForms в обоих случаях пишет, что не может выполнить. Ошибку в упор не вижу.
Не удается выполнить макрос "DelForms(Me)". Возможно, этот макрос отсутствует в текущей книге, либо все макросы отключены.
Изменено: zenija2007 - 07.05.2018 12:38:50
Как передать аргумент в событие при программном создании формы?
 
Здравствуйте. Изучаю пример с форумов
Код
ub MakeForm()
    Dim TempForm As Object    'VBComponent
    Dim NewButton As Msforms.CommandButton
    Dim Line As Integer
    Dim TheForm
    Application.VBE.MainWindow.Visible = False
    ' Создание диалогового окна UserForm
    Set TempForm = ThisWorkbook.VBProject. _
                   VBComponents.Add(3)    'vbext_ct_MSForm
    With TempForm
        .Properties("Caption") = "Временная форма"
        .Properties("Width") = 200
        .Properties("Height") = 100
    End With
    ' Добавление элемента управления CommandButton
    Set NewButton = TempForm.Designer.Controls _
                    .Add("forms.CommandButton.1")
    With NewButton
        .Caption = "Щелкни!"
        .Left = 60
        .Top = 40
    End With

    With TempForm.CodeModule
        Line = .CountOfLines
        .InsertLines Line + 1, "Sub CommandButtonl_Click()"
        .InsertLines Line + 2, "MsgBox ""Привет!"""
        .InsertLines Line + 3, "Unload Me"
        .InsertLines Line + 4, "End Sub"
    End With
    ' Отображение диалогового окна UserForm
    VBA.UserForms.Add(TempForm.Name).Show
    ' Удаление диалогового окна UserForm
    ThisWorkbook.VBProject.VBComponents.Remove TempForm
End Sub
Что если при нажатии на кнопку формы требуется удалить эту форму?
Код
With TempForm.CodeModule
        Line = .CountOfLines
        .InsertLines Line + 1, "Sub CommandButtonl_Click()"
        .InsertLines Line + 2, "ThisWorkbook.VBProject.VBComponents.Remove TempForm"
        .InsertLines Line + 3, "End Sub"
    End With
Но это не будет работать, поскольку не понятно, как в создаваемое событие Sub CommandButtonl_Click()  передать параметр TempForm.
Пробовал другое решение: "ThisWorkbook.VBProject.VBComponents.Remove Me", ошибка - type mismatch. Хотя вроде бы Me - ссылка на родителя, а для кнопки это форма.
Пробовал помещать строку "ThisWorkbook.VBProject.VBComponents.Remove Me" в создаваемые для формы события Unload и Terminate - ошибок нет, но форма не удаляется.
Изменено: zenija2007 - 07.05.2018 09:07:29
vba не удается выделить последнюю строку диапазона, есть стандартное решение на форумах, но оно почему-то вызывает ошибку
 
Karataev,
спасибо работает, сам бы ни за что не додумался. а может быть знаете что может мешать сохранить диапазон ListObject в переменную Range? Приходится применять костыль в виде address в текстовую переменную, но сохранить диапазон удобнее.
Код
Sub test()    
    Dim r As Range
    With ActiveSheet.ListObjects("Разделительная")
        r = .ListRows(.ListRows.Count).Range
    End With
    r.Select
End Sub
Изменено: zenija2007 - 13.09.2017 11:39:17
vba не удается выделить последнюю строку диапазона, есть стандартное решение на форумах, но оно почему-то вызывает ошибку
 
Sanja, а сможете сразу на этом примере показать, как быстро расширить диапазон таблицы Разделительная на 1 строку вниз?
Пробую делать как показано в справке microsoft
Код
Sub test()
    With ActiveSheet.ListObjects("Разделительная")
        .Resize (.ListRows.Count + 1)
    End With
End Sub
но ошибка. при этом и в многочисленных примерах на форумах показано именно такое решение.
Код
Sub test()
    Dim r As Range
    With ActiveSheet.ListObjects("Разделительная")
        r = .ListRows(.ListRows.Count).Range
    End With
    r.Select
End Sub
тут тоже ошибка при попытке запомнить полученный диапазон в переменную и тоже не могу найти решения
Изменено: zenija2007 - 13.09.2017 11:23:10
vba не удается выделить последнюю строку диапазона, есть стандартное решение на форумах, но оно почему-то вызывает ошибку
 
Sanja,спасибо большое
Страницы: 1 2 3 4 След.
Наверх