Excel VBA Initialize Workbook путем очистки таблиц - PullRequest
0 голосов
/ 15 марта 2019

У меня есть некоторый код VBA, который я использую в другой книге, чтобы изменить размер таблицы на 1 строку и удалить содержимое таблицы данных для инициализации книги.Затем открывается подсказка файла, в которой пользователю предлагается выбрать соответствующий файл для обработки.По какой-то причине я получаю

«Ошибка времени выполнения 91»: переменная объекта или переменная блока не установлена ​​»

Код является копией ивставьте из другой рабочей книги, и я изменил имена переменных, рабочих книг, рабочих таблиц и имен таблиц. Рабочая книга

называется "IMD Processing.xlsm" с двумя листами под названием "IMD" и "Raw".На «сыром» листе есть таблица с именем «tbl_raw», а на листе «IMD» есть таблица с именем «tbl_imd».

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

Option Explicit

Sub IMDAutomation()

Dim fileName As String 'Filename string

Dim wb_macro As Workbook 'Macro workbook
Dim ws_macro_imd As Worksheet 'Macro worksheet
Dim ws_macro_raw As Worksheet 'Macro raw worksheet

Dim wb_imd As Workbook 'IMD Workbook for processing
Dim ws_imd As Worksheet 'IMD Worksheet for processing

Dim objTable As ListObject 'Table of raw data

Dim tbl_raw As ListObject 'Raw table in macro workbook
Dim tbl_imd As ListObject 'IMD table in macro workbook

Dim vals As Variant 'Array to store values

Dim lrow As Long 'Variable used to determine number of rows in data table

Set wb_macro = ThisWorkbook
Set ws_macro_imd = Sheets("IMD")
Set ws_macro_raw = Sheets("Raw")

'============ Initialize macro workbook - clearing data ============'
'Clear the raw data in the macro workbook
Set tbl_raw = ws_macro_raw.ListObjects("tbl_raw")
    With tbl_raw.DataBodyRange
           If .Rows.Count > 1 Then
            .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Rows.Delete
        End If
    End With
tbl_raw.DataBodyRange.Rows(1).ClearContents

'Clear the IMD data in the macro workbook
Set tbl_imd = ws_macro_imd.ListObjects("tbl_imd")
    With tbl_imd.DataBodyRange
        If .Rows.Count > 1 Then
            .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Rows.Delete
        End If
    End With

'============ Locate Raw Data File ============'
'Open file dialog to locate the Workforce Review raw data workbook exported from system
With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = False
    .Title = "Select the IMD file"
    .Filters.Clear
    .Filters.Add "Custom Excel Files", "*.xlsx, *xls, *csv"
    .Show
    fileName = .SelectedItems.Item(1)
End With
If InStr(fileName, ".xlsx") = 0 Then
Exit Sub
End If
Workbooks.Open fileName
'Set the Workforce Review raw workbook
Set wb_imd = ActiveWorkbook
'Set the worksheet
Set ws_imd = wb_imd.ActiveSheet


lrow = ws_imd.Cells(ws_imd.Rows.Count, 2).End(xlUp).Row
vals = ws_imd.Range("A2:CU" & lrow)

Application.CutCopyMode = False
Application.CutCopyMode = True

End Sub

UDPATE с решением Спасибо @Variatus за решение.У меня не было строки данных в моей таблице, поэтому я создал ее, и теперь она работает.Это должно работать для обработки случаев, когда в таблице нет строки.If tbl_raw.DataBodyRange Is Nothing Then InsertRowRange Else (Code to clear the table)

1 Ответ

1 голос
/ 15 марта 2019

Возможно, объект, который ищется с помощью Set tbl_raw = ws_macro_raw.ListObjects("tbl_raw"), не существует в новой рабочей книге, и, следовательно, ссылка на With tbl_raw возвращает эту ошибку

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