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