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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 28 След.
Ошибка команды MkDir, Выдает ошибку на MkDir
 
Для MakeSureDirectoryPathExists также нужно учесть 64-битный VBA.
Код
Option Explicit
#If VBA7 Then
Private Declare PtrSafe Function MakeSureDirectoryPathExists _
        Lib "imagehlp.dll" (ByVal lpPath As String) As Long
#Else
Private Declare Function MakeSureDirectoryPathExists _
        Lib "imagehlp.dll" (ByVal lpPath As String) As Long
#End If
Ошибка команды MkDir, Выдает ошибку на MkDir
 
Цитата
Александр /// написал:
Перемещал файл в корневик С,
Что-то я очень сомневаюсь в этом из-за прав доступа к корневую директорию диска C. Возможно простым Copy - Paste вы делали это, но скриптом врядли вам это удастся.
Не работает NUM2TEXT.XLA по локальной сети, Excel дописывает адрес к функции =Сумма_прописью()
 
Цитата
galdikas написал:
Сумма_прописью
в Google поиск вбейте да и тут по на форуме была похожая фунция. Поиск делает чудеса, стоит только стремится если вас не забанил Google или что там у вас. За вас это делать никто не будет. К примеру. Удачи.
Не работает NUM2TEXT.XLA по локальной сети, Excel дописывает адрес к функции =Сумма_прописью()
 
Цитата
galdikas написал:
а там пароль
Так обратитесь к автору данной надстройки, может он вам и подскажет или поможет.
Запустить макрос из другой книги
 
Цитата
Sanja написал:
А для чего такие сложности?
Нет проблем у ТС видать, вот и занимается ... .;)
Перестал работать VBA-макрос с SQL-запросом, Excel в составе Office365 / подгрузка данных из отдельного файла по условию
 
galdikas,
Код
Option Explicit

Sub test_20New_macro()

    ' Получаем БИК с Лист3!D19
    Dim fff         As String
    fff = Trim(ThisWorkbook.Worksheets("Лист3").Range("D19").Value)

    If fff = "" Then
        MsgBox "БИК пустой!", vbExclamation
        Exit Sub
    End If

    ' Целевой лист
    Dim wsTarget    As Worksheet
    Set wsTarget = ThisWorkbook.Worksheets("Лист5")
    wsTarget.Range("B2:F2").ClearContents
    wsTarget.Columns("E").NumberFormat = "@"

    ' Путь к файлу BIC
    Dim wbPath      As String
    
    ' Временно для теста
    wbPath = ThisWorkbook.Path & "\BIC.xls"
    
    ' Раскомментируйте следуйщую строку, это оригинальный путь к вашему ФАЙЛУ BIC.xls _
    и удалите строку: wbPath = ThisWorkbook.Path & "\BIC.xls" что выше
    '    wbPath = "C:\1\BIC.xls"

    ' Создаём соединение через ADO
    Dim cn          As Object
    Set cn = CreateObject("ADODB.Connection")
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & wbPath & ";" & _
            "Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"

    ' SQL запрос
    Dim sql         As String
    sql = "SELECT [БИК], [Банк], [Город банка], [К/с] " & _
            "FROM [Лист1$] " & _
            "WHERE [БИК] LIKE '%" & fff & "%'"

    ' Создаём Recordset
    Dim rs          As Object
    Set rs = CreateObject("ADODB.Recordset")
    rs.Open sql, cn, 0, 1   ' 0=адекватный тип курсора, 1=read-only

    ' Записываем результат в Лист5
    If Not rs.EOF Then
        wsTarget.Range("B2").Value = rs.Fields("БИК").Value
        wsTarget.Range("C2").Value = rs.Fields("Банк").Value
        wsTarget.Range("D2").Value = rs.Fields("Город банка").Value
        wsTarget.Range("E2").Value = rs.Fields("К/с").Value
        Application.Goto ThisWorkbook.Worksheets("Лист5").Range("B2:E2")
    Else
        MsgBox "Данные по БИК '" & fff & "' не найдены.", vbInformation
    End If

    ' Закрываем
    rs.Close: Set rs = Nothing
    cn.Close: Set cn = Nothing
