Не удается активировать рабочий лист VBA. Активировать лист vba excel


vba - Не удается активировать рабочий лист VBA

Вы можете. .Select один или несколько объектов (рабочие листы, ячейки и т.д.) В коллекцию, но вы можете только. .Activate один из них. Все, что активировано, всегда является частью выбора, даже если это один и тот же единственный объект. Вам не нужно и то и другое. Выбирайте и.Activate объект, если вы не выбираете более одного и требуете, чтобы один из них был ActiveCell или ActiveSheet.

По сути, для привлечения внимания рабочего листа или объекта диапазона следует использовать метод .Slect или .Activate. Нет необходимости выбирать или активировать что-то, чтобы работать с ним (передача данных говорит об этом).

Ниже приведена краткая переработка вашей подпрограммы, которая отходит от использования. Выберите и.Activate для ссылки на объекты.

Sub summarizeRankings() Dim lstA As Long, lstD As Long, clrYellow As Long, x As Long, ws As Worksheet With ThisWorkbook With .Worksheets("Rankings") If .AutoFilterMode Then .AutoFilterMode = False With .Cells(1, 1).CurrentRegion With .Resize(.Rows.Count, 8) .Cells.Sort Key1:=.Columns(8), Order1:=xlAscending, _ Orientation:=xlTopToBottom, Header:=xlYes .AutoFilter End With End With Set ws = .Cells(1, 1).Parent End With With .Worksheets("Summary") .Range("A8:A18").Value = ws.Range("A2:A12").Value .Range("B8:B18").Value = ws.Range("E2:E12").Value .Range("C8:C18").Value = ws.Range("G2:G12").Value .Range("D8:D18").Value = ws.Range("h3:h22").Value lstA = .Cells(Rows.Count, "A").End(xlUp).Row lstD = .Cells(Rows.Count, "D").End(xlUp).Row clrYellow = RGB(256, 256, 0) For x = lstD To 8 Step -1 If (.Cells(x, "D").Value) >= 6 Then .Cells(x, "A").EntireRow.Delete ElseIf (.Cells(x, 4).Value) < 6 Then .Cells(x, 1).Interior.Color = clrYellow .Cells(x, 1).Font.Bold = True .Cells(x, 4).Interior.Color = clrYellow .Cells(x, 4).Font.Bold = True End If Next x .Activate '<-last step brings the Summary worksheet to the front End With End With Application.Calculate End Sub

См. Как избежать использования Select в Excel VBA макросов для получения дополнительных методов, чтобы избежать использования выбора и активации для достижения ваших целей.

qaru.site

Excel VBA активирует рабочий лист MS Excel онлайн

Мне нужно активировать конкретный рабочий лист. Код предназначен для создания рабочих листов со специфицированным именем. Мне нужно вставить что-то из другого листа во все эти вновь созданные рабочие листы. Код, который я использую, приведен ниже. Но мне сложно активировать вновь созданный рабочий лист, чтобы вставить то, что я хочу.

Sub octo() 'Dim ws As Worksheet Dim Ki As Range Dim ListSh As Range Workbooks.Open ("C:\Users\Dash\Dropbox\Randika\Misc\Emmash timesheets\timesheet.xlsx") With Worksheets("PPE 05-17-15") Set ListSh = .Range("B4:B" & .Cells(.Rows.Count, "B").End(xlUp).Row) End With On Error Resume Next For Each Ki In ListSh If Len(Trim(Ki.Value)) > 0 Then If Len(Worksheets(Ki.Value).Name) = 0 Then Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = Ki.Value 'open template Workbooks.Open ("C:\Users\Dash\Dropbox\Randika\Misc\Emmash timesheets\octo_template.xls") Range("A1:L31").Select Selection.Copy Worksheets(Ki.Value).Activate If ThisWorkbook.Saved = False Then ThisWorkbook.Save End If End If End If Next Ki End Sub
Solutions Collecting From Web of "Excel VBA активирует рабочий лист"

Я думаю, это то, что вам нужно. Как было сказано Крисом, нет необходимости Активировать или Выбрать. Надеюсь, что следующий код решит вашу проблему.

