Menggunakan VBScript untuk mengubah warna latar belakang pada grafik Excel

Saya menggunakan VBScript untuk membuat plot sebar garis dari kolom data di Excel 2003. Hasilnya baik-baik saja, tapi saya ingin mengedit beberapa properti bagan, seperti warna latar belakang dan label sumbu. Saya melakukan ini secara manual di Excel dan mencatat makro, yang memberi saya kode VBA berikut:

ActiveChart.PlotArea.Select
With Selection.Border
    .ColorIndex = 16
    .Weight = xlThin
    .LineStyle = xlContinuous
End With
With Selection.Interior
    .ColorIndex = 2
    .PatternColorIndex = 1
    .Pattern = xlSolid
End With
ActiveChart.Axes(xlCategory).Select
With Selection.TickLabels
    .ReadingOrder = xlContext
    .Orientation = 45
End With
ActiveChart.Axes(xlValue).AxisTitle.Select
With Selection
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
    .ReadingOrder = xlContext
    .Orientation = xlHorizontal
End With
ActiveChart.ChartArea.Select
End Sub

Ini terlihat bagus untuk VBA, tapi saya mengalami masalah saat mengonversinya ke VBScript. Bagaimana saya harus memulainya? Ini kode saya saat ini:

Set objChart = objExcel.Charts.Add()
With objExcel.ActiveChart
    .ChartType = xlXYScatterLinesNoMarkers
    .SeriesCollection(1).Interior.Color = RGB(255, 0, 0)
    .HasTitle = True
    .ChartTitle.Text = "usage"
    .Axes(xlCategory, xlPrimary).HasTitle = True
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Time"
    .Axes(xlValue, xlPrimary).HasTitle = True
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "units"
    .HasLegend = False
    .SetSourceData objWorksheet.Range("E1","F" & LastRow), xlColumns
    .SetSourceData objWorksheet.Range("E1:F200"), xlColumns
End With

Baris .SeriesCollection(1).Interior.Color = RGB(255, 0, 0) menyebabkan kesalahan: "Tidak dapat menyetel properti warna kelas Interior". Saya kira saya tidak boleh memanggil .SeriesCollection tepat di bawah .Activechart. Ada saran? Pada titik ini saya akan senang untuk dapat mengubah warna latar belakang grafik menjadi putih, dan memutar label sumbu x 45 derajat.

Terima kasih sebelumnya.


person vicjun    schedule 17.07.2013    source sumber
comment
VBA itu terlihat sangat mirip dengan VBScript... apakah Anda mencoba : Dengan objExcel.ActiveChart ‹semua kode vba Anda di sini› diakhiri dengan?   -  person Papasmile    schedule 17.07.2013
comment
Jika Anda menggunakan VBScript, Anda tidak dapat menggunakan konstanta apa pun seperti xlCategory: Excel VBA mengetahui nilainya, namun tidak tersedia di VBScript. Anda dapat menemukan nilai numerik di Object Browser (F2 di VBEditor)   -  person Tim Williams    schedule 17.07.2013
comment
... atau cukup ketik ?xlCategory dan tekan Enter di Jendela Segera.   -  person Jon Peltier    schedule 20.08.2015


Jawaban (3)


Ketertiban itu penting. Sebelum Anda dapat mengakses suatu seri, Anda harus menambahkannya terlebih dahulu. Hal yang sama berlaku untuk properti lainnya, seperti HasTitle. Selain itu, garis diagram XY tidak memiliki warna interior, yang hanya tersedia dalam bagan yang memperlihatkan interior (seperti diagram lingkaran atau diagram kolom). Mungkin yang Anda maksud adalah warna tepi di sini. Ubah kode Anda menjadi ini:

Set objChart = objExcel.Charts.Add
With objChart
  ' define chart type
  .ChartType = xlXYScatterLinesNoMarkers

  ' define data
  .SetSourceData objWorksheet.Range("E1:F200"), xlColumns

  ' format chart
  .SeriesCollection(1).Border.Color = RGB(255, 0, 0)
  .PlotArea.Interior.Color = RGB(255, 255, 255)
  '.PlotArea.Interior.ColorIndex = 2  'alternative
  .HasTitle = True
  .ChartTitle.Text = "usage"
  .Axes(xlCategory, xlPrimary).HasTitle = True
  .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Time"
  .Axes(xlValue, xlPrimary).HasTitle = True
  .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "units"
  .HasLegend = False
End With

dan itu akan berfungsi, asalkan Anda telah mendefinisikan konstanta simbolik.

person Ansgar Wiechers    schedule 17.07.2013
comment
Terima kasih banyak, sekarang berfungsi untuk mengubah warna garis. Tapi saya ingin warna latar belakang grafik menjadi putih, bukan garis. Saya juga ingin memiringkan label sumbu x 45 derajat. - person vicjun; 18.07.2013
comment
Warna latar belakang grafik dapat diubah melalui .ChartArea.Color, warna latar belakang grafik dapat diubah melalui .PlotArea.Color. Anda juga dapat menggunakan .ColorIndex alih-alih .Color untuk menetapkan warna yang diindeks (mis. 2 untuk putih). - person Ansgar Wiechers; 18.07.2013
comment
Saya mendapatkan pesan kesalahan: Objek tidak mendukung properti atau metode ini: 'PlotArea.Color' . Saya ingat pernah bereksperimen dengan metode ini sebelumnya, mendapatkan hasil yang serupa... Apakah saya harus mendeklarasikan hal lain terlebih dahulu? Terima kasih. - person vicjun; 18.07.2013
comment
Salahku. Ini .PlotArea.Interior.Color, bukan .PlotArea.Color. - person Ansgar Wiechers; 19.07.2013

