gpt4 book ai didi

VBA - 使用宏操作特定工作表数据 - 不是 Activesheet

转载 作者:行者123 更新时间:2023-12-04 21:32:10 25 4
gpt4 key购买 nike

我的工作簿中有 10 张工作表 - 这些工作表是从各个工作簿中导入的 - 这些工作簿是从不同的监控工具中提取的

我需要在所有 10 个工作表中应用过滤器,但是,并非所有工作表都采用相同的格式/结构。

对于 6 个工作表,列标题相同且顺序相同。

其余 4 张具有不同的标题。例如:过滤器需要查找标题名称状态 - 这适用于具有相同结构的 6 个工作表,但是,其他 4 个工作表具有以下内容:

wsheet1:

用户状态而不是 状态 - 我需要将标题更改为 状态

wsheet2:

Current_Status 而不是 状态 - 我需要将标题更改为 状态

下面是应该操作 的示例代码。指定表然而,为了让它“看起来”与其他人一样,我遇到了一些非常烦人的问题,即代码没有应用于指定的工作表,而是在执行宏时应用于“Activesheet”。

这是我的代码:

Sub arrangeSheets()

Dim lastCol As Long, idCount As Long, nameCount As Long, headerRow As Long

Dim worksh As Integer, WS_Count As Integer, i As Integer, count As Integer

Dim rng As Range, cel As Range, rngData As Range

Dim worksheetexists As Boolean

worksh = Application.Sheets.count
worksheetexists = False

headerRow = 1 'row number with headers
lastCol = Cells(headerRow, Columns.count).End(xlToLeft).Column 'last column in header row
idCount = 1
nameCount = 1


' Set WS_Count equal to the number of worksheets in the active
' workbook.
WS_Count = ActiveWorkbook.Worksheets.count

'If Application.Match finds no match it will throw an error so we need to skip them
On Error Resume Next

For x = 1 To worksh

If Worksheets(x).Name = "wsheet1" Then
worksheetexists = True

Set rng = Sheets("wsheet1").Range(Cells(headerRow, 1), Cells(headerRow, lastCol)) 'header range

With Worksheets("wsheet1").Name

Rows(2).Delete
Rows(1).Delete
count = Application.Match("*USER STATUS*", Worksheets("wsheet1").Range("A1:AZ1"), 0)

If Not IsError(count) Then
For Each cel In rng 'loop through each cell in header
If cel = "*USER STATUS*" Then 'check if header is "Unit ID"

cel = "STATUS" & idCount 'rename "Unit ID" using idCount
idCount = idCount + 1 'increment idCount

End If
Next cel
End If

End With

Exit For

End If

Next x
End Sub

最佳答案

  • 考虑使用 . ,在 With-End with引用提到的工作表的部分:

  • enter image description here
  • LikeIf cel Like "*USER STATUS*"* 一起使用, 因此将被评估为 True对于 12USER STATUS12或任何类似的东西。
  • count变量应声明为变体,因此它本身可以保留“错误”。

  • 这就是代码的样子:
    With Worksheets("wsheet1")

    .Rows(2).Delete
    .Rows(1).Delete
    Count = Application.Match("*USER STATUS*", .Range("A1:AZ1"), 0)

    If Not IsError(Count) Then
    For Each cel In Rng 'loop through each cell in header
    If cel Like "*USER STATUS*" Then 'check if header is "Unit ID"
    cel = "STATUS" & idCount 'rename "Unit ID" using idCount
    idCount = idCount + 1 'increment idCount
    End If
    Next cel
    End If

    End With

    关于VBA - 使用宏操作特定工作表数据 - 不是 Activesheet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49551881/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com