Подтвердить что ты не робот

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

Я хочу получить значения из других листов.

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

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

Я суммирую каждый столбец в строке 4.

Я работаю с этими значениями в sheet2, но я хочу получить результат в sheet1.

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

Я использую With Application.WorksheetFunction.

Как я могу установить sheet2 в качестве активного листа?

4b9b3361

Ответ 1

Try

 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)

Ответ 2

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

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

ИЛИ

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

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

Ответ 3

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.

Ответ 4

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

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

SomeVal = ThisWorkbook.Sheets(2).cells(aRow,aCol).Value

Ответ 5

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

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

Ответ 6

У меня похожий вопрос относительно разных значений на разных листах. Основная суть заключается в следующем: у меня есть индексный лист (всегда 1-й), а затем последующие листы нумеруются от 1 до.... X (только счета, которые я выставляю разным клиентам), иногда 50, иногда 150 в год, не всегда одно и то же число,

Как я могу индексировать значения из разных ячеек (ровно 8 ячеек), некоторые из них имеют значения, такие как даты, валюта или имена, по количеству листов, которые у меня есть. Как я могу ссылаться на эти ячейки на моем индексном листе с VBS?

В основном на моем листе индекса у меня есть строка 1, относящаяся к листу 1 с соответствующими значениями, строка 2 с листом 2 и так далее. Это занимает у меня целую вечность, делая то же самое для каждого счета в определенном году. Я едва царапаю поверхность VBS, но я хочу учиться. Все, что мне удалось сделать, - это создавать шаблон для своего счета каждый раз, когда я нажимаю клавиши Shift + F11 и вставляется один макромодуль с функцией подсчета, чтобы переименовать все мои листы с 1 на любое количество, чтобы я мог отслеживать свои счета. до сих пор. Мне действительно нужна твоя помощь.

Ответ 7

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

Sub reviewRow()
Application.ScreenUpdating = False
Results = MsgBox("Do you want to View selected row?", vbYesNo, "")
If Results = vbYes And Range("C10") > 1 Then
i = Range("C10") //this is where i put the row number that i want to retrieve or review that can be changed as needed
Worksheets("Sheet1").Range("C6") = Worksheets("Sheet2").Range("C" & i) //sheet names can be changed as necessary
End if
Application.ScreenUpdating = True
End Sub

Вы можете создать форму, используя ее, и при необходимости персонализировать.