Мне нужно просмотреть все рабочие листы в моей книге. Если имя рабочего листа содержит текст «Преимущества», тогда мне нужно запустить макрос на этом листе в качестве активного листа, а затем перейти к следующему.InStr in If If
У меня есть этот код и (1) он запускает макрос в любом случае и (2) он не перебирается к следующему листу.
Я новичок в VBA и не смог понять это.
Sub CheckSheets()
Dim sh As Excel.Worksheet
For Each sh In ActiveWorkbook.Sheets
If InStr(sh.Name, "Benefits") <> 0 Then
Call AddCheckBoxesRange
End If
Next sh
End Sub
Sub AddCheckBoxesRange()
'by Dave Peterson
'add Form checkboxes
Dim c As Range
Dim myCBX As CheckBox
Dim wks As Worksheet
Dim rngCB As Range
Dim strCap As String
Set wks = ActiveSheet
Set rngCB = wks.Range("B3:E3")
'Set rngCB = Selection
strCap = "Select Plan"
For Each c In rngCB
With c
Set myCBX = wks.CheckBoxes.Add _
(Top:=.Top, Width:=.Width, _
Height:=.Height, Left:=.Left)
End With
With myCBX
.Name = "cbx_" & c.Address(0, 0)
.LinkedCell = c.Offset(1, 0) _
.Address(external:=True)
.Caption = strCap
' .OnAction = ThisWorkbook.Name _
' & "!mycbxMacro"
End With
Next c
End Sub
Измените ваше Если заявление будет 'Если InStr (1, sh.Name, "Преимущества", vbTextCompare)> 0 Тогда 'и трудно сказать, нужны ли какие-либо другие настройки, не видя код для' AddCheckBoxesRange' – tigeravatar
. Как 'AddCheckBoxesRange' знает, какой лист для o влиять на? – barrowc
Короткий ответ: добавьте 'sh.Activate' перед' Call'. Скучный, но правильный ответ: измените свой 'AddCheckBoxesRange', чтобы иметь свой целевой лист в параметре вместо того, чтобы действовать на' ActiveSheet'. –