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

Страницы: 1 2 След.
Выбор макросом - случайного из нескольких файлов.
 
Sanja, спасибо за ответ.
Выбор макросом - случайного из нескольких файлов.
 
Здравствуйте, программисты. Обращаюсь за помощью насчет макроса.
У меня есть макрос.
Этот макрос работает как гиперссылка, открывая одно окно и закрывая прежнее.
Но там есть небольшая проблема. Этот макрос ищет слово или текст по точному совпадению.

Как его изменить, чтобы макрос искал файл для открытия не по точному совпадению, а просто по наличию такого текста внутри названия файла (а если подходящих файлов - несколько, то выбирал бы случайный из них) ?
Запрет пересечения линии
 
БМВ, это вы кроссом считаете - запрос на другом форуме - спустя неделю ?
Вы это серьезно ?
Запрет пересечения линии
 
Здравствуйте друзья.
У меня на листе кружок, который перемещается при помощи нажатий на стрелки.
Двигается он при помощи простенького макроса, написанного макрорекодером.

Как запретить этому кружку пересекать линию ?

Чтобы он мог обойти ее, но не пересекать.
При приближении вплотную, или просто при сильном приближении фигуры (или точки) к линии - какие-то из этих кнопок должны "отключится", а какие-то должны продолжать работать.
Если линия - проходит снизу - то это значит что должна отключится кнопка движения вниз, а все остальные кнопки продолжить работу.
Определение значения, при котором получился минимальный результат
 
Вопрос снимается.
Надо было просто условие в цикле подправить.
Определение значения, при котором получился минимальный результат
 
Здравствуйте.
Посоветуйте как изменить цикл.
Есть цикл, перебирающий значения в ячейке C4 (взятые из столбца F9:F19) и добавляющий минимальное значение (полученное в результате перебора) из ячейки D4 - в целевую ячейку H4.

Скажите - как макросом при завершении работы цикла -  записать  в ячейку C4 то значение (из столбца F9:F19) , при котором получился этот минимальный результат ?
Код
Sub Макрос1()

Min = 9 ^ 9
For Each r In Range("F9:F19")
Range("C4") = r
  If r <> "" Then
    If Range("D4") <= Min Then Min = Range("D4")
  End If
Next
Range("H4") = Min

Range("C4") = WorksheetFunction.Index(Range("F9:F19"), WorksheetFunction.Match(Range("H4"), Range("G9:G19"), 0))

End Sub
Сейчас использую Range("C4") = WorksheetFunction.Index(Range("F9:F19"), WorksheetFunction.Match(Range("H4"), Range("G9:G19"), 0))
Но это по сути обычная экселевская формула, а нужно решение, чтобы именно цикл перехватывал то значение в ячейке D4, при котором достигается целевой результат.
Изменено: RagnarLodbrokovitch - 20.03.2019 02:02:06
Обработка макросом нескольких ячеек, при условии соответствующие ячейки в столбце напротив - не заполнены.
 
В общем - отбой, друзья.

Сходил в магазин по соседству - купил пивка и фисташек.... И под влиянием животворящей силы этих продуктов - написал цикл как нужно.
Надо было просто изменить параметр rngCell.
Обработка макросом нескольких ячеек, при условии соответствующие ячейки в столбце напротив - не заполнены.
 
Да, именно это я и хочу получить:
Срабатывание макроса не на одной ячейке J31, а на трех ячейках - J22, J26, J31.
Вопрос - как это сделать ?

Цитата
Anchoret написал:
По коду Ваш цикл от последней строки в столбце "Е" до последней строки столбца "J".
Как эти ячейки в цикле перебрать  ?
(ячейки которые идут от последней заполненной строки столбца "E" - до последней заполненной строки столбца "J" )
Изменено: RagnarLodbrokovitch - 27.01.2019 23:12:40
Обработка макросом нескольких ячеек, при условии соответствующие ячейки в столбце напротив - не заполнены.
 
Доброе утро, форумчане.
У меня есть вопрос к специалистам по VBA.

Есть макрос обрабатывающий и переносящий определенный текст из столбца J - в столбец K  для последней заполненной ячейки в столбце.
Я пытаюсь сделать так, чтобы обрабатывалась не последняя ячейка в столбце J, а несколько ячеек - с учетом того - заполнены ли соответствующие ячейки столбца E (каким-либо содержимым).
Если не заполнены - то для текста данных ячеек столбца J выполняется операция макроса.