End Sub

Архив распакуйте куда-то, запустите файл 08.01.2026_Pl (Перестал работать VBA-макрос с SQL-запросом).xlsm, жмите кнопку и увидите результат. Читайте внимательно комментарии в коде. Удачи.
Запустить макрос из другой книги
 
Фрезератор, Вы разницу в своем коде файла из вашего поста #5 и кодом что вам предоставил Уважаемый Sanja в посте #2 видите?
Перестал работать VBA-макрос с SQL-запросом, Excel в составе Office365 / подгрузка данных из отдельного файла по условию
 
galdikas, Приложите файл пример ваш
Цитата
galdikas написал:
BIC.xls
, будем что-то думать.
Запустить макрос из другой книги
 
Цитата
Фрезератор написал:
Проблема решена
Что-то не верится мне!
Код
Application.Run Macro:="Nam_Fi!ModDeliter.Delet_sch"
Ты передаёшь строку "Nam_Fi!...", а не имя файла, которое хранится в переменной Nam_Fi. VBA пытается найти книгу с буквальным именем Nam_Fi.xlsm, которой не существует. Правильно будет склеить строку с именем файла:
Код
Application.Run "'" & Nam_Fi & "'!ModDeliter.Delet_sch"


Если не верите что ваш код работает неправильно, то уберите в вашем коде строку
Код
On Error Resume Next
. Вместо неё внесите следуйщую строку
Код
On Error GoTo ErrHandler
. И окончание вашей процедуры будет таким
Код
    Application.Run Macro:="Nam_Fi!ModDeliter.Delet_sch"
    Application.DisplayAlerts = False
    ActiveWorkbook.Close True
    Application.DisplayAlerts = True
    Exit Sub

ErrHandler:
    MsgBox "Ошибка при открытии или выполнении макроса: " & Nam_Fi, vbCritical
End Sub
и увидите ошибку Вам решать.
Изменено: MikeVol - 08.01.2026 09:34:23 (Дополнил ответ)
Запустить макрос из другой книги
 
Цитата
Фрезератор написал:
майкрософт заблокировала как опасные
Проделайте то что на скриншоте и будет вам счастье.
Перестал работать VBA-макрос с SQL-запросом, Excel в составе Office365 / подгрузка данных из отдельного файла по условию
 
galdikas, Добро Пожаловать на данный форум. Для ясности приложили бы файл(ы) пример. На словах, есть возможные причины по которым у вас перестал работать ваш макрос.
1. Проблемами с правами доступа/файла.
2. Несовместимостью драйвера ODBC для Excel (особенно с новым форматом .xls или .xlsx).
Может ещё что, незнаю. Но посоветовать вам хочу перейти на ADO, что надёжнее для Excel 365 (точно утверждать не могу, нет данной версии у меня).
Работа с датами в Excel, Подсчет количества ячеек в строке с датой меньше чем (текущая + количество месяцев из другой строки в этом же столбце).
 
Цитата
DAB написал:
Красным выделены необязательные минусы,
а где это? в ваших мыслях? как понять где красное?
Изменено: MikeVol - 03.01.2026 02:45:44
Vba excel 2, Продолжение работы по созданию макрос для Vba excel
 
halik3, так вы и в прошлой вашей теме отморозились.
Многократная печать листа1, путем подстановки условия из ячеек таблицы на втором листе, печать листа путем перебора значений второго листа
 
r_Vladimir, С НОвым Годом! Посмотрите тут, возможно и поможет вам.
Поиск Даты методом .Find() с конца диапазона
 
Цитата
Sanja написал:
циклом проблем не составляет
OlegO, например так:
Код
Option Explicit

Private Sub CommandButton1_Click()
    Dim c           As Range
    Dim i           As Long

    Dim f           As Double
    f = DateSerial(2025, 12, 1)   ' или 45962

    For i = [Dt].Rows.Count To 1 Step -1
        Set c = [Dt].Cells(i)

        If c.Value = f Then
            MsgBox c.Row
            Application.Goto c, True
            Exit For
        End If

    Next i

