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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 29 След.
Как в отдельных листах сформировать списки товаров по контрагенту из общей таблицы?, формирование лицевых счетов
 
Цитата
Demoon написал:
ибо настоящая таблица немного сложнее
Для этого и делается файл пример максимально схожий по структуре рабочего файла, без чуствительных данных.
Изменено: MikeVol - 11.04.2026 14:35:51
Перенос данных макросом, Перенос данных из одной книги в другую
 
FYS, Тебе не нужно Copy вообще -он всегда тащит формулы, форматы и всё остальное. Самый быстрый и правильный способ - присваивать значения напрямую, на примере:
Код
DestinationRange.Value = SourceRange.Value
В вашем случае:
Код
    ' Информация
    wbTo.Worksheets("Информация").Range("B2").Value = _
            wbFrom.Worksheets("Информация").Range("B2").Value
и так далее.
Цитата
Sanja написал:
П.С. Код в сообщении оформите соответствующим тегом (на панели значок  )
FYS, смотрите скриншот как это делается ниже. Удачи.
Макрос взамен функции ВПР, Макрос для переноса данных с одного листа на другой в зависимости совпадений начальных данных
 
Цитата
Hugo написал:
с 2011 года используете?
Мастер (Hugo) узнал свой код, учился и я на ваших примерах. Спасибо вам за это.
Тормозит Excel с Think-cell, Тормозит Excel с Think-cell
 
Sanja, Вот тут обсуждалось эта надстройка think-cell.
VBA. При удалении элементов из копии словаря, удаляются соответствующие элементы из словаря-источника
 
Sanja, Причина в этой строке:
Код
Set dicCopy = dic
Ты не создаёшь копию словаря, а просто присваиваешь ссылку на тот же объект. В VBA объекты (включая Scripting.Dictionary) работают по ссылке:dic - указывает на объект в памяти dicCopy - после Set dicCopy = dic указывает на тот же самый объект. В итоге у тебя: dic и dicCopy - это один и тот же словарь и у тебя любое Remove из dicCopy = удаление из dic. В вашем случае нужно создать новый объект и вручную скопировать элементы:
Код
Set dicCopy = CreateObject("Scripting.Dictionary")

For Each iKey In dic.Keys
    dicCopy.Add iKey, dic(iKey)
Next
Ну и полный рабочий код будет таким:
Код
Option Explicit

Sub Remove_From_dicCopy_v2()
    Dim iTmp, iKey

    Dim dic         As Object
    Set dic = CreateObject("Scripting.Dictionary")

    Dim dicCopy     As Object
    Set dicCopy = CreateObject("Scripting.Dictionary")

    With Worksheets("Лист1")
        .Range("D2:E" & .Cells(.Rows.Count, "A").End(xlUp).Row).ClearContents

        Dim arr()
        arr = .Range("A2:A" & .Cells(.Rows.Count, "A").End(xlUp).Row).Value

        ' заполняем основной словарь
        For Each iKey In arr
            iTmp = dic(iKey)
        Next

        ' создаем РЕАЛЬНУЮ копию
        For Each iKey In dic.Keys
            dicCopy.Add iKey, dic(iKey)
        Next

        ' удаляем из копии
        For Each iKey In dicCopy.Keys
            If iKey Mod 3 = 0 Then dicCopy.Remove iKey
        Next

        .Range("D2").Resize(dic.Count) = Application.Transpose(dic.Keys)
        .Range("E2").Resize(dicCopy.Count) = Application.Transpose(dicCopy.Keys)
    End With

End Sub
Копирование листов с заменой в другую книгу
 
Aka-87, Если понял я вас правильно то пробуйте следуйщий макрос:
Код
Option Explicit

Function SheetExists(wsName As String, wb As Workbook) As Boolean
    Dim ws          As Worksheet

    For Each ws In wb.Worksheets

        If ws.Name = wsName Then
            SheetExists = True
            Exit Function
        End If

    Next ws

End Function