Однако дела у меня идут, прямо скажем неважно.
Все чего мне удалось добиться - это заставить макрос просто не реагировать на ячейки - если в столбце E напротив них - стоит какое-либо число.
Если же числа нет, то макрос - по-прежнему выбирает лишь последнюю ячейку из нескольких - и обрабатывает только ее.
Сейчас он срабатывает лишь на ячейке J31, перенося ее содержимое в ячейку K33.
А по идее должен подобным образом обработать и ячейки J22 и J26.
Код
Option Explicit

Sub main()
Dim lRowT As Long, lRowZ As Long
Dim q As Integer

    Const s_KEY_1 As String = "образ"
    Const s_KEY_2 As String = ","
    Const s_KEY_3 As String = "ТЕКСТ1-"
    Const s_DELIM As String = "+"
    ' - -
    Dim rngCell As Range
    ' - -
    With ThisWorkbook.Worksheets("Шкала-")
        On Error Resume Next
        Set rngCell = .Columns("J").Find(s_KEY_1, , xlValues, xlPart, xlByRows, xlPrevious, False, False, False)
        On Error GoTo 0
    End With 'ThisWorkbook.Worksheets("Лист4")
    
   
    
     
lRowT = Cells(Rows.Count, "E").End(xlUp).Row 'Определяем последнюю заполненную в столбце E
lRowZ = Cells(Rows.Count, "J").End(xlUp).Row 'Определяем последнюю заполненную в столбце J
 
lRowT = lRowT + 1
For q = lRowT To lRowZ
    If Trim(Cells(q, "J").Value) <> "" Then

    If rngCell Is Nothing Then MsgBox "Text not found!", vbExclamation: Exit Sub
    ' - -
    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary"): dict.CompareMode = 1
    Dim sKey$, sKeyDelim$: sKeyDelim = Chr(1)
    ' - -
    Dim arrMain, i&, n&, sCumulative$
    ' - -
    arrMain = Split(rngCell.Value, s_KEY_1)
    sCumulative = ""

    ' - -
    With CreateObject("VBScript.RegExp")
        ' - -
        .Global = True: .IgnoreCase = True: .MultiLine = False
        ' - -
        n = UBound(arrMain, 1)
        For i = 1 To n
            ' - -
            .Pattern = "[^\d\wа-яё]+"
            ' - -
            arrMain(i) = .Replace(Split(arrMain(i), s_KEY_2)(0), "")
            ' - -
            .Pattern = "([^\d\s]+)(\d+)([^\d\s]+)"

            
            If .Test(arrMain(i)) Then
                ' - -
                sKey = Join(Array(.Replace(arrMain(i), "$1"), .Replace(arrMain(i), "$3")), sKeyDelim)
                ' - -
                If Not dict.Exists(sKey) Then
                    dict(sKey) = CLng(.Replace(arrMain(i), "$2"))
                Else
                    dict(sKey) = dict(sKey) + CLng(.Replace(arrMain(i), "$2"))
                End If 'Not dict.Exists(sKey)
                ' - -
            End If '.Test(arrMain(i))
            ' - -
        Next i
        ' - -
        n = dict.Count
        If n > 0 Then
            ' - -
            For i = 0 To n - 1
                ' - -
                sCumulative = sCumulative & s_DELIM & Replace$(dict.Keys()(i), sKeyDelim, dict.Items()(i))
                ' - -
            Next i
            ' - -
            sCumulative = s_KEY_3 & Right$(sCumulative, Len(sCumulative) - 1)
            ' - -
            With rngCell.Offset(2, 1)
                If InStr(1, .Value, sCumulative, vbTextCompare) = 0 Then _
                    .Value = Replace$(.Value, s_KEY_3, sCumulative, , , vbTextCompare)
            End With 'rngCell.Offset(2,1)
            ' - -
        End If 'dict.Count > 0
        ' - -
    End With 'CreateObject("VBScript.RegExp")

    End If
Next q
End Sub
Сам я не понимаю - как заставить вот эту перемычку, определяющую нужные ячейки для обработки - добавить в цикл.
Код
lRowT = Cells(Rows.Count, "E").End(xlUp).Row 'Определяем последнюю заполненную в столбце E
lRowZ = Cells(Rows.Count, "J").End(xlUp).Row 'Определяем последнюю заполненную в столбце J
 
lRowT = lRowT + 1
For q = lRowT To lRowZ
    If Trim(Cells(q, "J").Value) <> "" Then
Потому что в коде - все операции выполняются только для ячейки rngCell.
А тут получается, что таких ячеек должно быть несколько - определяемы параметром q.

Ответьте, если кто знает - как заставить этот макрос работать для нескольких ячеек (при условии, что соответствующие ячейки в столбце E напротив - не заполнены) ?
Изменено: RagnarLodbrokovitch - 27.01.2019 23:13:29
Как заставить макрос - воспринимать ячейки заполненные пробелами - как пустые
 
