Vb.net OLE:由于其保护级别而无法访问;

Vb.net OLE:由于其保护级别而无法访问;,vb.net,visual-studio-2010,ole,Vb.net,Visual Studio 2010,Ole,我正在尝试用VB在excel表格中绘制图表 因此,现在我按照给出的说明进行操作 1-我在VS2010中启动了一个新的VB项目,名为Excelgraph 2-默认情况下,我得到了Form1.vb[Design] 3-在这个表单上,我通过从工具箱中拖动按钮创建了一个按钮 4-我双击它,新Form1.vb打开 5-我删除了此文件I,e Form1.vb文件中自动生成的所有内容,并粘贴了以下代码: 更新代码 这是另一个代码,也是最新的代码,与Visual Basic 6.0兼容 Public Clas

我正在尝试用VB在excel表格中绘制图表

因此,现在我按照给出的说明进行操作

1-我在VS2010中启动了一个新的VB项目,名为Excelgraph

2-默认情况下,我得到了Form1.vb[Design]

3-在这个表单上,我通过从工具箱中拖动按钮创建了一个按钮

4-我双击它,新Form1.vb打开

5-我删除了此文件I,e 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:\users\ybf4 \documents\visual studio 2010\Projects\Excelgraph2
     \Excelgraph2\Form1.vb
我设法消除了另外两个错误。如何删除此错误


我正在VisualStudio2010上编译上述代码,Office是Office2007

这是非常古老的代码(适用于VB3,比第一代VB.Net和Excel 5早4代)

但是,如果您只注释掉所示的两行代码,我相信您的代码应该运行良好

添加到工作表中的条目的随机性可能有所不同,但由于您仍将替换该代码(在使用
Rnd()
的地方),因此这不重要。(我假设您的目的不是生成随机图)


至于
DoEvents
,我不确定这是否有必要。

我这么做已经有很长时间了,但只要看看代码,我怀疑您需要更改:

ReDim aTemp(0 To cNumRows, 0 To cNumCols) 
致:


ReDim用于在数组被标注尺寸后对其重新标注尺寸(使用Dim语句)

一个简单、琐碎的程序显示了我所怀疑的错误-您无法更改不存在的对象的大小

正如德里克所说,您需要将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
通过:

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
通过:

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

将鼠标悬停在aTemp上时,应该会告诉您这一点-它还应该用一条蓝色的斜线划线,以表示存在问题。

您正在遵循为Visual Basic 3和Excel 5编写的指南?现在我正在遵循最新的代码。有什么建议吗?我想我必须改变aTemp的范围。但是怎么做呢?如果你做的是cpu密集型的事情,GUI就会冻结。他解决了那个问题。我认为,用一种丑陋的语言来解决一个丑陋的问题是一个丑陋的解决方案。但还是有一个解决方案。:)