从命令按钮vba传递工作簿

时间:2018-02-14 10:06:04

标签: excel vba excel-vba

我对VBA中令我困惑的事情有疑问。我有一个命令按钮,单击时我想将变量=设置为工作簿对象,然后将此对象传递给另一个子。我无法理解为什么我无法将其传递给潜艇,我无法理解为什么我所做的事情无法奏效。代码如下:

Private Sub CommandButton2_Click()
Workbooks.Open Filename:=TextBox1.Text
Set wb = ActiveWorkbook

CreateChart wb
End Sub

Sub CreateChart(ByRef wb As Workbook)
'PURPOSE: Create a chart (chart dimensions are not required)

Dim rng As Range
Dim cht As Object

'Your data range for the chart
  Set rng = wb.ActiveSheet.Range("A24:A27")

'Create a chart
  Set cht = ActiveSheet.Shapes.AddChart2

'Give chart some data
  cht.Chart.SetSourceData Source:=rng

'Determine the chart type
  cht.Chart.ChartType = xlXYScatterLines

End Sub

NB我找到了一种解决方法,即将工作簿设置在另一个子工作簿中,但是想了解它为什么不以这种方式工作。请有人可以提供建议吗?

三江源。

2 个答案:

答案 0 :(得分:1)

CommandButton2_Click()中,您未声明wb。所以它是Variant数据类型。这与ByRef wb As Workbook不兼容。

所以添加

Dim wb As Workbook

为避免此类更多错误,请将Option Explicit放在每个模块的顶部。

它强制执行变量声明并在编译时报告未声明或拼写错误的变量/常量。 要在新模块中自动执行此操作,请在VBA编辑器中设置Require Variable Declaration选项。

修改:演示

'Option Explicit

Sub Demo_Fail()
    Set wb = ActiveWorkbook
    CreateChart wb      ' Compile error: ByRef argument type mismatch
End Sub

Sub Demo_Success()
    Dim wb As Workbook
    Set wb = ActiveWorkbook
    CreateChart wb
End Sub

Sub CreateChart(ByRef wb As Workbook)
    Debug.Print wb.Name
End Sub

答案 1 :(得分:1)

这是因为您没有明确声明<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <remove name="YourRuleName"/> <rule name="YourSubFolderRuleName" patternSyntax="Wildcard"> <match url="*"/> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/> </conditions> <action type="Rewrite" url="index.php"/> </rule></rules> </rewrite> </system.webServer> </configuration> 变量,因此隐式假设为wb类型,而Variant接受CreateChart类型参数

使用:

Workbook

但你甚至可以将其缩短为:

Private Sub CommandButton1_Click()
    Dim wb As Workbook ' declare wb of Workbook type

    Workbooks.Open Filename:=TextBox1.Text
    Set wb = ActiveWorkbook

    CreateChart wb
End Sub