Цитата
JayBhagavan написал:
замените на анализируемый объект типа Range
Указал анализируемый объект
Код
If Len(Replace(Range("I7:J4000"), " ", "")) = 0 Then MsgBox "Считайте меня пустой"
Теперь пишет "5 - Invalid procedure call or argument"
Как заставить макрос - воспринимать ячейки заполненные пробелами - как пустые
 
JayBhagavan, добавил эту строчку.

Но в коде - подсвечивается слово "ЯЧЕЙКА" и выдает ошибку при этом - "CompileError: Variable not defined"

Код с добавленной строчкой выглядит так:
Как заставить макрос - воспринимать ячейки заполненные пробелами - как пустые
 
Добрый день.
Макрос извлекает из диапазона I7:J51 листа3 - текст, который берет из диапазона N4:N14 - на листе2.
Он помещает извлеченный текст в соответствующую ячейку столбца K

Но проблема в том, что он работает только если - ячейки диапазона I7:J51 - ниже последних заполненных ячеек - полностью ничем не заняты.
Если там стоят пробелы (как сейчас) - то макрос не будет реагировать на текст и не извлечет в ячейку K33 нужные текстовые данные.

Как заставить макрос - воспринимать ячейки диапазона I7:J51 листа3, заполненные пробелами - как пустые ?
(чтобы он извлек нужный текст - в ячейку K33)
Макрос добавляет в текстовую строку - лишний знак "+"
 
Kuzmich, Михаил С., Ігор Гончаренко, в общем я посмотрел - у всех трех макросов - все нормально работает.

Так что всем - огромное спасибо и низкий поклон.
Макрос добавляет в текстовую строку - лишний знак "+"
 
Михаил С., а остальные плюсы - куда делись ?
Не нужен был только последний плюс.
Макрос добавляет в текстовую строку - лишний знак "+"
 
У меня макрос выводит в текстовую строку целевые слова, через знак "+".
Целевые слова указаны в диапазоне N4:N14

Текст копируется нормально, но добавляется еще лишний знак "+" (который по идее не нужен).

Как поменять макрос, чтобы он не ставил лишний знак "+"  ?
(сейчас в ячейку E33 - в текстовую строку выводится результат с лишним плюсом)
Макрос добавляет в текстовую строку - лишний знак "+"
 
Kuzmich, так делать-то что ?
Макрос добавляет в текстовую строку - лишний знак "+"
 
Михаил С., при запуске выдает ошибку:

"5 - Invalid procedure call or argument"
Макрос добавляет в текстовую строку - лишний знак "+"
 
Здравствуйте.
У меня макрос выводит в текстовую строку целевые слова, через знак "+".
Целевые слова указаны в диапазоне N4:N14

Текст копируется нормально, но добавляется еще лишний знак "+" (который по идее не нужен).

Как поменять макрос, чтобы он не ставил лишний знак "+"  ?
(сейчас в ячейку E33 - в текстовую строку выводится результат с лишним плюсом)
Суммировать числа из середины однотипных текстовых отметок
 
JayBhagavan,

Вот какая команда в этом коде - отвечает за левую часть текстовой отметки (та что по левую сторону от числа)?
То есть это некая команда, где стоит число 1, указывающая на то, что буква только одна.
Или я неправ ?
Суммировать числа из середины однотипных текстовых отметок
 
JayBhagavan, подскажите как изменить макрос.
Макрос извлекает из последней заполненной (не пробелами) ячейки столбца Z текстовые отметки, которые находятся между словами "образ." и запятой ",".
Слова эти примерно такие - "образ.м4-белый", "образ.-e2-зеленый",

И суммирует числа внутри этих текстовых отметок, если встретятся похожие.
Затем вставляет их (сложенные текстовые отметки) - в ячейку столбца AA, идущую тремя строками ниже - добавляя разделитель "+".

В общем макрос хорошо работает при условии что перед числом текстовой отметки - по левую сторону - идет всего одна буква.
Если букв этих будет больше - макрос выдаст ошибку.

То есть текст "образ.-м14-белый" - макрос будет видеть.
А текст "образ.-мgk4-белый" - макрос уже видеть не будет.

Скажите - как заставить макрос - обрабатывать также и те отметки, в которых по левую сторону от числа записано больше одной буквы ?
Извлечение из ячейки текстовых отметок с суммированием
 
Добрый день.

Подскажите как изменить макрос.
Макрос извлекает из последней заполненной (не пробелами) ячейки столбца Z текстовые отметки, которые находятся между словами "образ." и запятой ",".
Слова эти примерно такие - "образ.м4-белый", "образ.-e2-зеленый",

