Ссылка на первый лист 1 (в форме указателя) при создании диаграммы - PullRequest
0 голосов
/ 18 марта 2011

Хорошо, я новичок в VBA и макросах, но быстро учусь.

Я пытаюсь создать макрос для быстрой перестройки и отображения данных.Я буду применять тысячи файлов с разными именами вкладок в зависимости от имени файла.Я понял, что можно ссылаться на вкладку через ее «индексный номер», и это сработало при сортировке данных.

Теперь, когда я пытаюсь создать линейный график, я не знаю, как ссылаться наНазвание вкладки.Я пытаюсь выбрать диапазон.Я изменил его обратно на «Sheet1» и планировал изменить имя вкладки каждого файла на «Sheet1», прежде чем я узнал о «Index Number».Это совершенно неэффективно, но вот как выглядит часть кода для создания моей диаграммы:

ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("'Sheet1'!$Z$2:$AA$25")
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Name = "='Sheet1'!$C$1"
ActiveChart.SeriesCollection(1).Values = "='Sheet1'!$AA$2:$AA$25"
ActiveChart.SeriesCollection(1).XValues = "='Sheet1'!$Z$2:$Z$25"
ActiveChart.ApplyLayout (3)

Я предполагаю, что хочу заменить все листы Sheet1 каким-то индексным номером, но я могуне понять это!Я пробовал умножать случайные комбинации Sheets (1) и что нет, но так как я не очень разбираюсь в коде VBA, я потерялся в темноте.

Я ценю любой ответ!спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 19 марта 2011

Это будет работать.Ваш код содержал много повторяющихся ключевых слов;обратите внимание, что я очистил его с помощью оператора With.Кроме того, все указано в верхней части кода: где находятся данные и т. Д.

Неправильно полагаться на индекс Sheet или SeriesCollection, слепо полагая, что это (1).Я гарантирую, что это все испортит для вас в какой-то момент.Лучше сохранить ссылки на эти объекты, как это сделано ниже, например, Set serMyseries = .SeriesCollection.NewSeries, а затем работать на serMyseries, а не на SeriesCollection(1).

Все операторы Dim требуются только при наличии Option Explicit вверху вашего кода.Если вы не используете Option Explicit, эти строки можно удалить.(Но Option Explicit - это хорошая практика .)

Dim shtData As Worksheet
Dim chtMyChart As Chart
Dim serMyseries As Series
Dim rngName As Range
Dim rngMyValues As Range
Dim rngMyXValues As Range

' What sheet is the data on?
Set shtData = Worksheets("Sheet1") ' Or whatever it's called on the tab

' Where is the data?
Set rngName = shtData.Range("C1")
Set rngMyValues = shtData.Range("AA2:AA25")
Set rngMyXValues = shtData.Range("Z2:Z25")

With shtData
    .Activate

    ' Add a chart.
    Set chtMyChart = .Shapes.AddChart
    With chtMyChart
        .ChartType = xlLineMarkers
        ' Add the series.
        Set serMyseries = .SeriesCollection.NewSeries
        With serMyseries
            .Name = rngName
            .Values = rngMyValues
            .XValues = rngMyXValues
        End With
        .ApplyLayout (3)
    End With
End With

Следующие две строки кода были бесполезны (первая строка создает серию, вторая строка немедленно удаляет ее), поэтому я удалил их.

ActiveChart.SetSourceData Source:=shtData.Range("Z2:AA25")
ActiveChart.SeriesCollection(1).Delete
0 голосов
/ 19 марта 2011

Аманда,

Я изменил ваш код, чтобы ссылаться на первый лист в книге по его индексу.Этот код позволит вам применить диаграмму к самому первому листу вашей рабочей книги независимо от того, как она была названа.Это достигается с помощью листов (x), где «x» - это лист, на который вы хотите сослаться.Первый лист в вашей рабочей тетради традиционно "1".

ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Sheets(1).Range("Z2:AA25")
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Name = Sheets(1).Range("C1")
ActiveChart.SeriesCollection(1).Values = Sheets(1).Range("AA2:AA25")
ActiveChart.SeriesCollection(1).XValues = Sheets(1).Range("Z2:Z25")
ActiveChart.ApplyLayout (3)

Надеюсь, это поможет,

Джон

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