Я устанавливаю свою переменную ws на первый лист, но мой код работает на активном листе.

Этот код запускается с помощью кнопки на Sheet2, и я использую Sheets(1).Select, поскольку имя первого рабочего листа может отличаться.

Что мне нужно изменить, чтобы мой код работал в Таблицах (1)?

Function Test()

Dim ws As Worksheet
Dim lColumn As Long
Dim lRow As Long
Dim myRange As Range
Dim cell As Range

Set ws = Sheets(1)

    With ws
        lColumn = ws.UsedRange.Columns.Count
        lRow = Cells(Rows.Count, 2).End(xlUp).Row

        colName = Split(Worksheets(1).Cells(1, lColumn).Address, "$")(1)

        Range("A1: " & colName & "1").Font.Bold = True

        Set myRange = Range("A1: " & colName & "1")

        For Each cell In myRange
            cell.Interior.Pattern = xlSolid
            cell.Interior.PatternColorIndex = xlAutomatic
            cell.Interior.ThemeColor = xlThemeColorDark1
            cell.Interior.TintAndShade = -0.249977111117893
            cell.Interior.PatternTintAndShade = 0
        Next

    End with

End Function
0
MitchMahoney 5 Окт 2018 в 21:29

1 ответ

Лучший ответ

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

Я изменил lColumn = ws.UsedRange.Columns.Count на lColumn = .UsedRange.Columns.Count

.Range("A1: " & colName & "1").Font.Bold = True
Set myRange = .Range("A1: " & colName & "1")

Не используя . VBA думает, что вы ссылаетесь на ActiveSheet.

3
Mathieu Guindon 5 Окт 2018 в 18:58