【问题标题】:Issues with Subroutine and Code子程序和代码的问题
【发布时间】:2016-06-09 09:55:24
【问题描述】:

我遇到了问题(我之前已经发布过),但我认为我错过了一些愚蠢的东西。我有一个循环在 A4-A12 中的 9 个团队中运行,并获取每个团队名称并运行我的名为 Dataorangise 的子程序,这为 9 个团队中的每个团队运行一个循环,但它不起作用

我拥有的是

Sub Looproutine()

Dim TeamName As String

For i = 4 To 12

TeamName = Sheets("Parameter").Range("A" & i).Value 'identify the location

    Call Dataorganise(TeamName) ' Call subroutine

Next i

End Sub

那么它正在运行的代码是

Sub Dataorganise(TeamName As String)

Sheets("Data").Range("A:X").copy Destination:=Sheets(TeamName).Range("A1")

Columns("R:R").Select
Selection.AutoFilter
ActiveSheet.Range("$R$1:$R$1048576").AutoFilter Field:=1, Criteria1:= _
TeamName

Columns("A:J").Select
Selection.Delete Shift:=xlToLeft
Columns("B:G").Select
Selection.Delete Shift:=xlToLeft
Columns("C:G").Select
Selection.Delete Shift:=xlToLeft
Range("A1:C1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.copy
Range("E1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Columns("A:D").Select
Range("D1").Activate
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Columns("A:C").Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    TeamName & "!R1C1:R1048576C3", Version:=xlPivotTableVersion12). _
    CreatePivotTable TableDestination:=TeamName & "!R1C5", TableName:= _
    "PivotTable7", DefaultVersion:=xlPivotTableVersion12

【问题讨论】:

  • 我认为 TeamName = Sheets("Paramets").Range("A4" & CStr(i)).Value 应该是 TeamName = Sheets("Parameres").Range("A " & i).值
  • 感谢您的回答。我仍然在 "Sheets("Data").Range("A:X").copy Destination:=Sheets("TeamName").Range("A1")" 行出现错误
  • 您对 DataOrganise 的定义在输入中不接受任何参数,并且您正在使用参数调用它。您应该使用参数定义 Dataorganise:Sub DataOrganise(Teamname as String)...
  • 当我用我的 Teamname 参数定义它时,我仍然在“Sheets("Data").Range("A:X").copy 目标行的 Dataorganise 子中收到错误: =Sheets("TeamName").Range("A1")"
  • 就像@VincentG 提到的,您需要将 Sub Dataoragnise() 更改为 Sub Dataoragnise(TeamName as string)。另外,您实际上是否有名为“TeamName”的工作表?或者您是否要访问以 TeamName 命名的工作表?如果是后者,请丢失“”,只需键入 Sheets(TeamName)

标签: vba excel loops subroutine


【解决方案1】:

试试这样的:

Sub Looproutine()

    Dim TeamName              As String

    For i = 4 To 12

        TeamName = Sheets("Parameter").Range("A" & i).Value    'identify the location

        Call Dataorganise(TeamName)    ' Call subroutine

    Next i

End Sub

Sub Dataorganise(TeamName As String)
    Dim ws                    As Worksheet
    Dim pt as pivottable
    Set ws = Sheets(TeamName)
    Sheets("Data").Range("A:X").Copy Destination:=ws.Range("A1")
    With ws
        .AutoFilterMode = False
        .Columns("R:R").AutoFilter Field:=1, Criteria1:=TeamName
        .Range("A:J,L:Q,T:X").EntireColumn.Delete Shift:=xlToLeft
        .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
        .Range("E1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        .Columns("A:D").Delete Shift:=xlToLeft
    End With
    Set pt = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
                                SourceData:="'" & TeamName & "'!" & ws.Range("A1").CurrentRegion.Address(ReferenceStyle:=xlR1C1), _
                                Version:=xlPivotTableVersion12).CreatePivotTable( _
                                TableDestination:="'" & TeamName & "'!R1C5", _
                                DefaultVersion:=xlPivotTableVersion12)

【讨论】:

  • 我在数据透视表中的“范围 ("A1") 部分收到错误
  • 抱歉 - 我刚刚修正了那个错字。
  • 成功了,谢谢!在下一部分中,我引用了“数据透视表 7”,但我看到你摆脱了它。我用什么代替它? Sheets(TeamName).Select cells(1, 5).Select ActiveWorkbook.ShowPivotTableFieldList = True With ActiveSheet.PivotTables("PivotTable7").PivotFields( _ "Variable A") .Orientation = xlRowField .Position = 1 End With >
  • 我添加了一个pt 变量。用它代替ActiveSheet.PivotTables("PivotTable7")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多