Sub test()
    Dim wb          As Workbook
    Const shx       As String = "НПО"

    With Application: .ScreenUpdating = False: .EnableEvents = False: .DisplayAlerts = False: End With

    Dim wbd         As Workbook
    Set wbd = Workbooks.Open(ThisWorkbook.Path & "\НПО.xlsm")

    For Each wb In Workbooks

        If wb.Name <> wbd.Name And SheetExists(shx, wb) Then

            If SheetExists(shx, wbd) Then

                Dim shOld As Worksheet
                Set shOld = wbd.Worksheets(shx)
                shOld.Name = shx & "_old"
            End If

            wb.Worksheets(shx).Copy After:=wbd.Sheets(wbd.Sheets.Count)

            If Not shOld Is Nothing Then
                shOld.Delete
            End If

            Exit For
        End If

    Next wb

    With Application: .DisplayAlerts = False: wbd.Close SaveChanges:=True: .DisplayAlerts = True: .EnableEvents = True: .ScreenUpdating = True: End With
End Sub
Удаление строк по условию, Удаление строк по условию
 
vbgin, А так?
Код
Sub DelRows_v2()
    Dim iSh         As Worksheet

    For Each iSh In ThisWorkbook.Worksheets

        Dim TestCell As Range
        Set TestCell = iSh.UsedRange.Find(What:="Тест", LookIn:=xlValues, LookAt:=xlWhole)

        If Not TestCell Is Nothing Then

            Dim TestRow As Long
            TestRow = TestCell.Row

            If TestRow > 1 Then
                iSh.Rows("1:" & TestRow - 1).Delete
            End If

        Else
            MsgBox "Слово 'Тест' не найдено на листе: " & iSh.Name, vbInformation
        End If

    Next iSh

End Sub
Макрос не удаляет последнюю строку смарт таблицы
 
agregator, Что-то смутно вас понял, но как вариант пробуйте так:
Код
    With ActiveSheet.ListObjects("Таблица4")
        
        If .ShowTotals Then
            
            If .ListRows.Count >= 12 Then
                .ListRows(.ListRows.Count).Range.Offset(-3, 0).Resize(3).Delete
            End If
        
        Else
            
            If .ListRows.Count >= 14 Then
                .ListRows(12).Range.Resize(3).Delete
            End If
        
        End If
    
    End With
Автоматически обновляемый зависимый выпадающий список
 
BruceONeel, Как вариант загляните сюда. Может вам поможет.
Поиск значения и вставка текса в ячейку рядом с ним
 
Кросс.
Перенос данных с одного листа на другой, перенос данных
 
GGE29, После строк
Код
    Res.ClearContents
надо обнулить переменную r:
Код
    Res.ClearContents
    r = 0
[ Закрыто] Снятие галок макросом, Снятие галок
 
GGE29, VBA не понимает вашего языка:
Код
    Selection.Replace What:="ИСТИНА", Replacement:="ЛОЖЬ", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
Следует писать так чтоб он (VBA) вас понимал:
Код
    Selection.Replace What:="True", Replacement:="False", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
Вставка названия ЧекБокса, В ячейки по выбору столбцов
 
Tigo, Смотрите файл, удачи.
Формирование списка выпадающих данных в excel
 
NTK12, Ну и для вашего развития можете почитать интересные статьи на данном сайте по вашему вопросу.
ADODB. Ошибка выполнения SQL при попытке доступа к данным, После обновления Windows возникает ошибка "Операция не поддерживается для объектов этого типа"
 
captain_s, Проверьте так:
Код
Sub Test_v2()
    Dim cn As Object
    Set cn = CreateObject("ADODB.Connection")
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & ThisWorkbook.FullName & ";" & _
            "Extended Properties=""Excel 12.0 Macro;HDR=No;IMEX=1"";"

    Dim rs As Object
    Set rs = CreateObject("ADODB.Recordset")
    rs.CursorLocation = 3
    rs.CursorType = 3

    rs.Open "SELECT * FROM [Лист1$A1:B2]", cn

    Do Until rs.EOF
        Debug.Print rs.Fields(0).Value, rs.Fields(1).Value
        rs.MoveNext
    Loop

    rs.Close
    cn.Close
    Set rs = Nothing
    Set cn = Nothing
End Sub
Данная строка:
Код
rs_temp.Open "select * from [Excel 12.0 macro;Database=" & ThisWorkbook.FullName & ";HDR=NO;IMEX=1;].[Лист1$A1:B2]", cn
Больше не поддерживается современными версиями: Windows 10/11 (после апдейтов), Office 365 / 2019 / 2021, ACE OLEDB 12/16. Раньше ACE позволял inline-connection string в FROM, сейчас - нет. Это где-то я находил на забугорных форумах (уже и не найду наверное).
перенос данных по условию макросом
 
