【问题标题】:I have a file with multiple sheets, and I want to create the same graph on each sheet, with based on that sheet's data我有一个包含多张工作表的文件,我想根据该工作表的数据在每张工作表上创建相同的图表
【发布时间】:2023-02-26 09:07:08
【问题描述】:

每个月,我都会收集统计性能数据,并将这些数据导出到 Excel 文件中。每个文件包含数百人的数据,每个人执行特定的工作。大约有 10 种不同的工作。每个作业都有大约 50 个不同的衡量指标。

问题在于这些工作是由不同数量的人执行的。因此,每个图表的水平轴上会有不同数量的名称。

我有两个问题:

  1. 如何确定每张纸上每个图表的范围。

  2. 如何循环选择每个工作表以创建图形。

    结构看起来像这样

    多个 excel 文件 -> 有一个数据表 -> 首先将修改此表以使所有性能指标标准化 -> 然后为每个作业创建第一个表的副本,然后创建所有其他作业新工作表将被隐藏 -> 然后我在每个单独的工作表上创建一个堆积条形图。

    我想知道是否实际选择了工作表的“For Each WS”。如果没有,如何解决。 此外,LR = Cells(Rows.Count, 1).End(X1Up).Row 必须重新配置为仅考虑可见单元格。因为我隐藏了我不想在图表中出现的人。

    SUB CHARTS()
    
    DIM LR As Long
    
    Sheets("A").Select  
    Dim ALR As Long
    With ActiveSheet
    ALR = Cells(Rows.Count, 1).End(xlUp).Row
    End with
    Sheets("B").Select
    Dim BLR As Long
    With ActiveSheet
    ALR = Cells(Rows.Count, 1).End(xlUp).Row
    End With
    
    For Each WS in ThisWorkbook.Worksheets
    IF(WS.Name ="A") THEN
    LR = ALR
    End IF
    IF (WS.Name ="B") THEN
    LR = BLR
    End IF
    
    With ActiveSheet.ChartObjects.Add _
    (Left:=850, Width:=1536, Top:=0, Height:=864)
    .Chart.ChartType = xlColumnStacked
    End With
    
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.FullSeriesCollection(1).Name = "=" & ActiveSheet.Name & "! $EY$1"
    ActiveChart.FullSeriesCollection(1).Values = "=" & ActiveSheet.Name & "!$EY$2:$EY$" & LR
    
    NEXT WS
    
    

【问题讨论】:

    标签: excel vba for-loop bar-chart


    【解决方案1】:

    尝试这个

        Dim LR As Long
    
        Sheets("A").Select
        Dim ALR As Long
        With ActiveSheet
            ALR = Cells(Rows.Count, 1).End(xlUp).Row
        End With
        Sheets("B").Select
        Dim BLR As Long
        With ActiveSheet
            BLR = Cells(Rows.Count, 1).End(xlUp).Row 'This was incorrect, was ALR instead of BLR
        End With
        
        For Each ws In ThisWorkbook.Worksheets
            
            ws.Activate 'ws becomes the ActiveSheet
            
            If (ws.Name = "A") Then
                LR = ALR
            End If
            If (ws.Name = "B") Then
                LR = BLR
            End If
            
            With ActiveSheet.ChartObjects.Add _
            (Left:=850, Width:=1536, Top:=0, Height:=864)
            .Chart.ChartType = xlColumnStacked
            End With
            
            ActiveSheet.ChartObjects("Chart 1").Activate
            ActiveChart.SeriesCollection.NewSeries
            ActiveChart.FullSeriesCollection(1).Name = "=" & ActiveSheet.Name & "! $EY$1"
            ActiveChart.FullSeriesCollection(1).Values = ActiveSheet.Range("$EY$2:$EY$" & LR).SpecialCells(xlCellTypeVisible)
        Next ws
    

    【讨论】:

      猜你喜欢
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      相关资源
      最近更新 更多