Создание формы из выходящих документов - PullRequest
0 голосов
/ 07 сентября 2018

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

Итак, основа задачи -

  1. Клиент сталкивается с заказом от (xlsx). Они заполняют документ по мере необходимости.
  2. Когда форма заполнена, они нажимают встроенную кнопку, запускают макрос, который преобразует форму в правильный формат (CSV) и макет для загрузки.

Пока у меня есть ниже, но у меня есть различные проблемы, которые, кажется, меняются ??????? Я объясню больше, не волнуйтесь -

* 1013 код-*

 Sub ButtonMacro()
'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
'Open new workbook
 strFileName = "U:\OrderForm.CSV"

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True

Set objWorkbook = objExcel.Workbooks.Add()
objWorkbook.SaveAs (strFileName)

objExcel.Quit



'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"
    Range("AF1").Select
    ActiveCell.FormulaR1C1 = "U:\WINDOWS\=[OrderForm.xlsx]Order!R15C3"
    Range("AG1").Select
    ActiveCell.FormulaR1C1 = "U:\WINDOWS\=[OrderForm.xlsx]Order!R15C1"
    Range("AH2").Select
    ActiveCell.FormulaR1C1 = "U:\WINDOWS\=[OrderForm.xlsx]Order!R15C2"
    Range("AI1").Select
    ActiveCell.FormulaR1C1 = "U:\WINDOWS\=[OrderForm.xlsx]Order!R15C5"
    Range("AJ1").Select
    ActiveCell.FormulaR1C1 = "U:\WINDOWS\=[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

Хорошо, поэтому я подумал о том, чтобы сохранить копию на общем диске C \ TEMP (из-за ограничений бизнеса мне нужно право на общий диск для проверки U:).

Однажды написав там, я бы просто открыл документ и наметил правильные столбцы. ОДНАКО, здесь все идет немного не так.

Вы заметите, что у меня есть некоторые полные и некоторые частичные пути к файлам, потому что я тестировал. Если я запишу макрос сохранения документа и воспользуюсь тем, что получу частичный путь к файлу, он откроет сохраненный документ и не продолжит работу. Если я использую полный путь, я получаю первый «MSG» в левом верхнем поле, затем он останавливается.

Весь день я получал разные результаты.

Вероятно, есть гораздо более аккуратный способ сделать это, но я просто не знаю этого.

Несколько вещей для рассмотрения -

Мы не знаем, какой всегда будет доступный путь к файлу, поэтому я просто выбрал (или займусь) C: \ windows \ temp. Если бы мы могли писать прямо на их рабочий стол, не зная пути, это было бы лучше всего.

Сохраняемый документ предназначен только для ссылки на ячейки для отображения новой формы. Так что на самом деле это не обязательно, но это единственный способ, которым я знаю, как отобразить ячейки (статическое расположение документа).

Все, начиная от «Сохранить на устройстве пользователя и заканчивая« objExcel.Quit », застряло, и я схватил его, чтобы попытаться открыть новый документ поверх открытого файла« orderform.xlsx », чтобы я мог попробовать использовать короткий путь к файлу вместо этого. Опять нет радости.

Это немного болтовня. Подводя итог.

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

Начальная форма клиента - xlsx, но окончательная отображенная версия должна быть в формате CSV.

Буду очень признателен за любые советы или указания на вспомогательные документы.

1 Ответ

0 голосов
/ 10 сентября 2018

Поправки к коду заставили его работать. Правильная версия ниже.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...