2016-04-13 18 views
0

私はいくつかの数字をメールの後ろに付けています。問題は彼らがメールで下降していることです:6. 5. 4. 3. 2. 1. - 最初のこんにちは6. 5. 4. 3. 2. 1.しかし、必ずしもそうではない、時には3または4またはそれらの2つ:2. 1.または4. 3. 2. 1.あなたがこんにちは後に昇順を注文する方法はありますか:1. 2. 3. 4. 5. 6. via vba?テキストは平文のテキスト番号で、電子メールの後ろに6つの数字しかありません。数字は自動生成されません。メール本文の数字を置き換えてください

例:

Hello, 

6. some thing to be done 
5. some thing to be done 
4. some thing to be done 
3. some thing to be done 
2. some thing to be done 
1. some thing to be done 

Have a nice day. 

または

Hello, 

4. some thing to be done 
3. some thing to be done 
2. some thing to be done 
1. some thing to be done 

Have a nice day. 

自動段落が動作していない:

* Hello, 
    * 
    4. some thing to be done 
    3. some thing to be done 
    2. some thing to be done 
    1. some thing to be done 
    * 
    * Have a nice day. 

私はこれを試してみましたが、それは動作しません。

With objItem.Content.Find 
    .Text = "6." 
    .Forward = True 
    .Execute 

    If .Found = True Then 
    objItem.HTMLBody = Replace(objItem.HTMLBody, "6.", "1.") 
    objItem.HTMLBody = Replace(objItem.HTMLBody, "5.", "2.") 
    objItem.HTMLBody = Replace(objItem.HTMLBody, "4.", "3.") 
    objItem.HTMLBody = Replace(objItem.HTMLBody, "3.", "4.") 
    objItem.HTMLBody = Replace(objItem.HTMLBody, "2.", "5.") 
    objItem.HTMLBody = Replace(objItem.HTMLBody, "1.", "6.") 

    Else 

    With objItem.Content.Find 
    .Text = "5." 
    .Forward = True 
    .Execute 

    If .Found = True Then 
    objItem.HTMLBody = Replace(objItem.HTMLBody, "5.", "1.") 
    objItem.HTMLBody = Replace(objItem.HTMLBody, "4.", "2.") 
    objItem.HTMLBody = Replace(objItem.HTMLBody, "2.", "4.") 
    objItem.HTMLBody = Replace(objItem.HTMLBody, "1.", "5.") 

    'Else... 

    End With 

End With 
+0

書式設定テキスト、段落でA-> Zツールを試しましたか? –

+0

こんにちは、段落を置くわけではないので、なぜ私はvbaでそれを作りたいのですか? – wittman

+0

次に、質問の下にある[編集]リンクをクリックして詳細を追加する必要があります。また、これらが "プレーンテキスト"番号か自動番号付けかを指定する必要があります。 –

答えて

1

あなたのリクエストは非常に高いです。これは、あなたが正しく定義していない文字列を解析したいという事実によるものです。行方不明の部分は次のとおりです。

(1)文字列に行を1行付けるとは何ですか? vbCrLfなどの改行で区切られていますか、代わりにChr(10)などを使用していますか?それらはすべて同じ意味で使用できますか?

(2)リストの開始とリストの終了をVBAにどのように伝えたいですか?それはラインの最初の文字として数字があるのですか?他の理由や、誰かがその番号の前に空白を入れて2. some thing to be doneのように改行した場合はどうなりますか?最初の文字はスペースで、数字ではありません。特に、あなたのリストが10項目を上回る場合は、最初の9数字が1.(先行スペース付き)と書かれている可能性があります。

(3)リストが完成したら、それ以上のリストアイテムは生成されず、リストには「クローズ」とマークする必要があります。あなたはこれをどのように定義しますか?それ以前に番号で始まっていた行があり、次の行がもう番号で始まっていないのでしょうか?しかし、これは、(何をすべきかについての説明が長すぎるため)いずれの広告申込情報にも誰も使用できないことを意味します。