Ada dua hal:

  1. mengatur area plot ke warna tertentu

lihat contoh

'set plotting area to dark gray color
ActiveChart.PlotArea.Select
With Selection.Format.Fill
    .Visible = msoTrue
    .ForeColor.ObjectThemeColor = msoThemeColorBackground1
    .ForeColor.TintAndShade = 0
    .ForeColor.Brightness = -0.5
    .Solid
End With

pikiran .ForeColor.ObjectThemeColor = msoThemeColorBackground1

  1. Mengatur area umum grafik ke warna tertentu (maksud saya seluruh area grafik, kecuali area plotting)

    'atur warna Area Bagan menjadi abu-abu Dengan ActiveSheet.Shapes("NameChart").Fill .Visible = msoTrue .ForeColor.ObjectThemeColor = msoThemeColorBackground1 .ForeColor.TintAndShade = 0 .ForeColor.Brightness = -0.5 .Solid End With

Dimana nama Chart telah ditetapkan sebagai "NameChart" sebelumnya pada kode VBA, saat membuat Chart

  'set the name of the Chart to "Cooper" to reference it later
ActiveChart.Parent.Name = "NameChart"

pikiran .ForeColor.ObjectThemeColor = msoThemeColorBackground1

Jika jawaban saya membantu Anda, silakan beri peringkat. Terima kasih.

person George    schedule 07.03.2016

Satu-satunya cara yang saya tahu adalah menggunakan VBScript atau Python. Di bawah ini adalah VBScript yang dapat membantu Anda. Anda memerlukan pernyataan if untuk membuat Tanggal menjadi merah atau tidak.

Saya akan menggunakan rumus untuk melakukan ini dan menyalinnya ke semua sel di baris yang Anda gunakan untuk tanggal tersebut.

Ada link ke indeks warna di komentar.

Simpan sebagai ExcelDB.vbs

' Validate Variables.
Dim fso, strUserName , oShell

' Create an instance of the Scripting Shell
Set oShell = CreateObject( "WScript.Shell" )

' Get the Username from The Shell enviroment
strUserName = oShell.ExpandEnvironmentStrings( "%USERNAME%" )

' Create a File System Object named "fso".
Set fso = CreateObject("Scripting.FileSystemObject")

' Create Instance of Excel Object
Set objExcel = CreateObject("Excel.Application")

' Hide Alert messages
objExcel.DisplayAlerts = False

' Make Excel File Visible/Hidden (True=Visible , False = Hidden)
objExcel.Visible = True 

' Create a Workbook with 3 sheets named Retired, Styles and Patts
Set objWorkbook = objExcel.Workbooks.Add
objExcel.Activeworkbook.Sheets(1).Name = "Retired"
objExcel.Activeworkbook.Sheets(2).Name = "Styles"
objExcel.Activeworkbook.Sheets(3).Name = "Patts"

' Freeze header row (The first row will remain during sorting)

With objExcel.ActiveWindow
     .SplitColumn = 0
     .SplitRow = 1
End With
objExcel.ActiveWindow.FreezePanes = True


' Define Names for lookup tables.
objExcel.ActiveWorkbook.Names.Add "patterns", "=patts!$A$1:$b$150"
objExcel.ActiveWorkbook.Names.Add "styles", "=Styles!$A$1:$H$100"
objExcel.ActiveWorkbook.Names.Add "widths", "=Styles!$B$2:$B$101"

'Define Values for Cells

objExcel.Cells(1,1).Interior.ColorIndex = 3
objExcel.Cells(1,1).Value = "Red Background"                'Cell A1 Value
objExcel.Cells(2,1).Value = "GreenBorder"                   'Cell A2 Value
objExcel.Cells(2,2).Value = "1"
objExcel.Cells(2,3).Value = "1"
objExcel.Cells(2,4).Value = "1"
objExcel.Cells(2,5).Value = "12"
objExcel.Cells(2,6).Value = "12"
'Format Retired Cells

objExcel.Sheets("Retired").Cells(7, 2).Numberformat = "@"
objExcel.Worksheets("Retired").Cells(2,1).Borders.Color = RGB(0,255,0)
objExcel.Worksheets("Retired").Columns("A:A").Columnwidth = 20
objExcel.Worksheets("Retired").Columns("B:C").Columnwidth = 5
objExcel.Worksheets("Retired").Columns("D:D").Columnwidth = 15
objExcel.Worksheets("Retired").Columns("E:E").Columnwidth = 5
objExcel.Worksheets("Retired").Columns("F:H").columnwidth = 15
objExcel.Worksheets("Retired").Columns("I:I").Columnwidth = 5
objExcel.Worksheets("Retired").Columns("B").NumberFormat = "000"
objExcel.Worksheets("Retired").Columns("C").NumberFormat = "00"

'get a cell value and set it to a variable
row2Cell2 = objExcel.Cells(2,2).Value

'save the new excel file (make sure to change the location) 'xls for 2003 or earlier
objWorkbook.SaveAs "C:\Users\"&strUserName&"\Desktop\CreateExcel.xlsx" 

'close the workbook
'objWorkbook.Close 

'exit the excel program
'objExcel.Quit

Baris berikut adalah cara mengubah warna sel excel dimana sel(1,1) = sel A1

objExcel.Cells(1,1).Interior.ColorIndex = 3
person Michael Mulvey    schedule 26.11.2019
comment
docs.microsoft.com/en-us/office/vba/ api/excel.colorindex - person Michael Mulvey; 26.11.2019
comment
ablebits.com/office-addins-blog/2013/10/18/ - person Michael Mulvey; 26.11.2019