Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试运行代码复制数据并发送电子邮件后Excel没有响应_Excel_Vba_Email - Fatal编程技术网

尝试运行代码复制数据并发送电子邮件后Excel没有响应

尝试运行代码复制数据并发送电子邮件后Excel没有响应,excel,vba,email,Excel,Vba,Email,基本上,我有7个可以填充文本的单元格(b2、b4、b6、b8、b10、b12和b14)。我想修改代码,检查每个单元格是否有值,并在电子邮件中只发送有值的单元格。出于格式化的目的,粘贴到电子邮件中的单元格之间需要有一个空单元格,并且单元格需要保持原来的顺序,只是没有不必要的空白单元格 我从来没有正式学习过VBA,我只是自学了一个案例一个案例的场景,所以可能有一个简单的解决方案,我错过了。通常我可以调试并发现问题,但在这种情况下,Excel会完全冻结并变成“无响应”。我有一种感觉,这意味着我在某个地

基本上,我有7个可以填充文本的单元格(b2、b4、b6、b8、b10、b12和b14)。我想修改代码,检查每个单元格是否有值,并在电子邮件中只发送有值的单元格。出于格式化的目的,粘贴到电子邮件中的单元格之间需要有一个空单元格,并且单元格需要保持原来的顺序,只是没有不必要的空白单元格

我从来没有正式学习过VBA,我只是自学了一个案例一个案例的场景,所以可能有一个简单的解决方案,我错过了。通常我可以调试并发现问题,但在这种情况下,Excel会完全冻结并变成“无响应”。我有一种感觉,这意味着我在某个地方有一个未解决的循环,但我真的不明白如何解决。代码似乎一直运行到范围(“A2”)。值=行(LineCount1)。如有任何建议,将不胜感激

Public Sub SingleEmail()
Dim LineCount1 As Integer
Dim LineCount2 As Integer
Dim LineCount3 As Integer
Dim LineCount4 As Integer
Dim LineCount5 As Integer
Dim LineCount6 As Integer
Dim LineCount7 As Integer
Dim NumOfLines As Integer

Range("A2", "A14").ClearContents

LineCount1 = 2 
Range("A2").Value = Line(LineCount1)

LineCount2 = 2 + LineCount1
Range("A4").Value = Line(LineCount2)

LineCount3 = 2 + LineCount2
Range("A6").Value = Line(LineCount3)

LineCount4 = 2 + LineCount3
Range("A8").Value = Line(LineCount4)

LineCount5 = 2 + LineCount4
Range("A10").Value = Line(LineCount5)

LineCount6 = 2 + LineCount5
Range("A12").Value = Line(LineCount6)

LineCount7 = 2 + LineCount6
Range("A14").Value = Line(LineCount7)

NumOfLines = Range("n3").Value

If Range("A2") <> "" Then
    Range("A2", "A" & NumOfLines).Select
    ActiveWorkbook.EnvelopeVisible = True
    With ActiveSheet.MailEnvelope
      .Introduction = ""
      .Item.To = "personalemailaddress@Someplace.com"
      .Item.CC = ""
      .Item.Subject = "Email Subject"
      .Item.send
    End With
End If

End Sub




Function Line(ByRef LineCount As Integer) As String
Line = ""
Do While Line = "" Or LineCount < 13
If Range("B" & LineCount).Value <> "" Then
    Line = Range("B" & LineCount).Value
Else
    LineCount = LineCount + 2
