ошибка объекта требуется при запуске макроса из личного макроса wkb - PullRequest
0 голосов
/ 06 августа 2020
Public Sub FiltroPro()

Dim datasheet As Worksheet
Dim reportsheet As Worksheet
Dim Pac1 As String
Dim Pac2 As String
Dim Pac3 As String

Dim finalrow As Long
Dim i As Long

ActiveWorkbook.Activate

Set datasheet = sheet10


Set reportsheet = Hoja4


reportsheet.Range("A9:L1000").ClearContents

datasheet.Select

finalrow = datasheet.Cells(datasheet.Rows.Count, "A").End(xlUp).Row

Pac1 = reportsheet.Cells(1, 2).Value
Pac2 = reportsheet.Cells(2, 2).Value
Pac3 = reportsheet.Cells(3, 2).Value

For i = 2 To finalrow

    If Cells(i, 2) = Pac1 Or Cells(i, 2) = Pac2 Or Cells(i, 2) = Pac3 Then
    Range(Cells(i, 1), Cells(i, 12)).Copy
    reportsheet.Select
    Range("A1000").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats
    datasheet.Select
    End If
    
Next i

reportsheet.Select

Range("B2").Select

MsgBox ("busqueda finalizada")



End Sub

Этот макрос предназначен для поиска имен в таблице данных пациента, а также копирования и вставки результатов в отчет в той же книге. Он вызывает ошибку в строке set datasheet = sheet10 (объект требуется), когда я запускаю его из моего личного макроса wkb

1 Ответ

0 голосов
/ 06 августа 2020

Существуют разные способы доступа к листам книги. Один из них - использовать коллекцию Worksheets Рабочей книги (или коллекцию Sheets). Это можно сделать с помощью индекса или имени листа. Предполагая, что вы работаете с ActiveWorkbook (рабочая книга, которая отображается в данный момент и имеет фокус), вы можете использовать

Set datasheet = ActiveWorkbook.Worksheets(1)  ' Access the first sheet 
Set datasheet = ActiveWorkbook.Worksheets("Sheet10")  ' Access the sheet with the name Sheet10

имя листа - это имя, отображаемое в Excel

Второй способ - получить к нему доступ через кодовое имя . По умолчанию кодовое имя листа такое же, как и имя, однако оно не изменится при переименовании листа. Вы можете увидеть и изменить кодовое имя листа только из среды VBA - в окне проекта и в окне свойств.

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

Set datasheet = sheet10

Однако это доступно только до тех пор, пока ваш код хранится в этой книге. Если ваш код находится за пределами рабочей книги (например, в личной книге), он неизвестен и приводит к ошибке компилятора.

TL; DR: вы, вероятно, хорошо используете ActiveWorkbook.Worksheets("Sheet10")

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