Excel 2010 - копирование данных на указанный лист на основе раскрывающегося значения. - PullRequest
0 голосов
/ 16 ноября 2018

новичок в этом форуме и надеется, что кто-то может помочь!

Я создаю базу данных ресурсов для проекта. Я создал лист под названием «Сводка» для ввода сведений о ресурсе (организация, тип, местоположение, контактные данные и т. Д.). Список организован вертикально и имеет несколько раскрывающихся полей для проверки данных. см. Резюме

То, что я пытаюсь сделать, это прикрепить макрос к кнопке «Добавить в базу данных», которая будет копировать данные из листа «Сводка» в одну из других таблиц на основе значения в раскрывающемся списке (ячейка : E4) и транспонировать это горизонтально, а затем очистить поле.

Я создал отдельные макросы для выполнения этого (всего 9), например:

Sub EMPTADD()
Application.ScreenUpdating = False
Range("E2:E19").Select
Selection.Copy
Sheets("Employability & Training").Activate
Range("A750").End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Sheets("Summary").Activate
Range("E2:E19").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("E2").Select
Application.ScreenUpdating = True
End Sub

Я просто не могу понять, куда идти дальше. Могу ли я использовать функцию IF, чтобы определить, содержит ли E4 определенное значение, и вызвать соответствующий макрос? Любая помощь высоко ценится:)

1 Ответ

0 голосов
/ 16 ноября 2018

Вам не нужно использовать команды типа активации / выбора.VBA способен работать гораздо более динамично, чем это.Использование команд активации / выбора типа также может открыть вашу кодировку до ряда непреднамеренных последствий.Иногда то, что вы считаете активным, и то, что считает активным Excel, могут быть двумя разными вещами.Рекомендуется полностью квалифицировать ваши диапазоны, чтобы в этом не было никаких сомнений.

Что касается кодирования, похоже, что вы пытаетесь вручную воспроизвести то, как вы бы нажимали на определенных диапазонах и манипулировали данными(может быть, это основано на записи макроса?).Мы можем использовать VBA более динамично, чем это!Я бы использовал что-то вроде этого:

Sub CopyPasteData()

'Declare your variables
Dim wb As Workbook
Dim criteria As String
Dim i As Long

Application.ScreenUpdating = False

    'Set values for your variables.
    Set wb = ThisWorkbook
    criteria = wb.Sheets("Summary").Range("E4")
    i = wb.Sheets(criteria).Range("A" & Rows.Count).End(xlUp).Row

        'Tell excel where to copy and paste your data
        wb.Sheets("Summary").Range("E1").Copy
        wb.Sheets(criteria).Range("A" & i + 1).PasteSpecial xlPasteValues
        wb.Sheets("Summary").Range("E2").Copy
        wb.Sheets(criteria).Range("B" & i + 1).PasteSpecial xlPasteValues
        wb.Sheets("Summary").Range("E3").Copy
        wb.Sheets(criteria).Range("C" & i + 1).PasteSpecial xlPasteValues
        wb.Sheets("Summary").Range("E4").Copy
        wb.Sheets(criteria).Range("D" & i + 1).PasteSpecial xlPasteValues

Application.ScreenUpdating = True


End Sub

Если вы используете переменные для установки некоторых ваших значений, вы сможете использовать один макрос для всех ваших рабочих книг.Нет, если заявление будет необходимо!Переменная wb создает ярлык для объявления того, в какой книге должен работать макрос. Значение критерия устанавливается равным тому, что вы ввели в ячейку E4 на листе SUMMARY.Если имена ваших рабочих таблиц совпадают с раскрывающимся списком в E4, это будет указывать Excel, в какую рабочую таблицу будут помещены ваши данные. Переменная i подсчитывает количество строк, содержащих данные (и таким образом мы можем вставить новые данные в нижней части этих таблиц).строк).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...