Копирование определенных строк vb в другие строки

Доброе утро,

Еще один очень интересный вопрос. Я снова посмотрел и, возможно, неверно истолковал то, что читаю.

На прошлой неделе я писал, что у меня есть проблемы с сопоставлением документа XLSX с документом CSV. Короче говоря, мы делаем форму заказа для идиотов в одном удобном для пользователя формате, который преобразуется в требуемый системой формат, когда они нажимают кнопку.

Пока мой код работает нормально -

Sub ButtonMacroLatest()
'Hide alerts
application.displayalerts = False
'
' Macro8 Macro
'

'Save to users device
    ChDir "U:\WINDOWS"
    ActiveWorkbook.SaveAs Filename:="U:\WINDOWS\OrderForm.xlsx", FileFormat:= _
        xlOpenXMLWorkbook, CreateBackup:=False

'Create new workbook and populate
    Workbooks.Add
    ActiveCell.FormulaR1C1 = "MSG"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "=[OrderForm.xlsx]Order!R[1]C"
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "=[OrderForm.xlsx]Order!R[1]C[3]"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "1400008000"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "501346009175"
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "=TODAY()"
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "=Now()"
    Selection.NumberFormat = "[$-x-systime]h:mm:ss AM/PM"
    Range("I1").Select
    ActiveCell.FormulaR1C1 = "HDR"
    Range("J1").Select
    ActiveCell.FormulaR1C1 = "C"
    Range("K1").Select
    ActiveCell.FormulaR1C1 = "1400011281"
    Range("O1").Select
    ActiveCell.FormulaR1C1 = "=[OrderForm.xlsx]Order!R[1]C[3]"
    Range("P1").Select
    ActiveCell.FormulaR1C1 = "=[OrderForm.xlsx]Order!R2C4"
    Range("S1").Select
    ActiveCell.FormulaR1C1 = "STD"
    Range("T1").Select
    ActiveCell.FormulaR1C1 = "=[OrderForm.xlsx]Order!R5C2"
    Range("V1").Select
    ActiveCell.FormulaR1C1 = "=[OrderForm.xlsx]Order!R7C2"
    Range("W1").Select
    ActiveCell.FormulaR1C1 = "=[OrderForm.xlsx]Order!R8C2"
    Range("Y1").Select
    ActiveCell.FormulaR1C1 = "=[OrderForm.xlsx]Order!R9C2"
    Range("Z1").Select
    ActiveCell.FormulaR1C1 = "=[OrderForm.xlsx]Order!R12C2"
    Range("AB1").Select
    ActiveCell.FormulaR1C1 = "POS"
    Range("AE1").Select
    ActiveCell.FormulaR1C1 = "=Row()*10"
    Range("AF1").Select
    ActiveCell.FormulaR1C1 = "=[OrderForm.xlsx]Order!R15C3"
    Range("AG1").Select
    ActiveCell.FormulaR1C1 = "=[OrderForm.xlsx]Order!R15C1"
    Range("AH1").Select
    ActiveCell.FormulaR1C1 = "=[OrderForm.xlsx]Order!R15C2"
    Range("AI1").Select
    ActiveCell.FormulaR1C1 = "=[OrderForm.xlsx]Order!R15C5"
    Range("AJ1").Select
    ActiveCell.FormulaR1C1 = "=[OrderForm.xlsx]Order!R15C7"
    Range("AK1").Select
    ActiveCell.FormulaR1C1 = "GBP"
    Range("AM1").Select
    ActiveCell.FormulaR1C1 = "TRA"
    Range("AP1").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(C[-3], ""POS"")+COUNTIF(C[-3], ""HDR"")"


'Reinstate alerts
application.displayalerts = True
End Sub

