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

Страницы: 1
Vba аналог range = range.value, но с автофильтром
 
Добрый день,

В макросе содержится формула. Нужно чтобы из колонки с формулой AF переносились значения в итоговую колонку AD.
Без автофильтров работает. Но важно чтобы работало с автофильтрами в предыдущих колонках, с ними перестает работать.
Как сделать чтобы работало с автофильтрами?
Код
Sub test()
    Dim LastRow As Long
    Dim mySheet As Worksheet

    Set mySheet = ActiveSheet
    Application.ScreenUpdating = False
    With mySheet
          LastRow = .Cells(.Rows.Count, 4).End(xlUp).Row
         With .Range("AF1:AF" & LastRow)
            .HorizontalAlignment = xlCenter
            .NumberFormat = "General"
            .FormulaLocal = "=ЕСЛИ(ИЛИ(И(P1=0;T1=0;U1=0);И(ЕСЛИ(P1>=ЕСЛИ(T1<50;U1+10;U1/14*21);0;ЕСЛИ(T1<50;U1+10;U1/14*21)-P1)<5;ЕСЛИ(P1>=ЕСЛИ(T1<50;U1+10;U1/14*21);0;ЕСЛИ(T1<50;U1+10;U1/14*21)-P1)>0;T1>2;P1<U1*2));ОКРУГЛ(ЕСЛИ(P1>=ЕСЛИ(T1<50;U1+10;U1/14*21);0;ЕСЛИ(T1<50;U1+10;U1/14*21)-P1);-1)+10;ОКРУГЛ(ЕСЛИ(P1>=ЕСЛИ(T1<50;U1+10;U1/14*21);0;ЕСЛИ(T1<50;U1+10;U1/14*21)-P1);-1))"
            .Calculate
            .NumberFormat = "@"
            '.Value = .Value
        End With
         Range("AF1:AF2").ClearContents
         mySheet.Range("AD2").Copy mySheet.Range("AF2")
    End With
    
    Application.ScreenUpdating = True
    
    If MsgBox("Перенести значения в колонку заказ?", vbQuestion + vbYesNo, "Перенос") = vbNo Then Exit Sub

    Range("AD:AD") = Range("AF:AF").Value
 
    
End Sub
Изменено: eonka - 12.03.2024 05:40:12
VBA Макрос чтобы переносить значения из одной книги в другую
 
Добрый день,

На основании существующих у меня работающих макросов создаю новый. Для дальнейшего воплощения задуманного нужно чтобы этот код переносил из открываемого файла, допустим, в чистую книгу значения из колонки B. То есть я в чистой книге запускаю макрос, выбираю файл-источник kvi (прикрепляю пример) и из него данные столбца B должны скопироваться в чистую книгу.
Не могу найти свою ошибку в коде. Почему-то переносит только нижнюю ячейку, а нужно чтобы все значения из столбца B. Помогите, пожалуйста.
Код
Sub Престиж()

    Dim mySheet As Worksheet
    Dim myBook As Workbook
    Dim OpenFile As Variant
    Dim wbSource As Workbook
    Dim wsSourceSheetName As String
    Dim LastRow
    Dim A As Range
   
    
    Set myBook = ActiveWorkbook
    OpenFile = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", 1, "Выберите файл с престижными позициями", , False)
                    If VarType(OpenFile) = vbBoolean Then 'преждевременная остановка макроса
                Exit Sub
                    End If
    Application.ScreenUpdating = False
    
    Set wbSource = Workbooks.Open(OpenFile, UpdateLinks:=False, ReadOnly:=True)
    wsSourceSheetName = wbSource.ActiveSheet.Name
    sFilename = Mid$(OpenFile, InStrRev(OpenFile, Application.PathSeparator, -1, vbBinaryCompare) + 1)
    
 
         For Each A In wbSource.Worksheets(1).[A1].CurrentRegion.Columns(1).Cells
        i = 1
        A = A.Resize(1, 2)
            If A.Row >= 2 Then
        With myBook
                    With .Worksheets(1)
                        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
                            .Cells(LastRow, 4) = A(i, 2)
                    End With

        End With
            End If
        Next

    

End Sub
VBA Как сделать чтобы макрос активировал на каждом листе определенную ячейку
 
Добрый день,

Есть документ с огромным количеством листов.
Нужно чтобы при запуске макроса на каждом листе вносились данные (это получилось) и при этом чтобы активировалась (т.е. то что происходит когда мы курсором нажимаем на ячейку) одна и та же ячейка на каждом листе.
Код ниже. В нем через Cells или Range получается выделить ячейку только на первом листе. А если делать Sh.Cells или Sh.Range по типу заполняемых данными ячеек, то возникает ошибка.
Код
Sub Листы()
Dim Sh
For Each Sh In ActiveWorkbook.Worksheets
        Sh.Cells(1, 2) = "123"
        Sh.Cells(1, 4) = "321"
        Cells (4, 1).Select
        Next Sh

