2016-07-19 3 views
0

基本的に私は7つのセルにテキスト(b2、b4、b6、b8、b10、b12およびb14)を入力できます。私はコードに、各セルが値を持っているかどうかを確認し、電子メールに値を持つセルだけを送信するようにします。書式設定の目的で、電子メールに貼り付けられたセルには空のセルが1つ必要であり、セルは元の順序で保持する必要があります。Excelを使用してデータをコピーしてメールを送信しようとした後に

私は公式にVBAを学んだことはありません。私は、ケースバイケースのシナリオで自分自身を教えただけなので、簡単に解決できない場合があります。多くの場合、デバッグして問題を見つけることができますが、この場合、Excelは完全にフリーズして「応答しません」と表示されます。私はどこかにループがあることを意味しているという気持ちがありますが、どういうわけか本当に分かりません。コードは、Range( "A2")まで実行されます。Value = Line(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 = "[email protected]" 
     .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 
+1

>」です> <場合、今のループが終了しますOR Do While Line = "" And LineCount < 13の代わりにAnd演算子を使用する必要がありますDo Whileループの一部は実行されません。 – jcarroll

+0

私はこのコードを実行していたテスト領域で、Elseステートメントを1回ループしていたはずです。セルb2は現在空白であり、セルb4はテキストを有する。 Elseセクションよりもセルb2にテキストがある場合、代わりにifステートメントの最初のセクションが入力されるため、実行されません。変数Lineが何も無ければ、関数はループを止めて結果を返します。私はそれが私が思うように動作しているかどうかを調べるためにそれをテストする方法を知っていますか? – sdrloveshim

+0

デバッガを使用してステップ実行しますか? – Comintern

答えて

2

B4値とB2を持っている場合

は、無限になり、このWhileループ空白になっています。 LineCountは4でスタックされているため、オーバーフローは発生しません。そのため、コードがフリーズします。

なぜ最初にループを実行していますか?あなたは、単にあなたのコメントを1として、このRange("A2:A14").Value =Range("B2:B14").Value のように値を割り当てることができ、次の行は、「またはラインカウントが他のは、それが可能14

+0

可変ライン<> ""またはlinecount> 13のいずれかのときにループが停止するとは限りません。この場合、linecountは4までしか上がらないが、変数Lineはセルb4の値なので、ループは終了するはずです。 – sdrloveshim

+1

答えの編集を参照してください。 – cyboashu

+0

ありがとうございます。私はそれを試してみましょう。もともと私はループを使わないでコードを書いていましたが、実際には全くテストしませんでした。私はそれを変更することにしました。なぜなら、私はより短いコードを書くことができるように、彼らがよりうまくいく方法を学ぶように強制しようとしているからです。私はコードの最初のセクション(LineCount1 = 2 Range( "A2")。Value = Line(LineCount1))をループのように扱う方法を見つけようとしていましたが、合理的に可能であるかどうかを判断する。 – sdrloveshim

関連する問題