У меня проблема в том, что мне нужно скопировать последний набор из пяти формул с путем к файлу (от AF до AJ), скажем, до строки 500, но только если что-то есть в исходном листе, или мне нужно также сделать скидку / удалить нули, если он вставлен на новый лист. Имейте в виду, что это форматируется для загрузки, поэтому дополнительные 0 и т. д. Могут вызвать ошибки.

Я обыскал все вокруг, но не смог найти ничего, что прямо отвечало бы на этот вопрос, так что извините, если я что-то пропустил.

Я могу попробовать записать, но, конечно, это не работает с «IF», ​​так что все будет высечено на камне.

Просто чтобы прояснить, остальные поля также должны быть заполнены, но их не нужно увеличивать, поскольку они все время поступают из одной и той же ячейки. Так есть ли способ закодировать это в VB, чтобы избавиться от необходимости делать это вручную? Полагаю, я всегда могу записать это и использовать это. Я только спрашиваю, потому что я уже нахожусь в курсе (так что просто немного дерзко).

Опять же, извините, если я пропустил какие-либо статьи. Я не мог найти то, что искал.

Можете ли вы показать данные в таблице, которая является источником формул? Если вы хотите скопировать значения только в том случае, если что-то есть в исходной таблице данных, то самым простым решением было бы узнать количество строк, а затем просто скопировать его, а не проверять после добавления каждой новой строки.

Pavel_V 10.09.2018 12:05

один совет - вам не нужно, чтобы одна строка выбирала ячейку, а вторая строка добавляла формулу. Вы можете использовать его так: Range ("AB1"). FormulaR1C1 = "POS"

Pavel_V 10.09.2018 12:08

Привет, Павел! К сожалению, список динамический, поэтому мы могли заставить одного пользователя добавить 3 элемента, а другой - 3000, поэтому форматирование до конца - лучший вариант, чтобы ничего не пропустить. Что касается значений ячеек, пока вы можете называть их любым набором цифр, это просто числовые значения.

user10299872 10.09.2018 12:27

И спасибо за подсказку, сейчас приберу. Ты узнаешь что-то новое каждый день! :)

user10299872 10.09.2018 12:27

Я так понимаю, у вас может быть разное количество строк. Но если источником является только один лист, макрос может легко определить, сколько там строк. Таким образом вы узнаете, сколько строк вам нужно скопировать в свой макрос.

Pavel_V 10.09.2018 12:50

Привет, это действительно всего один лист. Копируемые значения представляют собой числовые коды деталей. И мне нужно было бы только заполнить то, что делает конечный пользователь, поэтому вопрос в том, как мне заставить его заполняться только на основе ячеек, которые они изначально заполняли. То есть, если orderform.xlsx af1-af11 заполнен, вернуть значения в соответствующей целевой ячейке в новом orderform.csv. Я предполагаю, что range.filldown сделает это?

user10299872 10.09.2018 12:58

Дополнительные подсказки: вам не нужно Select каждую ячейку. Это может увеличить время расчета, так как все поместья Events запускаются каждый раз, когда вы выполняете Select в ячейке / диапазоне. Я бы порекомендовал вам выполнить позднюю привязку (то есть что-то вроде: Dim oWB as Workbook: Set oWB = Workbooks.Add). Затем вы можете использовать With oWB.Worksheets("<you worksheet name here>"). Теперь вместо того, чтобы выбирать ячейки, вы можете просто ссылаться на них: .Range("B1").FormulaR1C1 = "<value here>". Я не совсем понимаю ваш вопрос, поэтому не могу предложить подход, но это должно привести вас на правильный путь

Zac 10.09.2018 14:05

Это вопрос о vbscript или VBA? Это два разных языка. Пожалуйста, используйте правильный тег.

Geert Bellekens 10.09.2018 17:09

как правильно заявил Гирт, я неправильно понял вопрос. Приношу свои извинения и благодарю за внимание. (Мой ответ удален, так как он был неправильным)

Pavel_V 10.09.2018 18:56
0
9
45
0

Другие вопросы по теме