Бррр, что-то ещё более запутался. Ну да ладно.
перенос данных по условию макросом
 
Ещё вариант:
Код
Option Explicit

Sub MoveByFarshmak()
    On Error GoTo CleanExit

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    With ActiveSheet
        Dim lastRow As Long, r As Long, outRow As Long
        Dim dataArr As Variant, key As Variant
        Dim dict    As Object

        Do
            lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
            If lastRow < 2 Then Exit Do

            dataArr = .Range("A2:D" & lastRow).Value
            Set dict = CreateObject("Scripting.Dictionary")

            For r = 1 To UBound(dataArr, 1)

                If Not dict.exists(dataArr(r, 4)) Then
                    dict.Add dataArr(r, 4), New Collection
                End If

                dict(dataArr(r, 4)).Add Array(dataArr(r, 1), dataArr(r, 2), dataArr(r, 3))
            Next r

            .Range("E2:H" & lastRow).Delete Shift:=xlUp
            outRow = 2

            For Each key In dict.Keys
                .Cells(outRow, "H").Value = key

                Dim i As Long

                For i = 1 To dict(key).Count
                    .Cells(outRow, 5).Resize(1, 3).Value = dict(key)(i)
                    outRow = outRow + 1
                Next i

            Next key

            .Range("A2:D" & lastRow).Delete Shift:=xlUp
        Loop

    End With

CleanExit:
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

    If Err.Number <> 0 Then
        MsgBox Err.Description, vbCritical
    End If

End Sub
перенос данных по условию макросом
 
Цитата
Farshmak написал:
ячейки удаляются со сдвигом вверх
Какие имено ячейки, в колонках
Цитата
Farshmak написал:
E, F, и G
или ячейки в колонках
Цитата
Farshmak написал:
A, B, и C
? Нужно уточнить данный момент.
Как в форму в Listbox вывести таблицу из диапазона ячеек
 
Voltz, Строго для приведённого вами файла!
Скрытый текст
Возможно вы не сможете его аддаптировать под ваш оригинальный файл.
Как в форму в Listbox вывести таблицу из диапазона ячеек
 
Цитата
Voltz написал:
по типу как ячейки брать в границы?
Нет, но если это у вас получиться то дайте нам знать.
Как в форму в Listbox вывести таблицу из диапазона ячеек
 
Voltz, Думаю что стоит вам почитать данную статью (на форуме много схожих тем с вашей темой). Стоит только поиском воспользоваться. Удачи.
откорректировать макрос, непечатается шапка на листе результат только данные
 
alex_tixi, А так?
Надеюсь поможет вам
Перенос данных из одной книги в другую, Перенос данных из одной книги в другую
 
FYS, Файлы ваши несмотрел, взял ваш код и отредактировал (оптимизировал).
Код
Option Explicit

Sub Перенос_данных()
    Dim wbFrom      As Workbook
    Set wbFrom = Workbooks("Шаблон старый ОТКУДА.xlsx")

    Dim wbTo        As Workbook
    Set wbTo = Workbooks("Шаблон новый КУДА.xlsx")

    ' Копируем с листа ф.1
    wbFrom.Worksheets("ф.1").Range("I6:I100").Copy _
            Destination:=wbTo.Worksheets("ф.1").Range("I6")

    ' Копируем с листа ВНА2
    wbFrom.Worksheets("ВНА2").Range("U9:U68").Copy _
            Destination:=wbTo.Worksheets("ВНА2").Range("U9")
End Sub
Изменено: MikeVol - 22.01.2026 20:02:02 (Забыл код вставить...)
Запуск макроса при изменении ListBox
 
Цитата
OlegO написал:
на форме есть листбокс
А никого не смутило что нет на форме данного контролла? В который раз читаю пост стартовый от OlegO и не могу понять, где у него на форме данный контролл?
Изменено: MikeVol - 20.01.2026 21:33:45
Импорт таблицы Excel через SQL запрос в Microsoft Query с преобразованием данных на лету
 