End Sub
Как при инициализации формы в Texbox получить десятичное число через запятую
 
Цитата
Вал Бал написал:
У меня получилось только с кнопкой
Можно и без кнопки:
Код
Option Explicit

Private Sub TextBox1_Change()
    Dim txt         As String
    txt = Me.TextBox1.Text
    txt = Replace(txt, ".", ",")
    
    If txt = "" Then
        Cells(ActiveCell.Row, 12).ClearContents
        Exit Sub
    End If

    Dim i As Long, ch As String, cleaned As String, decUsed As Boolean

    For i = 1 To Len(txt)
        ch = Mid$(txt, i, 1)

        Select Case ch
            Case "0" To "9"
                cleaned = cleaned & ch

            Case ","

                If Not decUsed Then
                    cleaned = cleaned & ch
                    decUsed = True
                End If

            Case "-"
                If i = 1 Then cleaned = "-"
        End Select

    Next i

    If cleaned <> txt Then
        Me.TextBox1.Text = cleaned
        Me.TextBox1.SelStart = Len(cleaned)
        Exit Sub
    End If

    If IsNumeric(cleaned) Then
        Cells(ActiveCell.Row, 12).Value = CDec(cleaned)
    End If

End Sub

Private Sub UserForm_Initialize()
    Dim dec         As String
    dec = Application.International(xlDecimalSeparator)

    Dim v           As Variant
    v = Cells(ActiveCell.Row, 12).Value

    If IsNumeric(v) Then
        Me.TextBox1.Text = Replace(CStr(v), ".", dec)
    Else
        Me.TextBox1.Text = ""
    End If

End Sub
Как при инициализации формы в Texbox получить десятичное число через запятую
 
Вал Бал,
Код
Option Explicit

Private Sub UserForm_Initialize()
    Dim dec         As String
    dec = Application.International(xlDecimalSeparator)

    Dim v           As Variant
    v = Cells(ActiveCell.Row, 12).Value

    If IsNumeric(v) Then
        Me.TextBox1.Text = Replace(CStr(v), ".", dec)
    Else
        Me.TextBox1.Text = ""
    End If

End Sub
Теперь не важно где вы встанете, на какую ячейку. В данном коде определяется строка и выводится значение в TextBox1 из колонки L как вам надо. Главное чтоб это было число иначе в TextBox1 ничего не выведется.
Изменено: MikeVol - 30.11.2025 10:51:59 (Дополнил ответ)
Как при инициализации формы в Texbox получить десятичное число через запятую
 
Цитата
Вал Бал написал:
Вот в данном примере встаньте на ячейку "B7"
Вам самим необходимо определится что вам надо в конечном результате. Синтаксис тот что у вас сейчас неправильный. Смотрите: при
Цитата
Вал Бал написал:
ActiveCell.Range("A1").Offset(0, 10).Value
теперь встаньте на
Цитата
Вал Бал написал:
Пускай это будит ячейка "B7",
и
Цитата
Вал Бал написал:
вызовите форму
вашу. Что у вас там отображается в
Цитата
Вал Бал написал:
"TextBox1"
???

Вам необходимо всегда получить в TextBox1 значения из колонки L (12)?
Изменено: MikeVol - 30.11.2025 10:44:59
Сборка данных со всех листов книги в одну таблицу, Сборка данных со всех листов книги в одну таблицу
 
Дмитрий(The_Prist) Щербаков, Тогда перееишем процедуру иначе:
Код
Option Explicit

