VBA-方法“;加上「;图表对象的排序失败

VBA-方法“;加上「;图表对象的排序失败,vba,excel,Vba,Excel,我正在尝试创建一个函数,该函数将通过电子邮件发送工作表的一部分,代码如下: Function PictureToHTML(wbk, Namesheet, nameRange, imgFile) wbk.Activate Worksheets(Namesheet).Activate nameRange = "C7:C10" Set Plage = wbk.Worksheets(Namesheet).Range(nameRange) Plage.Copy

我正在尝试创建一个函数,该函数将通过电子邮件发送工作表的一部分,代码如下:

Function PictureToHTML(wbk, Namesheet, nameRange, imgFile)

    wbk.Activate
    Worksheets(Namesheet).Activate

    nameRange = "C7:C10"

    Set Plage = wbk.Worksheets(Namesheet).Range(nameRange)
    Plage.CopyPicture

    TempFilePath = Environ$("temp") & "\" & imgFile

    Set newchart = wbk.Worksheets(Namesheet).ChartObjects.Add(Plage.Left, Plage.Top, Plage.Width, Plage.Height)

    With newchart
        .Activate
        .Chart.parent.Border.LineStyle = 0
        .Chart.Paste
        .Chart.Export TempFilePath, "PNG"
    End With
    Worksheets(Namesheet).ChartObjects(Worksheets(Namesheet).ChartObjects.Count).Delete
    Set Plage = Nothing

    PictureToHTML = "<br><B>" & Namesheet & ":</B><br>" _
                & "<img src='cid:" & imgFile & "'>"

End Function
完全错误:

运行时错误“-2147417878(80010108)”: 对象“ChartObjects”的方法“Add”失败

谁能告诉我我的错误在哪里? 更新代码:

Function PictureToHTML(wbk, Namesheet, nameRange, imgFile)

    Dim WeightsSheet As Worksheet
    Dim newChart As ChartObject
    wbk.Activate

    Set WeightsSheet = wbk.Worksheets(Namesheet)

    Set Plage = wbk.Worksheets(Namesheet).Range(nameRange)
    Plage.CopyPicture

    TempFilePath = Environ$("temp") & "\" & imgFile
    Set newChart = WeightsSheet.ChartObjects.Add(Plage.Left, Plage.Top, Plage.Width, Plage.Height)

    With newChart
        .Activate
        .Chart.parent.Border.LineStyle = 0
        .Chart.Paste
        .Chart.Export TempFilePath, "PNG"
    End With
    WeightsSheet.ChartObjects(WeightsSheet.ChartObjects.Count).Delete
    Set Plage = Nothing

    PictureToHTML = "<br><B>" & Namesheet & ":</B><br>" _
                & "<img src='cid:" & imgFile & "'>"

End Function
函数PictureToHTML(wbk、名称表、名称范围、imgFile)
将权重表设置为工作表
将newChart设置为ChartObject
wbk.激活
设置权重表=wbk。工作表(名称表)
Set Plage=wbk.Worksheets(名称表).Range(名称范围)
复制图片
TempFilePath=Environ$(“temp”)和“\”imgFile
Set newChart=WeightsSheet.ChartObjects.Add(Plage.Left、Plage.Top、Plage.Width、Plage.Height)
与纽查特
.激活
.Chart.parent.Border.LineStyle=0
.Chart.Paste
.Chart.Export TempFilePath,“PNG”
以
WeightsSheet.ChartObjects(WeightsSheet.ChartObjects.Count)。删除
设为零
PictureToHTML=“
”&名称表(&N):
“_ & "" 端函数
未明确声明变量。虽然在这里这应该不是问题,但由于应将
newChart
视为
变体
,请尝试在
wbk.Activate
之前的行中写入
Dim newChart as ChartObject

然后单独调用像这个一样小的东西:

Sub TestMe()
    Dim newChart As ChartObject
    Set newChart = Worksheets(1).ChartObjects.Add(100, 100, 100, 100)
End Sub
然后开始添加
Plage.Left、Plage.Top、Plage.Width、Plage.Height,而不是硬编码参数(100)。然后再添加
wbk.Worksheets(Namesheet)
,看看它是否有效


不声明变量实际上是一种糟糕的做法。如果你全部申报,这是有效的。在这个具体的小示例中,问题在于
nameRange
变量:

