OLE:由于其保护级别而无法访问。
我试图用VB在Excel表格中绘制图表。
所以现在我遵循这里给出的指示
1 - 我在VS2010中创建了一个新的VB项目,名为Excelgraph。
2-默认情况下,我得到了Form1.vb [设计]。
3-在此窗体上,我通过从工具箱中拖动它创建了一个按钮。
4 - 我加倍点击它并打开新的Form1.vb。
5,我删除了这个文件中自动生成的所有东西,例如Form1.vb文件,并粘贴下面的代码:
更新的代码
这是另一个代码,是最新的,与Visual Basic 6.0兼容。
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim oXL As Object ' Excel application
Dim oBook As Object ' Excel workbook
Dim oSheet As Object ' Excel Worksheet
Dim oChart As Object ' Excel Chart
Dim iRow As Integer ' Index variable for the current Row
Dim iCol As Integer ' Index variable for the current Row
Const cNumCols = 10 ' Number of points in each Series
Const cNumRows = 2 ' Number of Series
ReDim aTemp(0 To cNumRows, 0 To cNumCols)
'Start Excel and create a new workbook
oXL = CreateObject("Excel.application")
oBook = oXL.Workbooks.Add
oSheet = oBook.Worksheets.Item(1)
' Insert Random data into Cells for the two Series:
Randomize(Now().ToOADate())
For iRow = 1 To cNumRows
For iCol = 1 To cNumCols
aTemp(iRow, iCol) = Int(Rnd() * 50) + 1
Next iCol
Next iRow
oSheet.Range("A1").Resize(cNumRows, cNumCols).Value = aTemp
'Add a chart object to the first worksheet
oChart = oSheet.ChartObjects.Add(50, 40, 300, 200).Chart
oChart.SetSourceData(Source:=oSheet.Range("A1").Resize(cNumRows, cNumCols))
' Make Excel Visible:
oXL.Visible = True
oXL.UserControl = True
End Sub
End Class
更新
我更新了如上所示的代码。
错误
'aTemp' is not declared. It may be inaccessible due to its protection level.
c:usersybf4 documentsvisual studio 2010ProjectsExcelgraph2
Excelgraph2Form1.vb
还有两个错误,我设法删除。 我如何删除此错误?
我在visual studio 2010上编译上面的代码,Office是Office 2007。
一个简单的,微不足道的程序揭示了错误是我怀疑 - 你不能改变不存在的东西的大小!
正如Derek所说,您需要将ReDim更改为Dim - 或者您需要首先声明它。
失败:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Const cNumCols = 10 ' Number of points in each Series
Const cNumRows = 2 ' Number of Series
ReDim aTemp(0 To cNumRows, 0 To cNumCols)
End Sub
关:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Const cNumCols = 10 ' Number of points in each Series
Const cNumRows = 2 ' Number of Series
Dim aTemp
ReDim aTemp(0 To cNumRows, 0 To cNumCols)
End Sub
关:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Const cNumCols = 10 ' Number of points in each Series
Const cNumRows = 2 ' Number of Series
Dim aTemp(0 To cNumRows, 0 To cNumCols)
End Sub
盘旋在温度计上应该告诉你这一点 - 它也应该用蓝色的波浪线表示问题。
我这么做已经很长时间了,但只是看着我怀疑你需要改变的代码:
ReDim aTemp(0 To cNumRows, 0 To cNumCols)
至:
Dim aTemp(0 To cNumRows, 0 To cNumCols)
ReDim用于在对数组进行了标注后对数组进行重新维度定义(使用Dim语句)
这是非常古老的代码(它是用于VB3的,所以在第一个VB.Net和Excel 5之前已经过了4代)
不过,我相信你的代码应该运行良好,如果你只是注释掉了两行代码。
添加到工作表中的条目的随机性可能会有所不同,但由于无论如何(使用Rnd()
都会替换该代码,因此它应该没有关系。 (我假设你的目的不是生成随机图)
至于DoEvents
,我不确定这是否有必要。