End Sub
Изменено: eonka - 25.09.2023 05:45:03
Макрос для ВПР из таблицы в таблицу с динамическим количеством строк
 
Добрый день,
Помогите допилить макрос, пожалуйста. Суть такая.
Есть таблица "Заказ", прикрепляю упрощенный пример. В реальности в ней большое и динамическое количество строк и оно растет.
Нужно чтобы макрос с помощью ВПР прикреплял в крайний столбец данные из таблицы "Кратности".
Мой макрос работает, но т.к. в первой таблице динамическое количество строк, то приходится корретировать рендж в третью строку снизу, чтобы макрос срабатывал на ограниченное количество строк, а не на весь лист, включая незаполненные строки. При этом даже с этим ограничением макрос подвисает.
Можно ли как-то оптимизировать эту задачу? Как задать конечную строку в динамической таблице, чтобы впр срабатывал до последней заполненной строки?

Дополнительный вопрос. Можно ли в строчку с формулой ВПР в название файла вписать как-то переменную, чтобы туда каждый раз подставлялось имя открываемого файла и при этом он не был всегда назван "Кратности1"?

Заранее благодарю.
Код
Sub Кратности1()
Dim LastRow&, OpenFile
OpenFile = Application.GetOpenFilename _
                ("Excel files(*.xls*),*.xls*", 1, "Выберите файл с кратностями", , False)
                    If VarType(OpenFile) = vbBoolean Then 'преждевременная остановка макроса
                Exit Sub
                    End If
Application.ScreenUpdating = False
    Cells(2, 4) = "Кратности"
     Range("D2").VerticalAlignment = xlCenter
     Range("D2").Font.Bold = True
    Columns("D:D").Select
    With Selection.Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent4
        .TintAndShade = 0.599993896298105
        .PatternTintAndShade = 0
    End With
Cells(3, 4).FormulaLocal = "=ВПР(B3;[Кратности1.xlsx]Лист2!$A$2:$B$1000;2;0)"
LastRow = Cells(Rows.Count, 4).End(xlUp).Row + 1
Range("D200900:D" & LastRow).FormulaR1C1 = Range("D3").FormulaR1C1
Application.ScreenUpdating = True
End Sub
При переносе данных оставить верхнюю строку пустой
 
Добрый день,
Не  могу понять, как заставить макрос вставлять данные в новой книге не в А1 ячейку, а в А2. Чтобы строка 1 оставалась полностью пустой. Подскажите, пожалуйста.
Если делаю Then Last Row = 2, то макрос поочередно перезаписывает все строки таблицы в строку 2. А если Last row = 1, то все ок, но мне нужно чтобы самая верхняя строка оставалась пустой.
Код
    Dim A, B, i%, Sample, LastRow&, DeskTopPath$
    Dim Cl As Range
    Set B = ActiveWorkbook
    Workbooks.Add
    Set Sample = Workbooks(Workbooks.Count)
    For Each Cl In B.Worksheets(1).[A11].CurrentRegion.Columns(1).Cells
        i = 1
        A = Cl.Resize(1, 31)
            If Cl.Row >= 12 Then
                If Not Cl.EntireRow.Hidden Then
        With Sample
            With .Worksheets("Лист1")
                        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
                        If IsEmpty(.[A1]) Then LastRow = 1
                            .Cells(LastRow, 1) = A(i, 3)
                            .Cells(LastRow, 2) = A(i, 5)
                            .Cells(LastRow, 3) = A(i, 31)
            End With
        End With
                End If
            End If
    Next

End Sub
Изменено: eonka - 02.12.2022 10:00:24
Квадратные скобки в коде - что это такое?
 
Добрый день,
Скопировала я чужой код со строкой.
Код
A = Workbooks("start.xlsx").Worksheets(1).[A1].CurrentRegion

И очень смущает меня это [А1]. Честно гуглила, но, видимо, запрос  я как-то неверно составляю, потому что ответ найти так и не удапось. Зато нашлось наставление никогда не использовать квадратные скобки в коде). Правда, без этого [А1] макрос почему-то ломается и не работает.
Разжуйте, пожалуйста, что же это такое.
Vba Перенос только видимых строк и столбцов
 