Option Explicit

Sub TestMe()
    Debug.Print PictureToHTML(ThisWorkbook, "Sheet1", Range("A1:E20"), "probably.png")
End Sub

Function PictureToHTML(wbk As Workbook, Namesheet As String, _
                        nameRange As Range, imgFile As String) As String

    Dim WeightsSheet As Worksheet
    Dim newChart As ChartObject
    Dim Plage As Range
    Dim tempFilePath As String

    Set WeightsSheet = wbk.Worksheets(Namesheet)

    Set Plage = wbk.Worksheets(Namesheet).Range(nameRange.Address)
    Plage.CopyPicture

    tempFilePath = Environ$("temp") & "\" & imgFile
    Set newChart = WeightsSheet.ChartObjects.Add( _
                        Plage.Left, Plage.Top, Plage.Width, Plage.Height)

    With newChart
        .Chart.Parent.Border.LineStyle = 0
        .Chart.Paste
        .Chart.Export tempFilePath, "PNG"
    End With

    WeightsSheet.ChartObjects(WeightsSheet.ChartObjects.Count).Delete
    PictureToHTML = "<br><B>" & Namesheet & ":</B><br>" & "<img src='cid:" & imgFile & "'>"

End Function
选项显式
子TestMe()
Debug.PrintPictureToHTML(此工作簿,“Sheet1”,范围(“A1:E20”),“大概是.png”)
端接头
函数PictureToHTML(wbk作为工作簿,名称表作为字符串_
名称范围作为范围,imgFile作为字符串)作为字符串
将权重表设置为工作表
将newChart设置为ChartObject
暗斑作为射程
Dim tempFilePath作为字符串
设置权重表=wbk。工作表(名称表)
Set Plage=wbk.Worksheets(Namesheet).Range(nameRange.Address)
复制图片
tempFilePath=Environ$(“temp”)和“\”imgFile
Set newChart=WeightsSheet.ChartObjects.Add(_
左,左,右,右,右,左,左,左,左,左,左,左,左,左,左,左
与纽查特
.Chart.Parent.Border.LineStyle=0
.Chart.Paste
.Chart.Export tempFilePath,“PNG”
以
WeightsSheet.ChartObjects(WeightsSheet.ChartObjects.Count)。删除
PictureToHTML=“
”&名称表&:
“&” 端函数

作为下一个步骤,考虑阅读Outlook显式文档:


你得到的确切错误是什么?@RikSportel更新了帖子。看起来像是
wbk。工作表(1)
是解决方案。。。为什么我的版本似乎不起作用?我的名称表的值是“权重”,这是一个存在于我的工作簿中的表。@ÉvaristeGalois-不知道。一般来说,代码缺少变量的显式声明,并且使用了大量的Active和Select,因此错误可能就在那里。。。请看答案中的两个链接,它们非常有用。我添加了一些更新的代码,其中我坚持显式声明变量的思想。看起来我仍然会遇到同样的错误,可能是因为我的工作簿使用了Activate?在函数的上下文中,我如何替换它?@evaristegalois-错误来自范围变量
nameRange
。请参见答案中的代码。
Option Explicit

Sub TestMe()
    Debug.Print PictureToHTML(ThisWorkbook, "Sheet1", Range("A1:E20"), "probably.png")
End Sub

Function PictureToHTML(wbk As Workbook, Namesheet As String, _
                        nameRange As Range, imgFile As String) As String

    Dim WeightsSheet As Worksheet
    Dim newChart As ChartObject
    Dim Plage As Range
    Dim tempFilePath As String

    Set WeightsSheet = wbk.Worksheets(Namesheet)

    Set Plage = wbk.Worksheets(Namesheet).Range(nameRange.Address)
    Plage.CopyPicture

    tempFilePath = Environ$("temp") & "\" & imgFile
    Set newChart = WeightsSheet.ChartObjects.Add( _
                        Plage.Left, Plage.Top, Plage.Width, Plage.Height)

    With newChart
        .Chart.Parent.Border.LineStyle = 0
        .Chart.Paste
        .Chart.Export tempFilePath, "PNG"
    End With

    WeightsSheet.ChartObjects(WeightsSheet.ChartObjects.Count).Delete
    PictureToHTML = "<br><B>" & Namesheet & ":</B><br>" & "<img src='cid:" & imgFile & "'>"

End Function