Sub CollectDataFromAllSheets()
    Dim ws          As Worksheet
    Dim rngData     As Range
    Dim nextRow     As Long

    ' Ускорение
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    Dim wbCurrent As Workbook, wbReport As Workbook
    Set wbCurrent = ActiveWorkbook
    Set wbReport = Workbooks.Add

    ' Копируем шапку таблицы
    wbCurrent.Worksheets(1).Range("A1:D1").Copy wbReport.Worksheets(1).Range("A1")

    ' Обходим все листы
    For Each ws In wbCurrent.Worksheets

        ' исходный диапазон
        Set rngData = ws.Range("A1:D5")

        ' Пропускаем лист, если там пусто
        If Application.WorksheetFunction.CountA(rngData) = 0 Then
            GoTo NextWs
        End If

        ' Находим первую свободную строку
        nextRow = wbReport.Worksheets(1).Cells(wbReport.Worksheets(1).Rows.Count, 1).End(xlUp).Row + 1

        ' Копируем значения напрямую (без буфера обмена)
        wbReport.Worksheets(1).Range("A" & nextRow).Resize(rngData.Rows.Count, rngData.Columns.Count).Value = rngData.Value

NextWs:
    Next ws

    ' Возврат настроек
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub
Изменено: MikeVol - 23.11.2025 16:07:56
Сборка данных со всех листов книги в одну таблицу, Сборка данных со всех листов книги в одну таблицу
 
Светлана Клешнева,
Код
        rngData.Copy Destination:=wbReport.Worksheets(1).Cells(n + 1, 1)
Адаптировать файл с макросами созданный в Office 2003 для работы в Office 2019
 
Цитата
Константин Коломагин написал:
Там наверняка какую нибудь одну-другую строку подредактировать надо, чтобы в новом офисе работало.
Вам же Sanja в своём посте дал информацию как лучше будет
Цитата
Sanja написал:
Там проще все переписать заново
так чтоб работало нормально без костылей. Вам Константин Коломагин стоит более детальнее обдумать вашу хотелку (задачу) и создать новую тему в разделе "Работа", ссылку сами найдёте на данном саййте. Наверняка кто-то (не претендую) решит вашу задачу именно так как вам надо, оптимальнее чем то что есть сейчас у вас. Удачи.
Макрос для создания строки по условию ячейки, Макрос для создания строки по условию ячейки
 
solutio,
Код
Option Explicit

Sub Solutio()
    Dim i           As Long

    Dim ws          As Worksheet
    Set ws = ActiveSheet   ' Можете сами указать конкретный лист, например: Set ws = ThisWorkbook.Worksheets("Лист1")

    Dim lastRow     As Long
    lastRow = ws.Cells(ws.Rows.Count, "AV").End(xlUp).Row

    For i = lastRow To 2 Step -1

        If ws.Cells(i, "AV").Value = "Условие" Then
            ws.Rows(i + 1).Insert Shift:=xlDown
            ws.Cells(i + 1, "A").Value = ws.Cells(i, "A").Value
            ws.Cells(i + 1, "B").Value = ws.Cells(i, "B").Value
            ws.Cells(i + 1, "C").Value = ws.Range("C1").Value & ws.Range("BB1").Value
        End If

    Next i

End Sub
Запуск определённых макросов через одну форму с паролем
 
Voltz, Доброго. Сразу скажу что ваш файл пример не смотрел.
В стандартном InputBox в VBA нельзя сделать ввод пароля со звёздочками - он всегда показывает введённый текст открыто. Отсюда вывод - только через
Цитата
Voltz написал:
"UserForm1"
P.S. Нет возможности скачать файл пример.
поиск и добавление значений из другого файла
 
hunt1, Доброго. Вопрос, а почему у вас в Итоговом файле вы проставили 1, 2, 3, 4 сотрудникам? Ну а так пробуйте следущий код:
Скрытый текст
Файлы выгружаемые должны лежать в одной папке, указал коментарий в коде. Замените на свою папку. В итоговом файле в первой строке должен быть написан месяц иначе данные не внесутся.
Получение списка свойств файлов папки в указанной директории и их обработка с выводом в таблицу Excel
 
Adamm, Уже и не вспомню откуда данный макрос, где-то на просторах интернета был взят. На авторство не претендую. Посмотрите его:
Код
Option Explicit

