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 ,我不确定这是否有必要。

链接地址: http://www.djcxy.com/p/65209.html

上一篇: OLE: Inaccessible due to its protection level.

下一篇: Facebook Login on a Test App