VBA Excel 2016 выдает объект требуется ошибка во время выполнения - PullRequest
0 голосов
/ 24 ноября 2018

Что я пытаюсь сделать:

  1. У меня есть три превосходства - Master.xlsx (мои исходные данные), DiscrepencyReport (тот, который мой макрос создаст и заполнит вычисленнымзначения из Master.xlsx) и ReportRunner (моя активная рабочая таблица, где я приведу некоторые входные значения и запустите макрос)
  2. Я хочу программно открыть Master.xlsx и создать новый файл с именем DiscepencyReport с датойдиапазон в имени файла.
  3. Скопируйте определенные значения из источника, измените их и вставьте на целевой лист.
  4. Закройте все рабочие книги.

Какая помощь мне нужна:

  1. Во-первых, это дает мне ошибку во время выполнения, говорящую, что объект обязателен.Ошибка в этой строке " InputFileName = This.Workbook.Path &" \ "&" Master.xlsx "".Я погуглил и прочитал предыдущие ошибки и попытался использовать / удалить ключевое слово set, но оно не работает.Я скучаю по своим основам здесь.Нет ошибки при компиляции.
  2. Это правильный способ решения этой проблемы?или есть лучший способ?
  3. Есть часть, где я "Создаю отчетный лист".Мне бы хотелось получить руководство по синтаксису того, как скопировать столбец A из рабочей таблицы, называемой «Base» файла Master.xlsx, в столбец A1 листа1 целевой книги.Приведенный ниже код выполняет только копирование и не вставляет.

Код, который я имею, приведен ниже:

Sub ReportGeneration()

'Declarations

Dim InputSheet As Workbook, AttendanceDiscrepencyReporter As Workbook
Dim Start As String
Dim Last As String
Dim InputFileName As String
Dim ADRFileName As String
Dim TWorkingDays As Integer
Dim EmpEmail As Range
Dim EmpID As Range
Dim TLeave As Range
Dim TFlexi As Range
Dim TAttendance As Range
Dim IsAtOnsite As Range
Dim CMEmail As Range

'Open Input Workbook

InputFileName = This.Workbook.Path & "\" & "Master.xlsx"
Set InputSheet = Workbooks.Open(InputFileName, True, True)

'Create the Report Workbook

Start = Replace((Range("F7").Value), "/", "_")
Last = Replace((Range("F8").Value), "/", "_")
TWorkingDays = Range("F10").Value

Set AttendanceDiscrepencyReporter = Workbooks.Add
ADRFileName = ThisWorkbook.Path & "\" & "DiscrepencyReport_from_" & Start & "_to_" & Last & ".xlsx"

With AttendanceDiscrepencyReporter
    .Title = "Discrepency Report"
    .Subject = "Discrepency Report"
    .SaveAs Filename:=ADRFileName
End With

' Construct the Report Worksheet

Set EmpEmail = InputSheet.Worksheets("Base").Columns("A")
Set EmpID = InputSheet.Worksheets("Base").Columns("B")

' Close Workbooks

InpuSheet.Close
AttendanceDiscrepencyReporter.Close

End Sub

Ответы [ 2 ]

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

Без принудительного явного объявления переменных с использованием Option Explicit в верхней части каждого модуля VBA во время компиляции назначит вариант любым необъявленным именам переменных.Любой код, который VBA не может разрешить в качестве объекта, метода или свойства, станет переменной типа варианта с именем независимо от того, какой строкой является нераспознанный код.

  • UnrecognisedCodeString.VarType = vbEmpty применяется до тех пор, пока ему не будет присвоено значение объекта или свойства

  • UnrecognisedCodeString.Value = vbNull.

    Если выпопробуйте что-нибудь сделать с неназначенной переменной, которая не будет работать:

  • InputFileName = This.Workbook.Path & "\" & "Master.xlsx" оценивается как

  • InputFileName = vbNull.Workbook.Path & "\" & "Master.xlsx", а затем

  • InputFileName = vbNull Что вызывает ошибку, поскольку vbNull не является строкой.

Хорошая новость заключается в том, что вы можете установить VBA IDE всегдапотребуйте Option Explicit, перейдя в Инструменты -> Параметры ... -> Редактор и установив флажок Требовать объявление переменной.

enter image description here

К сожалению, это не такРетроспектива ранее созданных модулей - только новые.

0 голосов
/ 24 ноября 2018
  1. Использовать Option Explicit - читайте здесь: https://www.excel -easy.com / vba / examples / option -licit.html

  2. Использование Option Explicit позволит устранить проблемы с орфографическими ошибками (включите Option Explicit и используйте его. Всегда.)

  3. Как скопировать столбец в VBA:

    'Range.Copyк другим рабочим книгам Рабочие книги ("Book1.xlsx"). Рабочие листы ("Sheet1"). Диапазон ("A1"). Копировать _ Рабочие книги ("Book2.xlsx"). Рабочие листы ("Sheet1"). Диапазон ("A1")

Подробнее здесь: Как скопировать столбцы с одного листа на другой с помощью VBA в Excel? и здесь: https://www.excelcampus.com/vba/copy-paste-cells-vba-macros/

Здесьисправлена ​​треска:

Sub ReportGeneration()

'Declarations

Dim InputSheet As Workbook, AttendanceDiscrepencyReporter As Workbook
Dim Start As String
Dim Last As String
Dim InputFileName As String
Dim ADRFileName As String
Dim TWorkingDays As Integer
Dim EmpEmail As Range
Dim EmpID As Range
Dim TLeave As Range
Dim TFlexi As Range
Dim TAttendance As Range
Dim IsAtOnsite As Range
Dim CMEmail As Range

'Open Input Workbook

InputFileName = ThisWorkbook.Path & "\" & "Master.xlsx"
Set InputSheet = Workbooks.Open(InputFileName, True, True)

'Create the Report Workbook

Start = Replace((Range("F7").Value), "/", "_")
Last = Replace((Range("F8").Value), "/", "_")
TWorkingDays = Range("F10").Value

Set AttendanceDiscrepencyReporter = Workbooks.Add
ADRFileName = ThisWorkbook.Path & "\" & "DiscrepencyReport_from_" & Start & "_to_" & Last & ".xlsx"

With AttendanceDiscrepencyReporter
    .Title = "Discrepency Report"
    .Subject = "Discrepency Report"
    .SaveAs Filename:=ADRFileName
End With

' Construct the Report Worksheet

Set EmpEmail = InputSheet.Worksheets("Base").Columns("A")
Set EmpID = InputSheet.Worksheets("Base").Columns("B")

' Close Workbooks

InputSheet.Close
AttendanceDiscrepencyReporter.Close

End Sub

Я исправил орфографическую ошибку в части This.Workbook и InpuSheet.Close.

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