Добрый день,
Подскажите, в какое место правильно вставить SpecialCells(xlCellTypeVisible) чтобы макрос обрабатывал только видимые строки, игнорируя скрытые.
Вот маленький кусочек кода и источник и принимающий данные файлы. В исходнике скрыла столбцы.

Код
Sub Test()
    Dim A, Sh, i%, LastRow&
    A = Workbooks("start.xlsx").Worksheets(1).[A1].CurrentRegion
    For Each Sh In Workbooks("finish.xlsx").Worksheets
    Next Sh
    For i = 3 To UBound(A)
        A(i, 1) = Format$(0, A(i, 1))
        With Workbooks("finish.xlsx")
                If Not SheetExists(A(i, 1), Workbooks("finish.xlsx")) Then
                    With .Worksheets.Add(After:=.Worksheets(.Worksheets.Count)): .Name = A(i, 1):
                    End With
                End If
                With .Worksheets(A(i, 1))
                LastRow = .Cells(.Rows.Count, 1).SpecialCells(xlCellTypeVisible).End(xlUp).Row + 1                
                If IsEmpty(.[A1]) Then LastRow = 1
                        .Cells(LastRow, 1) = A(i, 2)
                        .Cells(LastRow, 2) = A(i, 3)
                        .Cells(LastRow, 3) = A(i, 4)
            End With
        End With
    Next i
  
End Sub
Function SheetExists(SheetName, Optional wb As Workbook) As Boolean
    If wb Is Nothing Then Set wb = ActiveWorkbook
    On Local Error Resume Next: SheetExists = wb.Worksheets(SheetName).Name = SheetName: Err.Clear
End Function

Изменено: eonka - 20.11.2022 08:38:24
Сохранение файла под прежним именем в другом месте в макросе
 
Добрый день,
Подскажите, есть ли возможность сохранения файла, выбранного с помощью Application.GetOpenFilename под тем же именем, но в другом месте? Можно это как то прописать в .SaveAs ?
У меня есть общая таблица, которую с помощью макроса я раскидываю по готовым шаблонам с определенными именами. Шаблоны лежат в папках и макрос GetOpenFilename позволяет выбирать нужные.
Я бы хотела чтобы макрос после заполнения шаблона сохранял его, допустим, на рабочий стол, но под тем же именем, под которым этот шаблон был изначально.
Макрос для переноса данных из одной таблицы в другую книгу
 
Добрый день,
Я не очень в vba, но потребовалось и собрала макрос для работы. Он даже работал (я его еще допиливаю до полного удобства) пока не добавила возможность выбирать файл вместо работы с забитым в макрос именем файла по умолчанию. Теперь какой-то mismatch.
Гуглила. Понимаю, что дело в типе данных, но не понимаю, что именно надо поправить.
Смысл в том, чтобы при запуске макроса данные из таблицы Start переносились в шаблон (имена шаблонов меняются, поэтому я добавила выбор файла). В данном примере файл Finish. Перенос данных осуществляется по правилу: первая колонка = имя листа, куда переносить. Остальные колонки переносятся на эти листы.
Строка Format$(0, A(i, 1)) имеет такой вид, потому что мне необходимо чтобы "0" в названии листов учитывался.
Помогите, пожалуйста, понять и исправить, чего от меня хочет этот UBound.
Код
Sub Magic()
    Dim A, Sh, i%, LastRow&, OpenFile
    A = ThisWorkbook.Worksheets(1).[A1].CurrentRegion
    'диалоговое окно для выбора файла'
    OpenFile = Application.GetOpenFilename _
                ("Excel files(*.xls*),*.xls*", 1, "Выбрать шаблон для заполнения", , False)
                    If VarType(OpenFile) = vbBoolean Then
        Exit Sub
         End If
         Workbooks.Open OpenFile
    For Each Sh In Workbooks(Workbooks.Count).Worksheets
    Next Sh
    For i = 1 To UBound(A)
        A(i, 1) = Format$(0, A(i, 1)) 'формат листа'
        With Workbooks(Workbooks.Count)
                With .Worksheets(A(i, 1))
                LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
                If IsEmpty(.[A1]) Then LastRow = 1
                .Cells(LastRow, 1) = A(i, 2)
                .Cells(LastRow, 2) = A(i, 3)
                .Cells(LastRow, 3) = A(i, 4)
                End With
        End With
    Next i
End Sub
Function SheetExists(SheetName, Optional wb As Workbook) As Boolean
    If wb Is Nothing Then Set wb = ActiveWorkbook
    On Local Error Resume Next: SheetExists = wb.Worksheets(SheetName).Name = SheetName: Err.Clear
End Function
Изменено: eonka - 18.11.2022 08:04:27
Страницы: 1
Наверх