Вопрос об ошибке во время выполнения 1004 на VBA - PullRequest
0 голосов
/ 17 марта 2020

Ошибка выполнения VBA 1004

Я программирую Excel Macro на VBA. Возникли некоторые проблемы.

Есть 3 файла Excel. Один из них - файл Excel старой версии (расширенный формат: xls), а остальные - в формате xlsx.

Я хочу получить последнюю позицию строки каждого файла. Мой код ниже.


Sub macro()

Dim testWorkBook1 As Workbook, testWorkBook2 As Workbook, testWorkBook3 As Workbook
Dim testSheet1 As Worksheet, testSheet2 As Worksheet, testSheet3 As Worksheet
Dim count1 As Integer, count2 As Integer, count3 As Integer

Set testWorkBook1 = Workbooks.Open("D:\test folder\test1.xls")      ' line a --> xls format
Set testWorkBook2 = Workbooks.Open("D:\test folder\test2.xlsx")
Set testWorkBook3 = Workbooks.Open("D:\test folder\test3.xlsx")      'line b

Set testSheet1 = testWorkBook1.Sheets(1)
Set testSheet2 = testWorkBook2.Sheets(1)
Set testSheet3 = testWorkBook3.Sheets(1)

count3 = testSheet3.Cells(Rows.count, 1).End(xlUp).Row
count2 = testSheet2.Cells(Rows.count, 1).End(xlUp).Row
count1 = testSheet1.Cells(Rows.count, 1).End(xlUp).Row    'the point where runtime error 1004 happened 


End Sub

При выполнении кода произошла ошибка во время выполнения 1004. Я пытался несколько других дел. и до сих пор я знал 2 вещи.

  1. , если файл test1 - версия "xlsx", программа успешно выполняется.
  2. , если строка "a" помещена "в строку b" ниже, Программа также успешно работает. например,
Set testWorkBook2 = Workbooks.Open("D:\test folder\test2.xlsx")
Set testWorkBook3 = Workbooks.Open("D:\test folder\test3.xlsx")      'line b
Set testWorkBook1 = Workbooks.Open("D:\test folder\test1.xls")      ' line a --> xls format

Я хотел бы получить не только решение, но и причины.

1 Ответ

2 голосов
/ 17 марта 2020

Ваш синтаксис неисправен. Вот как это должно быть.

with testSheet1
    count1 = .Cells(.Rows.Count, 1).End(xlUp).Row
End With

Критическая разница в ведущем периоде здесь: .Rows.Count. Этот период заставляет VBA принимать количество строк из TestSheet1 , тогда как это число берется из ActiveSheet, если оно опущено. Конечно, в вашем примере число в ActiveSheet намного больше, чем в листе с версией XLS, и это приводит к сбою.

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