И суммирует числа внутри этих текстовых отметок, если встретятся похожие.
Затем вставляет их (сложенные текстовые отметки) - в ячейку столбца AA, идущую тремя строками ниже - добавляя разделитель "+".

В общем макрос хорошо работает при условии что перед числом текстовой отметки - по левую сторону - идет всего одна буква.
Если букв этих будет больше - макрос выдаст ошибку.

То есть текст "образ.-м14-белый" - макрос будет видеть.
А текст "образ.-мgk4-белый" - макрос уже видеть не будет.

Скажите - как заставить макрос - обрабатывать также и те отметки, в которых по левую сторону от числа записано больше одной буквы ?
Извлечение из ячейки текста и вставка его в другую ячейку - между определенными словами в строке
 
JayBhagavan, код работает.
Большое вам спасибо.
Извлечение из ячейки текста и вставка его в другую ячейку - между определенными словами в строке
 
Доброй ночи, форумчане.
Подскажите с решением.

На листе в диапазоне C7:D9 - напечатан разнообразный текст.
Рядом находится таблица N4:N14, в которой имеются ключевые слова

Как макросом извлечь из диапазона C7:D9 текст по списку (если таковой встречается),  и вставить его в ячейку E9 (между словами "ДЕНЬ-" и ",ВЕЧЕР") без повторов ?  
Примерно показал в прикрепленном файле - какой должен получится результат в ячейке E9.
Суммировать числа из середины однотипных текстовых отметок
 
JayBhagavan, вроде все работает. Большое спасибо.
Суммировать числа из середины однотипных текстовых отметок
 
JayBhagavan, да, перед числом всегда будет - только одна буква.
Суммировать числа из середины однотипных текстовых отметок
 
БМВ, не текст, а числа из середины однотипных текстовых отметок.В сообщении №3 - я описал это суммирование.
Суммировать числа из середины однотипных текстовых отметок
 
Цитата
JayBhagavan написал:
в результате работы макроса содержимое ячейки AA28 станет:Цитатаerwq(456mndg , ert-,sdfyt-, текст-.м2-желтый+.-м1-красный+.м3-красный+.е7-зеленый,wr345,), 5467d
Нет в результате работы макроса - содержимое ячейки AA28  должно стать таким:

erwq(456mndg , ert-,sdfyt-, текст-м2желтый+м4красный+е7зеленый,wr345,), 5467d

То есть:
Точки - убраны.  Знаки "-" тоже убраны.  И самое главное, что однотипные отметки - должны просуммироваться.
То есть м1красный+м3красный   это будет = м4красный.  (Они суммируются, поскольку по обе стороны от числа - стоит похожий текст)
Изменено: RagnarLodbrokovitch - 30.10.2018 07:24:14
Суммировать числа из середины однотипных текстовых отметок
 
Здравствуйте, уважаемые форумчане.
Помогите решить непростой вопрос.

У меня есть макрос.
На листе3 -  есть столбец Z, в который кое-где вписан различный текст или просто пробелы.
Причем некоторый текст имеет вид слов типа "txt.ffsgdg3" (Сперва идет "txt." потом какой-то случайный текст, потом однозначное или двузначное число - в данном случае "3")
Рядом идет столбец AA, в котором идет текст, включающий словосочетание "erwq(456mndg , ert-,sdfyt-, текст-,wr345,)"

Макрос сейчас подсчитывает числа идущие сразу после слов "txt." - в столбце Z, суммирует их и помещает в столбец AA - на три строчки вниз, между словом "текст-" и "," ?
(имеется ввиду - подсчет последней заполненной текстом (не пробелами) ячейки - столбца Z )

Вопрос такой.
На листе4 - есть похожая таблица.
Как из последней заполненной (не пробелами) ячейки - извлечь и просуммировать однотипный текст, начинающийся со слова "образ" и заканчивающийся запятой ","  ?
(В файле на листе4 - я пометил, что именно нужно подсчитать. В данном случае речь касается ячейки Z26, данные из которой нужно перенести в ячейку AA28)
Удаление макросом всего содержимого файла txt
 
SAS888, спасибо
Удаление макросом всего содержимого файла txt
 
Цитата
Юрий М написал:
Имеющийся файл просто удалить, а вместо него создать пустой одноимённый.
Ну или хотя бы так.

А вы - знаете как это сделать?
Сталкивались с макросами подобной сложности ?
Изменено: RagnarLodbrokovitch - 26.10.2018 05:20:05
Страницы: 1 2 След.
Наверх