Sub GetLastSavedBy_Folder()
    Dim wb As Object, oFile As Object

    Const FolderPath As String = "D:\Excel\"   ' Укажите вашу папку

    Dim ws          As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    ws.Cells.Clear
    ws.Range("A1:D1").Value = Array("Имя файла", "Путь", "Дата изменения", "LastSavedBy")

    Dim oFSO        As Object
    Set oFSO = CreateObject("Scripting.FileSystemObject")

    Dim oFolder     As Object
    Set oFolder = oFSO.GetFolder(FolderPath)

    Dim xlApp       As Object
    Set xlApp = CreateObject("Excel.Application")
    xlApp.DisplayAlerts = False
    xlApp.Visible = False

    Dim i           As Long
    i = 2

    For Each oFile In oFolder.Files

        If LCase(oFSO.GetExtensionName(oFile.Name)) = "xlsx" _
                Or LCase(oFSO.GetExtensionName(oFile.Name)) = "xlsm" _
                Or LCase(oFSO.GetExtensionName(oFile.Name)) = "xls" Then

            On Error Resume Next
            Set wb = xlApp.Workbooks.Open(oFile.Path, ReadOnly:=True)

            If Not wb Is Nothing Then
                ws.Cells(i, 1).Value = oFile.Name
                ws.Cells(i, 2).Value = oFile.Path
                ws.Cells(i, 3).Value = oFile.DateLastModified
                ws.Cells(i, 4).Value = wb.BuiltinDocumentProperties("Last Author")

                wb.Close False
                Set wb = Nothing
                i = i + 1
            End If

            On Error GoTo 0
        End If

    Next

    xlApp.Quit
    Set xlApp = Nothing
    Set oFSO = Nothing
    Set oFolder = Nothing
    Set oFile = Nothing
End Su
Показать дни рождения, в ближайшие 45 дней, учитывая все таблицы
 
Код
Option Explicit

Sub nextBirthday_All()
    Dim i           As Long
    Dim iLR         As Long
    Dim ДатаРождения As Date
    Dim Лет         As Integer
    Dim ws          As Worksheet
    Dim iLastRow    As Long

    Dim wsDR        As Worksheet
    Set wsDR = ThisWorkbook.Worksheets("ДР")   ' лист для вывода результатов

    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual

        ' Очистка диапазона на листе "ДР"
        wsDR.Range(wsDR.Cells(2, 1), wsDR.Cells(wsDR.Rows.Count, 9)).ClearContents

        ' Перебор всех листов, кроме "ДР" и "Титульный"
        For Each ws In ThisWorkbook.Worksheets
            
            If ws.Name <> "ДР" And ws.Name <> "Титульный" Then

                ' Находим последнюю заполненную строку в столбце A на текущем листе
                iLastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

                ' Перебор строк
                For i = 2 To iLastRow

                    If ws.Cells(i, "F").Value <> "" And IsDate(ws.Cells(i, "F").Value) Then

                        If DateSerial(Year(Date), Month(ws.Cells(i, "F")), Day(ws.Cells(i, "F"))) - Date >= 0 And _
                                DateSerial(Year(Date), Month(ws.Cells(i, "F")), Day(ws.Cells(i, "F"))) - Date < 45 Then

                            ' Найти следующую пустую строку на листе ДР
                            iLR = wsDR.Cells(wsDR.Rows.Count, "A").End(xlUp).Row + 1

                            ' Копировать значения
                            wsDR.Cells(iLR, "A").Resize(1, 7).Value = ws.Cells(i, "B").Resize(1, 7).Value

                            ' Вычисляем количество лет
                            ДатаРождения = ws.Cells(i, "F").Value
                            Лет = DateDiff("yyyy", ДатаРождения, Date)

                            If Month(Date) < Month(ДатаРождения) Then
                                Лет = Лет - 1
                            ElseIf Month(Date) = Month(ДатаРождения) And Day(Date) < Day(ДатаРождения) Then
                                Лет = Лет - 1
                            End If

                            wsDR.Cells(iLR, "H").Value = Лет
                            wsDR.Cells(iLR, "I").Value = Day(ДатаРождения) & " " & MonthName(Month(ДатаРождения))

                            ' Вспомогательный столбец для сортировки
                            wsDR.Cells(iLR, "J").Value = DateSerial(Year(Date), Month(ДатаРождения), Day(ДатаРождения))

                            If wsDR.Cells(iLR, "J").Value < Date Then
                                wsDR.Cells(iLR, "J").Value = DateSerial(Year(Date) + 1, Month(ДатаРождения), Day(ДатаРождения))
                            End If

                        End If

                    End If
                Next i

            End If

        Next ws

        ' Сортировка на листе "ДР"
        iLR = wsDR.Cells(wsDR.Rows.Count, "A").End(xlUp).Row

        If iLR > 1 Then
            wsDR.Sort.SortFields.Clear

            Dim sortRange As Range
            Set sortRange = wsDR.Range("A2:J" & iLR)

            wsDR.Sort.SortFields.Add Key:=wsDR.Range("J2:J" & iLR), _
                    SortOn:=xlSortOnValues, _
                    Order:=xlAscending, _
                    DataOption:=xlSortNormal
            
            With wsDR.Sort
                .SetRange sortRange
                .Header = xlNo
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        
        End If

        ' Очистка вспомогательного столбца
        wsDR.Range("J2:J" & iLR).ClearContents

        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With