あなたの質問に上記のどれも含まれていないので、読者はあなたが本当にまだ問題を完全に理解していないという結論に至るかもしれません。私は@CindyMeisterのコメントも説明していると思います。

それでも、私は暇な時間を少し持っていたし、それをいくつかの考えを与え、以下の小さなサブ思い付いた:

Option Explicit 

Public Sub HTML_List() 

Dim lngRow As Long 
Dim lngChar As Long 
Dim strTmp() As String 
Dim strHTMLbody As String 
Dim bolListStart As Boolean 

strHTMLbody = "Hello, " & vbCrLf 
strHTMLbody = strHTMLbody & " " & vbCrLf 
strHTMLbody = strHTMLbody & "6. some thing to be done " & vbCrLf 
strHTMLbody = strHTMLbody & "5. some thing to be done " & vbCrLf 
strHTMLbody = strHTMLbody & "4. some thing to be done " & vbCrLf 
strHTMLbody = strHTMLbody & "3. some thing to be done " & vbCrLf 
strHTMLbody = strHTMLbody & "2. some thing to be done " & vbCrLf 
strHTMLbody = strHTMLbody & "1. some thing to be done " & vbCrLf 
strHTMLbody = strHTMLbody & " " & vbCrLf 
strHTMLbody = strHTMLbody & "Have a nice day. " 

strTmp() = Split(strHTMLbody, vbCrLf) 

For lngRow = LBound(strTmp) To UBound(strTmp) 
    strTmp(lngRow) = Trim(strTmp(lngRow)) 
    If strTmp(lngRow) <> vbNullString Then 
     Select Case Asc(strTmp(lngRow)) 
     Case 48 To 57 
      strTmp(lngRow) = Mid(strTmp(lngRow), InStr(1, strTmp(lngRow), ".", vbTextCompare) + 1) 
      strTmp(lngRow) = "<li>" & strTmp(lngRow) & "</li>" 
      If bolListStart = False Then 
       strTmp(lngRow) = "<ol>" & strTmp(lngRow) 
       bolListStart = True 
      End If 
     Case Else 
      If bolListStart = True Then 
       bolListStart = False 
       strTmp(lngRow - 1) = strTmp(lngRow - 1) & "</ol>" 
      End If 
     End Select 
    End If 
Next lngRow 

strHTMLbody = "" 
For lngRow = LBound(strTmp) To UBound(strTmp) 
    strHTMLbody = strHTMLbody & strTmp(lngRow) & vbCrLf 
Next lngRow 

Debug.Print strHTMLbody 

End Sub 

ので、サブの背後にある基本的な手順は次のとおりです。

  1. 最初の文字列をvbCrLfで分割してください(うまくいけば、それは1行になります)。
  2. その行の最初の文字が数字かどうかを確認します。
  3. 上記の最初の出現で、リストが開始されます。 HTMLでは、リストは<ol>で開始されます。
  4. その行から番号を削除し、HTMLにリスト項目であることを伝えます。これは、リストアイテムの開始時に<li>とタグ付けされ、その広告申込情報の末尾に</li>と表示されます。
  5. 一度、行がもう数字で始まらない場合、リストはHTMLで閉じられ、</ol>です。
  6. すべての行をまとめて1つのHTML文字列にします。

この文字列をOutlookの電子メールで.HTMLbodyとして使用すると、HTMLは自動的に一覧の書式を設定し、それに応じて明細に番号を付けます。

上記のコードの結果として、あなたはリターンで次のようになります:

Hello, 
 

 
<ol><li> some thing to be done</li> 
 
<li> some thing to be done</li> 
 
<li> some thing to be done</li> 
 
<li> some thing to be done</li> 
 
<li> some thing to be done</li> 
 
<li> some thing to be done</li> 
 
</ol> 
 
Have a nice day.

私はそれが役に立てば幸い。ご質問がある場合はお知らせください。

+0

ありがとう、それは仕事をします。 – wittman

関連する問題