макрос для работы на каждом листе Excel VBA - PullRequest
0 голосов
/ 02 июня 2018

Код ниже работает на одном листе с именем «Инструменты», но когда кнопка в перемещается на другой лист, это не так.Как это следует изменить, чтобы работать независимо от имени листа или, в частности, названия листа «Инструменты»

Sub NameRangeTop(Optional ByRef rngRange As Range)

If rngRange Is Nothing Then
    Set rngRange = Application.Selection
Else
    rngRange.Select
End If

Dim ActiveRange As Range
Dim NumRows, NumColumns, iCount As Long

Dim CurSheetName As String
CurSheetName = ActiveSheet.Name

Set ActiveRange = Selection.CurrentRegion
ActiveRange.Select
NumRows = ActiveRange.Rows.Count
NumColumns = ActiveRange.Columns.Count

If NumRows = 1 And NumColumns = 1 Then
MsgBox "No active cells in the surrounding area. Try running the macro from a different location", vbCritical, "Local Range Naming"
Exit Sub
End If

If NumRows = 1 Then
    Set ActiveRange = ActiveRange.Resize(2)
    NumRows = 2
End If

For iCount = 1 To NumColumns
ActiveRange.Resize(NumRows - 1).Offset(1, 0).Columns(iCount).Name = CurSheetName & "!" & ActiveRange.Rows(1).Columns(iCount).Value
Next

ActiveRange.Resize(NumRows - 1).Offset(1, 0).Select

End Sub

Спасибо

1 Ответ

0 голосов
/ 02 июня 2018

Первый оператор if может вызвать проблемы, если вы передаете диапазон в подпрограмму.Прежде чем вы сможете Select rngRange, вы должны быть на листе, содержащем этот диапазон, поэтому используйте:

If rngRange Is Nothing Then
    Set rngRange = Application.Selection
Else
    rngRange.Parent.Activate
    rngRange.Select
End If

Но в целом вам вообще не нужно использовать Select, см .:

Избегайте использования Select

Вам также необходимо убедиться, что данные каждого листа соответствуют вашим методам именования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...