End If
Loop
End Function
Public Sub-SingleEmail()
Dim LINECUNT1为整数
Dim LINECUNT2为整数
Dim LINECUNT3为整数
Dim LINECUNT4为整数
Dim LINECUNT5为整数
Dim LINECUNT6为整数
将LineCount7设置为整数
将NumOfLines设置为整数
范围(“A2”、“A14”)。清晰内容
LineCount1=2
范围(“A2”)。值=行(LineCount1)
LineCount2=2+LineCount1
范围(“A4”)。值=行(LineCount2)
LineCount3=2+LineCount2
范围(“A6”)。值=行(LineCount3)
LineCount4=2+LineCount3
范围(“A8”)。值=行(LineCount4)
LineCount5=2+LineCount4
范围(“A10”)。值=行(LineCount5)
LineCount6=2+LineCount5
范围(“A12”)。值=行(LineCount6)
LineCount7=2+LineCount6
范围(“A14”)。值=行(LineCount7)
NumOfLines=范围(“n3”).值
如果范围为“A2”,则
范围(“A2”、“A”和数值线)。选择
ActiveWorkbook.EnvelopeVisible=True
使用ActiveSheet.MailEnvelope
.Introduction=“”
.Item.To=”personalemailaddress@Someplace.com"
.Item.CC=“”
.Item.Subject=“电子邮件主题”
.Item.send
以
如果结束
端接头
函数行(ByRef LineCount为整数)为字符串
Line=“”
在Line=”“或LineCount<13时执行
如果范围为(“B”&行计数)。值为“”,则
行=范围(“B”和行计数)。值
其他的
LineCount=LineCount+2
如果结束
环
端函数

要回答您的问题:

如果
B4
有值且
B2
为空,则该
While
循环变为无限循环。LineCount卡在4上,因此没有溢出。这就是你的代码冻结的原因

首先,你为什么要运行一个循环。您可以简单地分配如下值
Range(“A2:A14”)。Value=Range(“B2:B14”)。Value
根据您的评论,您需要使用
运算符来代替

Do While Line=”“和LineCount<13
现在,如果Line“”或LineCount>14,循环将退出,以回答您的问题:

如果
B4
有值且
B2
为空,则该
While
循环变为无限循环。LineCount卡在4上,因此没有溢出。这就是你的代码冻结的原因

首先,你为什么要运行一个循环。您可以简单地分配如下值
Range(“A2:A14”)。Value=Range(“B2:B14”)。Value
根据您的评论,您需要使用
运算符来代替

Do While Line=”“和LineCount<13
现在,如果Line“”或LineCount>14,循环将退出。Do While循环的else部分是否可能从未执行过?在我运行此代码的测试区域中,它应该循环通过else语句一次。单元格b2当前为空,单元格b4有文本。如果单元格b2中有文本,则Else部分将不会执行,因为它将进入If语句的第一部分。一旦变量行不是空,那么函数就应该停止循环并返回结果。你知道我有什么方法可以测试它,以确定它是否按我认为的方式工作吗?使用调试器逐步完成它?我现在已经可以工作了,但我需要学习使用调试器。到目前为止,我使用它的唯一方式是,当它在运行代码时弹出错误时,我可以看到错误发生的地方,然后用谷歌搜索它。我假设这不是调试器的使用方式,哈哈。您可以使用
F8
逐行检查代码,看看它是如何工作的。Do While循环的else部分是否可能从未执行过?在我运行此代码的测试区域中,它应该循环过else语句一次。单元格b2当前为空,单元格b4有文本。如果单元格b2中有文本,则Else部分将不会执行,因为它将进入If语句的第一部分。一旦变量行不是空,那么函数就应该停止循环并返回结果。你知道我有什么方法可以测试它,以确定它是否按我认为的方式工作吗?使用调试器逐步完成它?我现在已经可以工作了,但我需要学习使用调试器。到目前为止,我使用它的唯一方式是,当它在运行代码时弹出错误时,我可以看到错误发生的地方,然后用谷歌搜索它。我假设这不是调试器的使用方式,哈哈。你可以使用
F8
逐行检查代码,看看它是如何工作的。当变量行“”或linecount>13时,循环不应该停止吗。在本例中,linecount仅增加到4,但变量Line=单元格b4中的值,因此循环应该退出,对吗?谢谢。我试试看。起初,我确实编写了没有循环的代码,但实际上我根本没有测试它。我决定改变它,因为我试图强迫自己学习它们如何更好地工作,这样我就可以编写更短的代码。我试图找出如何将代码的第一部分(LineCount1=2范围(“A2”).Value=Line(LineCount1))作为数组的循环,但我没有