В макросе содержится формула. Нужно чтобы из колонки с формулой 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
На основании существующих у меня работающих макросов создаю новый. Для дальнейшего воплощения задуманного нужно чтобы этот код переносил из открываемого файла, допустим, в чистую книгу значения из колонки 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
Есть документ с огромным количеством листов. Нужно чтобы при запуске макроса на каждом листе вносились данные (это получилось) и при этом чтобы активировалась (т.е. то что происходит когда мы курсором нажимаем на ячейку) одна и та же ячейка на каждом листе. Код ниже. В нем через 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
Добрый день, Помогите допилить макрос, пожалуйста. Суть такая. Есть таблица "Заказ", прикрепляю упрощенный пример. В реальности в ней большое и динамическое количество строк и оно растет. Нужно чтобы макрос с помощью ВПР прикреплял в крайний столбец данные из таблицы "Кратности". Мой макрос работает, но т.к. в первой таблице динамическое количество строк, то приходится корретировать рендж в третью строку снизу, чтобы макрос срабатывал на ограниченное количество строк, а не на весь лист, включая незаполненные строки. При этом даже с этим ограничением макрос подвисает. Можно ли как-то оптимизировать эту задачу? Как задать конечную строку в динамической таблице, чтобы впр срабатывал до последней заполненной строки?
Дополнительный вопрос. Можно ли в строчку с формулой ВПР в название файла вписать как-то переменную, чтобы туда каждый раз подставлялось имя открываемого файла и при этом он не был всегда назван "Кратности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
A = Workbooks("start.xlsx").Worksheets(1).[A1].CurrentRegion
И очень смущает меня это [А1]. Честно гуглила, но, видимо, запрос я как-то неверно составляю, потому что ответ найти так и не удапось. Зато нашлось наставление никогда не использовать квадратные скобки в коде). Правда, без этого [А1] макрос почему-то ломается и не работает. Разжуйте, пожалуйста, что же это такое.
Добрый день, Подскажите, в какое место правильно вставить 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
Добрый день, Подскажите, есть ли возможность сохранения файла, выбранного с помощью 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