Получение значений с другого листа в Excel с помощью VBA


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

У меня есть некоторые значения в excel (sheet2), например:

    A  B  C  D
    -  -  -  -  
1 | 2  5  9  12
2 | 5  8  4  5
3 | 3  1  2  6

Я работаю с этими значениями в sheet2, и я хочу получить результат в sheet1. Когда я использую свой код в sheet2, я получаю правильный ответ, но когда я пытаюсь использовать его в другом листе, я получаю результат значений, соответствующих текущим ячейкам листа, а не sheet2.

  • я хочу получить сумму каждого столбца в строке 4. и мне это удается, но я могу использовать его только в sheet2.

Im using " With Application.WorksheetFunction" и я хочу изменить это, чтобы получить значения из sheet2.

Не могли бы вы помочь мне с этим и как установить sheet2 в качестве активирующего листа.

Я надеюсь, что мой вопрос ясен.

Спасибо

5 26

5 ответов:

Попробуйте

 ThisWorkbook.Sheets("name of sheet 2").Range("A1")

Для доступа к диапазону на листе 2 независимо от того, где находится ваш код или какой лист в данный момент активен. Чтобы сделать лист 2 активным, попробуйте

 ThisWorkbook.Sheets("name of sheet 2").Activate

Если вам просто нужна сумма строки в другом листе, нет никакой необходимости использовать VBA вообще. Введите следующую формулу на листе 1:

=SUM([Name-Of-Sheet2]!A1:D1)

Это будет (для вас очень конкретный пример)

ActiveWorkbook.worksheets("Sheet2").cells(aRow,aCol).Value=someval

Или

someVal=ActiveWorkbook.worksheets("Sheet2").cells(aRow,aCol).Value

Итак, получаем F1 щелчок и читаем о коллекции листов, которая содержит объекты листов, которая в свою очередь имеет коллекцию ячеек, содержащую объекты ячеек...

Sub TEST()
Dim value1 As String
Dim value2 As String
value1 = ThisWorkbook.Sheets(1).Range("A1").Value 'value from sheet1
value2 = ThisWorkbook.Sheets(2).Range("A1").Value 'value from sheet2
If value1 = value2 Then ThisWorkbook.Sheets(2).Range("L1").Value = value1 'or 2
End Sub

Это позволит сравнить значения ячеек двух листов и, если они совпадают, поместить значение на листе 2 в колонку L.

SomeVal=ActiveWorkbook.рабочие листы ("лист 2").клетки (aRow, aCol).Значение

Не сработало. Однако следующий код работал только для меня.

SomeVal = ThisWorkbook.Листы(2).клетки (aRow, aCol).Значение

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

objWorkbook.WorkSheets(1).Activate
objWorkbook.WorkSheets(2).Activate