End Sub
Ошибка 91 "Object variable or With block variable not set", Возникает при явно определенных переменных
 
syt navy, Каков был файл пример таков был и ответ. Что там в правилах форума пишется про файл пример, пункт 2.3? Ваш файл пример не соответсвует вашему #8 посту В файле примере у вас умная таблица из 3-х колонок, в вашем посте формула вставляется в 9, 10 и 11-е колонки. Где в вашем примере єти колонки?
Изменено: MikeVol - 01.09.2025 15:52:26 (Дополнил ответ)
Ошибка 91 "Object variable or With block variable not set", Возникает при явно определенных переменных
 
syt navy, Увидеть бы ещё файл пример с данным макросом...
Выпадающие списки с возможностью добавления новых значений, Несколько списков на разных листах
 
Цитата
rusbondarev написал:
хочется чтобы новые данные он брал из записи и сам вносил в другие вкладки данные
Проще тогда использовать пользовательскую форму ввода данных. Поищите на форуме тут, таких тем полно. Думаю сами решите свой вопрос. Удачи

P S. Ваш файл пример не смотрел.
Изменено: MikeVol - 30.08.2025 07:10:07 (Дополнил ответ.)
Синхронизация автофильтров
 
syt navy, Пробуйте такой вариант, но без времени, только по датам.
Код
Option Explicit

Private Sub Worksheet_Calculate()
    Dim rngVisible  As Range
    On Error GoTo ErrHandler

    Dim SourceTab As ListObject, TargetTab As ListObject
    Set SourceTab = ThisWorkbook.Worksheets("Лист1").ListObjects("Table1")
    Set TargetTab = ThisWorkbook.Worksheets("Лист2").ListObjects("Table2")

    On Error Resume Next
    Set rngVisible = SourceTab.ListColumns(1).DataBodyRange.SpecialCells(xlCellTypeVisible)
    On Error GoTo 0

    If Not rngVisible Is Nothing Then

        Dim CritDate As Date
        CritDate = Int(rngVisible.Cells(1, 1).Value)

        TargetTab.Range.AutoFilter Field:=1, _
                Criteria1:=">=" & Format(CritDate, "yyyy-mm-dd"), _
                Operator:=xlAnd, _
                Criteria2:="<" & Format(CritDate + 1, "yyyy-mm-dd")
    Else
        If TargetTab.AutoFilter.FilterMode Then TargetTab.AutoFilter.ShowAllData
    End If

    Exit Sub

Cleanup:
    Set rngVisible = Nothing
    Set TargetTab = Nothing
    Set SourceTab = Nothing
    Exit Sub

ErrHandler:
    MsgBox "Произошла ошибка: " & Err.Description
    Resume Cleanup
End Sub
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 28 След.
Наверх