Option Explicit Dim MyTemplateWorkbook As Workbook Dim MyDataWorkbook As Workbook Dim MyTemplateWorksheet As Worksheet Dim MyDataWorksheet As Worksheet Dim MyNewDataWorksheet As Worksheet Dim CurrentRange As Range Dim ListRange As Range Sub AddWSAndGetData() Set MyTemplateWorkbook = Workbooks.Open("C:\Users\lengkgan\Desktop\Testing\MyTemplate.xlsx") Set MyTemplateWorksheet = MyTemplateWorkbook.Sheets("Template") Set MyDataWorkbook = Workbooks.Open("C:\Users\lengkgan\Desktop\Testing\MyData1.xlsx") Set MyDataWorksheet = MyDataWorkbook.Sheets("PPE 05-17-15") Set ListRange = MyDataWorksheet.Range("B4:B" & MyDataWorksheet.Cells(Rows.Count, "B").End(xlUp).Row) Application.ScreenUpdating = False On Error Resume Next For Each CurrentRange In ListRange If Len(Trim(CurrentRange.Value)) > 0 Then If Len(MyDataWorksheet(CurrentRange.Value).Name) = 0 Then Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = CurrentRange.Value Set MyNewDataWorksheet = MyDataWorkbook.Sheets(ActiveSheet.Name) MyNewDataWorksheet.Range("A1:L31").Value = MyTemplateWorksheet.Range("A1:L31").Value If MyDataWorkbook.Saved = False Then MyDataWorkbook.Save End If End If End If Next CurrentRange MyTemplateWorkbook.Close (False) 'Close the template without saving End Sub

Как Workbooks.Open и Worksheets.Add возвращают ссылки на открытые и добавленные объекты, которые вы можете использовать для прямого доступа и изменения их, а в вашем случае – для вставки данных.

Пример:

Dim oSourceSheet As Worksheet Dim oTargetSheet As Worksheet Set oSourceSheet = Sheet1 'Set reference to any sheet, Sheet1 in my example Set oTargetSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count)) oSourceSheet.Range("A1:L31").Copy oTargetSheet.Paste Set oSourceSheet = Nothing Set oTargetSheet = Nothing

excel.bilee.com

excel-vba - лимит кода на один рабочий лист в книге активировать Excel VBA

Привет, У меня есть код, который мне нужно запустить на рабочем столе активировать событие. Я создал модуль, в котором я сохранил код и вызываю его при активизации события в книге. Проблема в том, что код должен влиять только на один рабочий лист под названием "Тарифы", но, похоже, он влияет на другие рабочие листы в книге. Мне нужна помощь, ограничивающая код для этого конкретного рабочего листа. Код ниже, я знаю, что он не очень чистый, но, похоже, работает. Спасибо за помощь!

Sub Replace() Dim sht As Worksheet Dim fndList As Variant Dim rplcList As Variant Dim x As Long Dim LastRow As Integer Dim myuniquevalue As String Dim nextvalue As String myuniquevalue = Sheets("Rates").Cells(2, 1).Value & Sheets("Rates").Cells(2, 2).Value Range(Cells(2, 6), Cells(2, 12)).Value = Range(Cells(3, 6), Cells(3, 12)).Value LastRow = Worksheets("Rates").Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To LastRow nextvalue = Worksheets("Rates").Cells(i, 1).Value & Worksheets("Rates").Cells(i, 2).Value If myuniquevalue <> nextvalue Then myuniquevalue = nextvalue Range(Cells(i, 6), Cells(i, 12)).Value = Range(Cells(i + 1, 6), Cells(i + 1, 12)).Value End If LastRow = Sheets("Rates").Cells(Rows.Count, "A").End(xlUp).Row Next i LastRow = Worksheets("Rates").Cells(Rows.Count, "A").End(xlUp).Row myuniquevalue = Worksheets("Rates").Cells(LastRow, 1).Value & Worksheets("Rates").Cells(LastRow, 2).Value & Worksheets("Rates").Cells(LastRow, 3).Value Range(Cells(LastRow, 10), Cells(LastRow, 12)).Value = Range(Cells(LastRow - 1, 10), Cells(LastRow - 1, 12)).Value For i = LastRow To 2 Step -1 nextvalue = Worksheets("Rates").Cells(i, 1).Value & Worksheets("Rates").Cells(i, 2).Value & Worksheets("Rates").Cells(i, 3).Value If myuniquevalue <> nextvalue Then myuniquevalue = nextvalue Range(Cells(i, 10), Cells(i, 12)).Value = Range(Cells(i - 1, 10), Cells(i - 1, 12)).Value End If Next i fndList = Array("(6 - 12)", "(13 - 24)", "(25 - 36)", "(37 - 61)") rplcList = Array("12", "24", "36", "48") Set sht = Worksheets("Rates") For x = 0 To UBound(fndList) 'For Each sht In ActiveWorkbook.Worksheets sht.Cells.Replace What:=fndList(x), Replacement:=rplcList(x), _ LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ SearchFormat:=False, ReplaceFormat:=False Next x End Sub

qaru.site