Цитата
Excelman написал:
Но вопрос с конвертированием текста в число остался, (текст в дату).
Пробуйте так
Код
    Dim SQL         As String
    SQL = _
            "SELECT " & _
            "    *, " & _
            "    DateSerial( " & _
            "        Mid([Дата],7,4), " & _
            "        Mid([Дата],4,2), " & _
            "        Mid([Дата],1,2) " & _
            "    ) AS Дата " & _
            "FROM [Источник$A2:F]"
Возможно это поможет а может нет. Полный код будет таким
Код
Option Explicit

Sub Import_From_Data1_ADO()
    On Error GoTo Whoa
    Application.ScreenUpdating = False

    Dim dbPath      As String
    dbPath = ThisWorkbook.Path & "\Source.xlsx"

    Dim cnn         As ADODB.Connection
    Set cnn = New ADODB.Connection

    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & dbPath & ";" & _
            "Extended Properties='Excel 12.0 Xml;HDR=Yes;IMEX=1';"

    Dim SQL         As String
    SQL = _
            "SELECT " & _
            "    *, " & _
            "    DateSerial( " & _
            "        Mid([Дата],7,4), " & _
            "        Mid([Дата],4,2), " & _
            "        Mid([Дата],1,2) " & _
            "    ) AS Дата " & _
            "FROM [Источник$A2:F]"

    Dim rst         As ADODB.Recordset
    Set rst = New ADODB.Recordset

    rst.Open SQL, cnn, adOpenStatic, adLockReadOnly

    If rst.EOF Then
        MsgBox "В таблице Data1 нет записей.", vbCritical
        GoTo LetsContinue
    End If

    With ThisWorkbook.Worksheets("Лист1").ListObjects("Таблица_Запрос_из_Excel_Files")

        If Not .DataBodyRange Is Nothing Then
            .DataBodyRange.Delete
        End If

        .Range(2, 1).CopyFromRecordset rst

        Dim dateColIndex As Long
        dateColIndex = .ListColumns("Дата").Index
        
        .ListColumns(dateColIndex).DataBodyRange.NumberFormat = "dd.mm.yyyy"
        .Range.Columns.AutoFit
    End With

LetsContinue:
    On Error Resume Next
    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing
    Application.ScreenUpdating = True
    On Error GoTo 0
    Exit Sub

Whoa:
    MsgBox "Error Description: " & Err.Description & vbCrLf & _
            "Error Number: " & Err.Number, vbCritical
    Resume LetsContinue
End Sub
Открой редактор VBA → Tools → References, Поставь галочку:Microsoft ActiveX Data Objects 6.1 Library (или 2.8 / 6.0 — не критично) и нажми OK.
Импорт таблицы Excel через SQL запрос в Microsoft Query с преобразованием данных на лету
 
Excelman, Доброго времени суток. НЕЛЬЗЯ получить ListObject через ODBC-подключение к Excel-файлу, об этом можно в сети много иформации найти как и через ADODB.подключение. Только с указанием листа и диапазона
Код
"SELECT * FROM [Источник$A2:F]"
если ниже вашей таблицы нет других данных. Ну а ессли есть то тогда фиксированный диапазон
Код
"SELECT * FROM [Источник$A2:F29]"
Изменено: MikeVol - 17.01.2026 11:33:45
Как скрыть ненужные листы в экселе, Как создать триггер для открытия нужных листов
 
В модуль листа
Цитата
Stereok написал:
лист1
внесите следуйший код:
Код
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ws          As Worksheet

    On Error GoTo CleanExit
    If Intersect(Target, Me.Range("C16")) Is Nothing Then Exit Sub
    If Target.Value = "" Then Exit Sub

    Application.ScreenUpdating = False
    Application.EnableEvents = False

    For Each ws In ThisWorkbook.Worksheets

        If ws.Name = "Лист1" Then
            ws.Visible = xlSheetVisible
        Else

            If InStr(1, ws.Name, Target.Value, vbTextCompare) > 0 Then
                ws.Visible = xlSheetVisible
            Else
                ws.Visible = xlSheetHidden
            End If

        End If

    Next ws

CleanExit:

    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
И будет вам счасте. Удачи.
Ошибка команды 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 или что там у вас. За вас это делать никто не будет. К примеру. Удачи.
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 29 След.
Наверх