Здравствуйте Уважаемые формучане. Задача была определить область копирования и скопировать. С чем не справляется построенный код.
Скрытый текст
Код
Sub CopyDataFromAnotherWorkbook()
Dim sourceWorkbook As Workbook
Dim sourceWorksheet As Worksheet
Dim targetWorksheet As Worksheet
Dim filePath As String
Dim targetRange As Range
Dim newSheetName As String
Dim copySheetName As String
Dim destinationWorksheet As Worksheet
Dim newSheetForData As Worksheet
Dim wsList1 As Worksheet
Dim searchRange As Range
Dim cell As Range
Dim columnsToCopy As String
Dim col As Range
Dim filteredRange As Range
Dim newSheetNameForData As String
' Очищаем данные в 1, 2 и 3 колонках начиная с 3 строки до 999 строки
With ThisWorkbook.Sheets("Лист1")
.Range("J2").ClearContents
.Range("A3:A999").ClearContents
.Range("B3:B999").ClearContents
.Range("C3:C999").ClearContents
End With
' Открываем диалоговое окно для выбора файла
filePath = Application.GetOpenFilename("Excel Files (*.xls; *.xlsx), *.xls; *.xlsx", , "Выберите файл для копирования данных")
' Проверка, что файл был выбран
If filePath <> "False" Then
' Открываем исходную книгу
Set sourceWorkbook = Workbooks.Open(filePath)
' Предполагаем, что данные на первом листе (можно изменить, если нужно)
Set sourceWorksheet = sourceWorkbook.Sheets(1)
' Имя нового листа для копирования данных
newSheetName = "Копированные данные"
' Если лист с таким именем существует, удаляем его
On Error Resume Next
Application.DisplayAlerts = False
ThisWorkbook.Sheets(newSheetName).Delete
Application.DisplayAlerts = True
On Error GoTo 0
' Создаем новый лист для копирования данных
Set targetWorksheet = ThisWorkbook.Sheets.Add
targetWorksheet.Name = newSheetName
' Определяем диапазон для копирования
Set targetRange = sourceWorksheet.UsedRange
' Копируем только значения
targetWorksheet.Range("A1").Resize(targetRange.Rows.Count, targetRange.Columns.Count).Value = targetRange.Value
' Закрываем исходную книгу без сохранения
sourceWorkbook.Close SaveChanges:=False
' Ищем текст "Всего наименований" в листе
Set searchRange = targetWorksheet.UsedRange
For Each cell In searchRange
If InStr(cell.Value, "Всего наименований") > 0 Then
' Копируем значение найденной ячейки в Лист1 J2
ThisWorkbook.Sheets("Лист1").Range("J2").Value = cell.Value
' Определяем столбцы для копирования
If InStr(cell.Value, "CNY") > 0 Then
columnsToCopy = "D:D,AB:AB,AK:AK"
Else
columnsToCopy = "C:C,AA:AA,AJ:AJ"
End If
Exit For
End If
Next cell
' Имя нового листа для скопированных колонок
copySheetName = "Копия данных"
' Если лист с таким именем существует, удаляем его
On Error Resume Next
Application.DisplayAlerts = False
ThisWorkbook.Sheets(copySheetName).Delete
Application.DisplayAlerts = True
On Error GoTo 0
' Создаем новый лист для скопированных колонок
Set destinationWorksheet = ThisWorkbook.Sheets.Add
destinationWorksheet.Name = copySheetName
' Копируем выбранные колонки на новый лист
targetWorksheet.Range(columnsToCopy).Copy
destinationWorksheet.Range("A1").PasteSpecial Paste:=xlPasteValues
' Добавляем 0 в 4-ю колонку с 1 по 999 строку
destinationWorksheet.Range("D1:D999").Value = 0
' Очищаем ячейки со значением "Количество" во второй колонке
Set col = destinationWorksheet.Range("B1:B999") ' Вторая колонка
For Each cell In col
If cell.Value = "Количество" Then
cell.ClearContents
End If
Next cell
' Применяем фильтр
With destinationWorksheet
.Range("$A$1:$D$999").AutoFilter Field:=2, Criteria1:="<>", Operator:=xlAnd, Criteria2:="<>"
End With
' Создаем новый лист для вставки данных
newSheetNameForData = "Отфильтрованные данные"
' Если лист с таким именем существует, удаляем его
On Error Resume Next
Application.DisplayAlerts = False
ThisWorkbook.Sheets(newSheetNameForData).Delete
Application.DisplayAlerts = True
On Error GoTo 0
' Создаем новый лист для скопированных данных
Set newSheetForData = ThisWorkbook.Sheets.Add
newSheetForData.Name = newSheetNameForData
' Определяем отфильтрованный диапазон
On Error Resume Next
Set filteredRange = destinationWorksheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Not filteredRange Is Nothing Then
filteredRange.Copy newSheetForData.Range("A1")
End If
' Сортируем данные по первому столбцу в алфавитном порядке
With newSheetForData
.UsedRange.Sort Key1:=.Columns(1), Order1:=xlAscending, Header:=xlNo
End With
' Удаляем только четвертый столбец
newSheetForData.Columns(4).Delete
' Копируем данные на Лист1
Set wsList1 = ThisWorkbook.Sheets("Лист1")
newSheetForData.UsedRange.Copy wsList1.Range("A3")
' Найти последнюю заполненную ячейку в столбцах B и C
Dim lastRowB As Long
Dim lastRowC As Long
lastRowB = wsList1.Cells(wsList1.Rows.Count, 2).End(xlUp).row
lastRowC = wsList1.Cells(wsList1.Rows.Count, 3).End(xlUp).row
' Рассчитываем суммы в столбцах B и C
Dim sumB As Double
Dim sumC As Double
sumB = Application.WorksheetFunction.Sum(wsList1.Range("B3:B" & lastRowB))
sumC = Application.WorksheetFunction.Sum(wsList1.Range("C3:C" & lastRowC))
' Проверяем значение в ячейке J2
Dim currencyType As String
Dim conversionRate As Double
currencyType = wsList1.Range("J2").Value
' Если значение в J2 содержит "CNY", умножаем сумму на значение в J3
If InStr(1, currencyType, "CNY", vbTextCompare) > 0 Then
conversionRate = wsList1.Range("J3").Value
sumC = sumC * conversionRate
End If
' Вставляем сумму в первую пустую ячейку под данными в столбцах B и C
wsList1.Cells(lastRowB + 1, 2).Value = sumB
wsList1.Cells(lastRowC + 1, 3).Value = sumC
' Удаляем листы "Копия данных", "Копированные данные" и "Отфильтрованные данные"
On Error Resume Next
Application.DisplayAlerts = False
ThisWorkbook.Sheets(copySheetName).Delete
ThisWorkbook.Sheets(newSheetName).Delete
ThisWorkbook.Sheets(newSheetNameForData).Delete
Application.DisplayAlerts = True
On Error GoTo 0
Application.CutCopyMode = False
MsgBox "Данные из файла 1С успешно скопированы", vbInformation
Else
MsgBox "Файл не был выбран.", vbExclamation
End If
End Sub
Счетами 734 и 1081 он справлялся но оказалось и области копирования могут быть разными.
Подскажите как переиграть что бы можно было копировать нужные данные независимо от расположения значений
Добрый вечер знатоки VBA. На просторах интернета нашел макрос отправляющий активный файл по мэйл. Без участия Outlook. правда до конца не понял от куда он будет отправлять. Хотелось бы разобраться и отправлять письмо с переименованием имени файла. а конкретнее. каждый файл в начале содержит символ "rs-" от чего хотелось бы отказаться
Все было хорошо с функцией если когда было всего два аргумента. Но тут понадобилось добавить еще 1 или 2 аргумента. Но как известно Если работает только с двумя аргументами. Но найденная функция IFS в примере выражалась только равенствами на больше или меньше с числами. И почему то при вводе в свои ячейки выводиться ошибка синтаксиса.
Код
=IFS(F2="YandexMarket","https://yandex.ru/maps/-/CCUufZQApC", F2="OZON","https://yandex.ru/maps/-/CCUubUFShD", F2="AliExpress","https://yandex.ru/maps/-/CCUurWB6DA", F2="Wildberries","Еще не задана точка")
Доброго времени суток уважаемые знатоки VBA. Имеется код собранный из разных книг. Проблема: не запускается, выдает ошибку. прошу помочь разобраться в чем дело. Прикрепил и сам файл на всякий случай.
Код
Sub file_open()
'fasting settings
Application.Calculation = xlManual
Application.ScreenUpdating = False
Dim wb_base_name As String, rinok_nash_order_column As Integer, ordernum As String, ws_base_name As String, wb_order_name As String, ws_order_name As String, wb As Workbook, ws As Worksheet, model(9999) As String, color(9999) As String, quantity(9999) As Integer, position(9999) As Integer, skin(9999) As Integer, skinrow(9999) As Integer, modwcolor As String, numrow As Integer, cur_sym_pos As Integer, order_column As Integer, filename As String, lrib As Integer
'open file dialog window
ChDir ThisWorkbook.Path & "\"
impfilename = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", 2, "Выбрать текстовые или Excel файлы", , False)
If impfilename = "False" Then Exit Sub
wb_base_name = ActiveWorkbook.Name
ws_base_name = ActiveWorkbook.ActiveSheet.Name
Set wb = Application.Workbooks.Open(impfilename)
filename = wb.Name
wb_order_name = wb.Name
For Each ws In wb.Worksheets
ws_order_name = ws.Name
'from managers
'detect columns nums
Dim col_num_nazv, col_num_model, col_num_kol, col_num_last As Integer
For q = 1 To 99
If Right(ws.Cells(1, q), 6) = "Модель" Then col_num_model = q
If Right(ws.Cells(1, q), 10) = "Количество" Then col_num_kol = q
If ws.Cells(1, q) <> "" Then col_num_last = q
Next q
If col_num_nazv <> "" And col_num_model <> "" Then
from_manager = True
For i = 1 To Len(wb.Name)
If IsNumeric(Mid(wb.Name, i, 1)) Then ordernum = ordernum + Mid(wb.Name, i, 1)
If Mid(wb.Name, i, 1) = " " And Len(ordernum) > 0 Then Exit For
Next i
filename = "№" + ordernum + "-"
'reading order
For numrow = 2 To 9999
If ws.Cells(numrow, col_num_model) = "" Then Exit For
If Len(ws.Cells(numrow, col_num_model)) = 1 Then model(numrow - 1) = "0000" + CStr(ws.Cells(numrow, col_num_model))
If Len(ws.Cells(numrow, col_num_model)) = 2 Then model(numrow - 1) = "000" + CStr(ws.Cells(numrow, col_num_model))
If Len(ws.Cells(numrow, col_num_model)) = 3 Then model(numrow - 1) = "00" + CStr(ws.Cells(numrow, col_num_model))
If Len(ws.Cells(numrow, col_num_model)) = 4 Then model(numrow - 1) = "0" + CStr(ws.Cells(numrow, col_num_model))
If Len(ws.Cells(numrow, col_num_model)) = 5 Or Len(ws.Cells(numrow, 2)) = 7 Then model(numrow - 1) = ws.Cells(numrow, col_num_model)
quantity(numrow - 1) = Int(ws.Cells(numrow, col_num_kol))
modwcolor = ws.Cells(numrow, col_num_nazv)
If Left(ws.Cells(1, col_num_nazv), 1) <> "*" And Left(ws.Cells(1, col_num_nazv), 2) <> "ш-" Then skin(numrow - 1) = 0
If Left(ws.Cells(1, col_num_nazv), 1) = "*" Then skin(numrow - 1) = 1
If Left(ws.Cells(1, col_num_nazv), 2) = "ш-" Then skin(numrow - 1) = 2
'selecting color from modwcolor
For cur_sym_pos = Len(modwcolor) - 1 To 1 Step -1
If IsNumeric(Mid(modwcolor, cur_sym_pos, 1)) Or Mid(modwcolor, cur_sym_pos, 1) = "-" Then
color(numrow - 1) = Right(modwcolor, Len(modwcolor) - cur_sym_pos)
Exit For
End If
Next cur_sym_pos
color(numrow - 1) = UCase(Replace(color(numrow - 1), " ", ""))
Next numrow
numrow = numrow - 2
lrib = last_row_in_base(wb_base_name, ws_base_name)
order_column = new_order(wb_base_name, ws_base_name, filename, lrib)
filename = filename + CStr(find_containers(model, color, quantity, position, skin, skinrow, numrow, wb_base_name, ws_base_name, lrib, order_column, wb_order_name, ws_order_name, "manager", rinok_nash_order_column)) + "шт-Резерв-" + InputBox("Введите инициалы менеджера", "Запрос")
numrow = numrow + 1
Workbooks(wb_order_name).Activate
Worksheets(ws_order_name).Activate
ws.Range(Cells(1, col_num_last + 1).Address, Cells(numrow, col_num_last + 1).Address).Copy ws.Cells(1, 30)
ws.Cells(1, 30) = "Не отгружено"
ws.Range(Cells(1, col_num_nazv).Address, Cells(numrow, col_num_nazv).Address).Copy ws.Cells(1, 27)
ws.Range(Cells(1, col_num_kol).Address, Cells(numrow, col_num_kol).Address).Copy ws.Cells(1, 28)
ws.Range(Cells(1, col_num_last).Address, Cells(numrow, col_num_last).Address).Copy ws.Cells(1, 29)
ws.Cells(1, 29) = "Отгружено"
ws.Range("AA1:AA" + CStr(numrow) + ",AB1:AB" + CStr(numrow) + ",AC1:AC" + CStr(numrow) + ",AD1:AD" + CStr(numrow)).Copy
'ws.Range("AA1:AA99999,AB1:AB99999,AC1:AC99999,AD1:AD99999").Copy
Workbooks.Add
ActiveSheet.Paste Destination:=Range("A1")
Application.DisplayAlerts = False
Rows("1:1000").RowHeight = 15
Columns("A:H").AutoFit
'Cells(numrow + 1, 3) = "=СУММ(C2:C" + CStr(numrow) + ")"
Cells(numrow + 1, 4) = Application.WorksheetFunction.Sum(Columns("D:D"))
Cells(numrow + 1, 3) = Application.WorksheetFunction.Sum(Columns("C:C"))
'Cells(numrow + 1, 2) = "=СУММ(B2:B" + CStr(numrow) + ")"
Cells(numrow + 1, 2) = Application.WorksheetFunction.Sum(Columns("B:B"))
ActiveWorkbook.SaveAs _
filename:=".\отправка\" + filename + ".xlsx"
ActiveWorkbook.Close
Application.DisplayAlerts = True
Workbooks(wb_base_name).Activate
Worksheets(ws_base_name).Activate
Cells(1, order_column) = filename
Workbooks(wb_order_name).Activate
Worksheets(ws_order_name).Activate
GoTo labelexit
End If
wb.Close (0)
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub
Function last_row_in_base(wb_base_name As String, ws_base_name As String) As Integer
Workbooks(wb_base_name).Activate
Worksheets(ws_base_name).Activate
'find last row
For i = 9999 To 1 Step -1
If Cells(i, 16) <> "" Then last_row_in_base = i: Exit For
Next i
End Function
Function new_order(wb_base_name As String, ws_base_name As String, filename As String, lrib As Integer) As Integer
Workbooks(wb_base_name).Activate
Worksheets(ws_base_name).Activate
'find last column
For i = 28 To 9999
If Cells(2, i) <> "" And Cells(3, i) <> "" And Cells(4, i) <> "" And Cells(5, i) <> "" Then new_order = i + 1
Next i
'copy previous columns to new order
Cells(2, new_order) = Format(Date, "dd\/mm")
Cells(2, new_order + 1) = Format(Date, "mm\/dd")
Cells(2, new_order + 2) = Format(Date, "dd\/mm")
Cells(2, new_order + 3) = Format(Date, "mm\/dd")
Cells(1, new_order).Interior.color = 65535
Cells(2, new_order).Interior.color = 65535
Cells(1, new_order + 2).Interior.color = 65535
Cells(2, new_order + 2).Interior.color = 65535
For i = 3 To lrib
Cells(i, new_order).Interior.color = 65535
Cells(i, new_order + 1) = "=RC[-2]-RC[-1]"
Cells(i, new_order + 2).Interior.color = 65535
Cells(i, new_order + 3) = "=RC[-2]-RC[-1]"
Next i
End Function
Function find_containers(model() As String, color() As String, quantity() As Integer, position() As Integer, skin() As Integer, skinrow() As Integer, numrow As Integer, wb_base_name As String, ws_base_name As String, lrib As Integer, order_column As Integer, wb_order_name As String, ws_order_name As String, order_type As String, rinok_nash_order_column As Integer) As Integer
Dim text As String, all_cont_sum As Integer
Workbooks(wb_base_name).Activate
Worksheets(ws_base_name).Activate
Dim containers(99, 2) As Integer
Dim cont_num As Integer, quantity_sum As Integer, balance As Integer, container_found As Boolean, skirow_found As Boolean, skincolumnplus As Integer
For i = 1 To numrow
Erase containers
container_found = False
skinrow_found = False
cont_num = 0
quantity_sum = 0
skincolumnplus = 0
balance = 0
'run across all containers
For baserow = 1 To lrib
'calculate skincolumnplus
If skin(i) = 1 Or (order_type = "manager" And skinrow_found = True And skin(i) <> 2) Then skincolumnplus = 2
'sorting containers massive
Dim tmp As Integer, tmp2 As Integer
For isrt = 1 To cont_num - 1
For jsrt = 1 To cont_num - isrt
If containers(jsrt, 2) > containers(jsrt + 1, 2) Then
tmp = containers(jsrt, 1)
tmp2 = containers(jsrt, 2)
containers(jsrt, 1) = containers(jsrt + 1, 1)
containers(jsrt, 2) = containers(jsrt + 1, 2)
containers(jsrt + 1, 1) = tmp
containers(jsrt + 1, 2) = tmp2
End If
Next jsrt
Next isrt
'if skinrow not found, writing to the order and going to next orderrow
If skin(i) <> 0 And skinrow_found = False Then
Workbooks(wb_order_name).Activate
Worksheets(ws_order_name).Activate
If order_type = "manager" Then
If Cells(1, 6) = "Количество" Then
Cells(i + 1, 8) = Cells(i + 1, 8) + 0
Cells(i + 1, 8).Interior.color = 255
Cells(i + 1, 9) = Cells(i + 1, 9) + quantity(i)
Cells(i + 1, 9).Interior.color = 255
Else
Cells(i + 1, 9) = Cells(i + 1, 9) + 0
Cells(i + 1, 9).Interior.color = 255
Cells(i + 1, 10) = Cells(i + 1, 10) + quantity(i)
Cells(i + 1, 10).Interior.color = 255
End If
Workbooks(wb_base_name).Activate
Worksheets(ws_base_name).Activate
GoTo nexi
End If
'if all container quantity is enought
If quantity_sum >= quantity(i) Then
'search postion in one container
For isrt = 1 To cont_num
If containers(isrt, 2) >= quantity(i) Then
'write to container to order in base
Cells(containers(isrt, 1), order_column + skincolumnplus) = Cells(containers(isrt, 1), order_column + skincolumnplus) + quantity(i)
'write data to skinrow
If (skin(i) = 1 And skinrow_found = True) Or (order_type = "manager" And skinrow_found = True And skin(i) <> 2) Then
Cells(skinrow(i), order_column) = Cells(skinrow(i), order_column) + quantity(i)
Cells(skinrow(i), order_column + 2) = Cells(skinrow(i), order_column + 2) - quantity(i)
End If
container_found = True
Exit For
End If
Next isrt
If quantity_sum = 0 Then
'write zero to base
If containers(0, 1) > 0 Then If Cells(containers(0, 1), order_column + skincolumnplus) = "" Then Cells(containers(0, 1), order_column + skincolumnplus) = 0
If (skin(i) = 1 And skinrow_found = True) Or (order_type = "manager" And skinrow_found = True And skin(i) <> 2) Then
Cells(skinrow(i), order_column) = Cells(skinrow(i), order_column) + 0
Cells(skinrow(i), order_column + 2) = Cells(skinrow(i), order_column + 2) - 0
End If
nexi:
Next i
find_containers = all_cont_sum
End Function
Sub file_import()
file_open
End Sub
Добрый вечер знатоки VBA. Мне бы для начала понимание осуществимо ли это и с чего начинать копать. к примеру заказы поступают в формате .jpg, пример прикрепил.
Нужно спарсить или предложите другой выход... изъять и превратить ее в нормальную таблицу. Что бы нормально начать с ней работать.
Посоветуйте что делать пожалуйста Может мой же код, где то образует мину?)) так как после сохранения если открыть файл и очистить в ручную образовавшийся пустые ссылки на ячейки, в колонке 9. размер файла значительно уменьшается.
но при попытке осуществить это с помощью макросов(ниже приведенной)
Добрый вечер уважаемые знатоки. Имеется код который сохраняет отдельно книгу совсеми макросами.
но дело в том что сама книга была настроена на автозапуск. который уже мешает при открытии уже сохраненных файлов. как возможно удалить или отключить данный макрос до сохранения отдельным файлом. так как другие модули нужны.
в просторах нашел код который удаляет определенный модуль. но у меня макрос сохранен в книге(не как определенный модуль, скрин с примером прикрепил).
который выделяет ниже 3-1 строки после фильтра значения на 7-ми колонках. Все бы хорошо. но если при фильтре там не оказывается ничего то код лезет выше 3 строки. чего бы не хотелось.
пример на прикрепленном фото. Какое решение можете предложить?
Добрый вечер Уважаемые знатоки. имеется набросок кода, которы копирует колонки заданные если они открыты(не скрыте).
Код
Dim KH As String
Dim aa As Integer
aa = ActiveCell.Column
Cells(1, aa).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.color = 16738047
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Application.Union(Range("R:R,P:P,N:N,M:M,I:I"), ActiveCell.EntireColumn, ActiveCell.Offset(0, 1).Range("B:B")).Select
Selection.Copy
Workbooks.Open filename:=ThisWorkbook.Path & "\Z-DingDan"
Но хотелось бы не раскладывать рабочую область на весь стол. Как сделать так что бы заданные колонки копировались если даже они скрыты.
Была книга 10006-pechat-tovarnykh-chekov-3 в которой работал.
но тут увидел книгу(Список_вопрос.xlsm) с очень удобной функцией подбора названий товаров. Самому слить скрипты не получилось. да и удалить функцию подбора в старой не удалось.
Доброго времени суок мастаки VBA, буду рад помощи. Есть парсер которого нашел на просторах интернета, который загружает с базы фотографии. только он просит во вторую колонку ввести имя для новых фотографий. Нужно сделать так, что бы парсер скачал именно с существующими именами.
P.S уже запутался в мире программирования по чуть чуть познавая наверно, колонку с renam ом не нашел что бы удалить)
Доброго времени суток знатоки! В поисковике встретил макрос
Код
Sub CombineWorkbooks()
Dim FilesToOpen
Dim x As Integer
Application.ScreenUpdating = False 'отключаем обновление экрана для скорости
'вызываем диалог выбора файлов для импорта
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="All files (*.*), *.*", _
MultiSelect:=True, Title:="Files to Merge")
If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "Не выбрано ни одного файла!"
Exit Sub
End If
'проходим по всем выбранным файлам
x = 1
While x <= UBound(FilesToOpen)
Set importWB = Workbooks.Open(Filename:=FilesToOpen(x))
Sheets().Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
importWB.Close savechanges:=False
x = x + 1
Wend
Application.ScreenUpdating = True
End Sub
Который копирует целый лист и объединяе в одну, только по разным листам.
Как сделать так что бы он мог копировать таблицы с выделенных книг. один за другим, только делая 2строки отступа?
Доброго времени суток знатоки VBA. Работая каждый день с этой базой, наконец решил облегчить себе учесть. Со ценами не знаком. Подскажите на сколько это сложно и во сколько мне это обойдется. Прикрепил 2 файла. один файл заказа, там примером написал разнообразие возможных перечислений в заказе. второй пример базы. где при подобном заказе пример выполнения как все должно заполнятся.
Доброго времени суток гуру Планеты Exel. Пришла очередная пора обратится к вам за советами.
Есть рутинная работа по базе где требуется по мимо поисков артикулов вводить дополнительные значения в колонке. Можно ли частично автоматизировать это?
Пример прикрепил:
В примере: Есть колонка с артикулами где при вводе именно на против строки с оранжевой заливкой в колонке "A", в колонке "B" должно обратно ставится отрицательное значение(которую можно решить лишь сравнением в отрицательно значение). что бы остаток не менялся. И само вычитаться с положительных остатков выше. но с условием что в колонке атрибут не будет значения "НЕТ". (Это комбинация при заказе к примеру готовой игрушки).
Но бывают и заказы самих шкур. когда мне приходится просто вычитать со строк артикулов без заливки. с колонки "A".
Как можно автоматизировать к примеру поиск положительного значения с остатка и внесение значение в колонку "B" По сути я бы хотел активную колонку "B". что бы при вводе на против строки с заливкой, колонки автоматически вычиталось как в примере. но при вводе на против строки без заливки ничего не менялось.
Доброго времени суток! Ребят. Сталкивался я с удалением строк или колонок.Подскажите пожалуйста. Как зачистить в 3 колонке текстовые значения? Что бы просто можно было в конце числовых значений сумму поставить. пример прикреплю для наглядности.
Строку удалять не надо. Потому что в первой колонке может содержатся важная информация.
Я понимаю данный вопрос многого стоит. Но хотя бы для понимания и личного обучения... Подскажите пожалуйста от чего отталкиваться и куда смотреть в данной ситуации. Если, файл А(База) и Файл Б(шаблон). Возможно ли с Файла Б по списку заказа запустив макрос, заполнить напротив найденных Артикулов на Файле А. И при этом вернуть полученные значения(учтенные) значения вернуть обратно в колонку отсутствует в фалй Б? пример во вложении. Мне бы подсказать в какие темы глядеть и как быть. В платный раздел все таки не хочется. так как это мне самому нужно. Нужно и учится.
Доброго времени суток ребята. Есть макрос в котором каждый раз при перемещении, нужно менять путь в самом коде. Но видел у Китайцев просто архивы передающие. с которых расспаковав можно работать полноценно. То есть пути сохранения прописывать не надо. оно просто сохраняет в найденную рядом папку с определенным названием. Помогите где тут что добавить. что бы так же работал этот макрос
Код
Sub
Application.DisplayAlerts = False
ChDir "C:\Users\Bimkod_4\Desktop\мой проект\мой проект 2\Отгрузки"
ActiveSheet.Copy
ActiveWorkbook.SaveAs [A2] & ".xlsx" _
, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
End Sub
Доброго времени суток! Уважаемые форумчане. С тех самых пор, как я заинтересовался макросами в первый раз. Этот сайт, в Вашем лице, стал для меня на подобие наставником и ГУРУ. С той поры я дописал наконец составление накладного для склада. Хотелось бы еще раз скинуть Вам для доработки и наставничества, если заметите критические ошибки в коде. но сам код вроде работает. может что: заменить лучше, может каким то макросом вообще лучше не пользоваться. Подскажите пожалуйста. Вот и целый код:
Код
Private Sub Workbook_Open()
ActiveSheet.Paste
Rows("2:2").Select
Application.CutCopyMode = False
Selection.AutoFilter
ActiveSheet.Range("$A$2:$E$10000").AutoFilter Field:=5, Criteria1:="<>"
' Макрос выделения с адресами до последней заполненной ячейки
ActiveCell.CurrentRegion.Select
Selection.Copy
Sheets("Лист3").Select
ActiveSheet.Paste
'удаление пустых и нулевых значений в колонке 5
For i = [a1000000].End(xlUp).Row To 3 Step -1
If CInt(Cells(i, 5)) = 0 Then Rows(i).EntireRow.Delete
Next i
Rows("2:2").Select
'фильтр по цвету
Selection.AutoFilter
ActiveSheet.Range("$A$2:$F$5000").AutoFilter Field:=3, Criteria1:=RGB(230, _
184, 183), Operator:=xlFilterCellColor
Range("A2", Cells(Rows.Count, 6).End(xlUp)).Select
Selection.Copy
Sheets("Лист2").Select
ActiveSheet.Paste
Rows("5:5").Select
Application.CutCopyMode = False
Selection.AutoFilter
ActiveWorkbook.Worksheets("Лист2").AutoFilter.Sort.SortFields.Clear
'сортировака по возрастанию
ActiveWorkbook.Worksheets("Лист2").AutoFilter.Sort.SortFields.Add Key:=Range( _
"A5"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Лист2").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Selection.Delete Shift:=xlUp
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
'Шаг 3: Выбираем следующую строку вниз
Cells(LastRow, 2).Offset(1, 0).Select
'пишим нужный текст
ActiveCell.FormulaR1C1 = "Не набивные и шкуры"
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
Cells(LastRow, 5).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = "0"
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
Cells(LastRow, 1).Offset(2, 0).Select
Sheets("Лист3").Select
Rows("2:2").Select
Selection.AutoFilter
Selection.AutoFilter
ActiveSheet.Range("$A$2:$F$41").AutoFilter Field:=3, Operator:= _
xlFilterNoFill
'удаляем значения с 6-й колонки
Columns("F:F").Select
Selection.ClearContents
'выделяем активную область
ActiveCell.CurrentRegion.Select
Selection.Copy
Sheets("Лист2").Select
ActiveSheet.Paste
ActiveCell.Rows("1:2").EntireRow.Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
'сортируем не набивные артикула
ActiveCell.Offset(-1, 0).Rows("1:1").EntireRow.Select
Selection.AutoFilter
ActiveWorkbook.Worksheets("Лист2").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Лист2").AutoFilter.Sort.SortFields.Add Key:= _
ActiveCell.Offset(-1, 0).Range("A1"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Лист2").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'находим конец колонки 5, и суммируем не смотря на пропуски
iLastRow = Cells(Rows.Count, "B").End(xlUp).Row
Cells(iLastRow + 1, 5) = WorksheetFunction.Sum(Range("E5:E" & iLastRow))
ActiveCell.CurrentRegion.Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
'обводим таблицой
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
'копируем название накладной
Worksheets("Лист1").Range("E1").Copy Worksheets("Лист2").Range("A2:F2")
'сохраняем результат
Application.DisplayAlerts = False
ChDir "C:\Users\Bimkod_4\Desktop\мой проект\мой проект 2\Отгрузки"
ActiveSheet.Copy
ActiveWorkbook.SaveAs [A2] & ".xlsx" _
, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
ActiveWindow.Close False
End Sub
Ребята приветствую всех. Имеется такой макрос))) который никак не поддается. Нужно что бы он сохранял лист без макросов. может я что то не то делаю? и что бы только один лист Лист 2 а то этот всю книгу пересохраняет
Доброго времени суток! Знатоки Макросов. Выручите пожалуйста. нужен макрос который смог бы суммировать значения выше Есть динамичная колонка которая не смотря на обе варианта составленной накладной, должна внизу в красном прямоугольнике прописать сумму обе накладные во вложении.
Приветствую Вас боги Макросов. Есть таблица с которой нужно по условию если в колонке 5 ниже есть 0 или ячейка пустая, надо эту строку полностью удалить. со сдвигом вверх. Не скрыть. Прошу понять. Пролистываю Планету уже 2-й день. макросы описанные. что то не подходят. (не работают).