[リストへもどる]
一括表示

投稿時間:2004/04/13(Tue) 15:24
投稿者名:うしぱ
Eメール:
URL :
タイトル:
複数行入力したテキストボックスの内容をWordのフォームフィールドでも複数行表示させたい
うしぱと申します。
ここで質問させていただくのは2回目です。
#タイトルが長くてすみません。

さて、現在、WindowsXP上で
Word 2000とVB6を組み合わせたアプリケーションを製作しております。

このアプリケーションでは、VBからWordを呼び出し、
VBのテキストボックスの内容をWord上のテキストボックスフォームフィールドへ
転送する処理を行っております。

ここで質問なのですが、
VBのテキストボックスの内容が1行のみの場合は問題ないのですが、
MultiLineプロパティをTrueにして、複数行入力したデータを
Word側に転送しても複数行になってくれません。

-----------
(例)
 VB側(テキストボックス、MultiLine=True):
  123
  456

 Word側(テキストボックスフォームフィールド)
  123  456
-----------

Word側の3と4の間の空白はVB側で入力された改行コードが入っているようです。
(バイナリエディタで確認しました)

テキストボックスで複数行入力したデータを
Word側のテキストボックスフォームフィールドでも複数行化する方法を
ご存知の方がおられたら、ご教授いただきたく思います。

よろしくお願いいたします。

投稿時間:2004/04/13(Tue) 15:55
投稿者名:これ
URL :
タイトル:
Re: 複数行入力したテキストボックスの内容をWordのフォームフィールドでも複数行表示させたい
> VBのテキストボックスの内容が1行のみの場合は問題ないのですが、
> MultiLineプロパティをTrueにして、複数行入力したデータを
> Word側に転送しても複数行になってくれません。

VB + Excelでみてみましたが
Excelのオートシェイプのテキストの時は
改行は LF(Chr(10)) になっているので
VBからWordへ送り込むときに CRLF を LFに
置き換えて送ってみてはいかがでしょう?

投稿時間:2004/04/13(Tue) 16:48
投稿者名:うしぱ
Eメール:
URL :
タイトル:
Re^2: 複数行入力したテキストボックスの内容をWordのフォームフィールドでも複数行表示させたい
うしぱです。

これ 様>
早速のご教授、ありがとうございます。

> VB + Excelでみてみましたが
> Excelのオートシェイプのテキストの時は
> 改行は LF(Chr(10)) になっているので
> VBからWordへ送り込むときに CRLF を LFに
> 置き換えて送ってみてはいかがでしょう?

申し訳ないですが、頂戴した情報を元に試してみましたが
現象は変わりませんでした。
(ただしWord転送時に半角2文字分空いていた隙間が
 CRを削った分1文字分になりましたが。)

また逆にLFを削った場合でも同様です。

ちなみに次のような方法でCRを削りました。
----------------
    Dim sWord As String
    Dim sBuffer As String
    Dim iLen As Integer
    Dim iLoop As Integer
    
    sBuffer = ""
    iLen = Len(Text1.text)
    
    For iLoop = 1 To iLen
        sWord = Mid(Text1.text, iLoop, 1)
        
        If sWord <> Chr(13) Then
            sBuffer = sBuffer + sWord
        End If
    Next iLoop

    WdApp.ActiveDocument.FormFields(sBookmark).Result = sBuffer

----------------

もう少しいろいろ試してみます。
あらためて、情報提供ありがとうございました。

投稿時間:2004/04/13(Tue) 18:08
投稿者名:これ
URL :
タイトル:
Re^3: 複数行入力したテキストボックスの内容をWordのフォームフィールドでも複数行表示させたい
> 現象は変わりませんでした。
> (ただしWord転送時に半角2文字分空いていた隙間が
>  CRを削った分1文字分になりましたが。)
> また逆にLFを削った場合でも同様です。
> ちなみに次のような方法でCRを削りました。

 お役に立てませんでしたか・・・
ちなみに VB6.0 でしたら
sBuffer = Replace(Text1.Text, vbCrLf, vbLf)
これで置換えできますよ。

投稿時間:2004/04/14(Wed) 14:14
投稿者名:うしぱ
Eメール:
URL :
タイトル:
Re^4: 複数行入力したテキストボックスの内容をWordのフォームフィールドでも複数行表示させたい
うしぱです。

これ 様>

> ちなみに VB6.0 でしたら
> sBuffer = Replace(Text1.Text, vbCrLf, vbLf)
> これで置換えできますよ。

こんな便利な方法があるんですねえ。
もっとコントロール、関数の勉強しないといけませんね。

何度もありがとうございました。

投稿時間:2004/04/13(Tue) 20:44
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 複数行入力したテキストボックスの内容をWordのフォームフィールドでも複数行表示させたい
下記で改行されますが、だめですか?

Option Explicit
Private Sub Form_Load()
    Text1.Text = "あいうえお" & vbCrLf & "かきくけこ" & vbCrLf & _
                 "さしすせそ" & vbCrLf & "たちつてと"
End Sub
Private Sub Command1_Click()
    Dim wdApp   As Word.Application
    Dim wdDoc   As Word.Document
    Set wdApp = New Word.Application
    Set wdDoc = wdApp.Documents.Open("c:\Test.doc")
    wdApp.Visible = True
    wdDoc.TextBox1.Text = Text1.Text
    Set wdDoc = Nothing
    Set wdApp = Nothing
End Sub


因みに vbCrLf でも vbCr でも vbLf でも問題なく改行されて表示します。
Word の TextBox1.MultiLine =True に設定しておられますか?

問題のコードを状況が再現できる形で投稿してみて下さい。

投稿時間:2004/04/14(Wed) 14:23
投稿者名:うしぱ
Eメール:
URL :
タイトル:
Re^2: 複数行入力したテキストボックスの内容をWordのフォームフィールドでも複数行表示させたい
花ちゃん 様>

ご教授ありがとうございます。

頂戴した方法、確認させていただきました。
これはテキストボックスコントロールを使用した場合ですね。
私が使っていたのはテキストボックスフォームフィールドです。
(フォームツールバーの一番左のボタンで配置するもの)
#紛らわしくて申し訳ございません。

本件について、頂戴したサンプルを参考に
テキストボックスフォームフィールドでの再現サンプルを作成してみたところ、
普通にフォームフィールドを配置した場合はちゃんと改行がなされました。

しかし、表組みのセル内にフォームフィールドを配置したところ、
今度は改行がされませんでした。
(テキストボックスコントロールではこういうことはおきませんでした。)

-------------------------------------------------------

<VBのテキストボックス内の文字列>
あいうえお
かきくけこ
さしすせそ

<フォームを普通に配置した場合>
あいうえお
かきくけこ   ←改行される
さしすせそ

<フォームを表組みセル内に配置した場合>
−−−−−−−−−−−−−−−−−−−
|あいうえお  かきくけこ  さしすせそ| ←改行されない
−−−−−−−−−−−−−−−−−−−

-------------------------------------------------------

以下に再現(?)コードを記述します。
-----------------------------------------
Private Sub Form_Load()
    Text1.Text = "あいうえお" & vbCrLf & "かきくけこ" & vbCrLf & _
                 "さしすせそ"
End Sub

Private Sub Command1_Click()
    Dim wdApp   As Word.Application
    Dim wdDoc   As Word.Document
    Set wdApp = New Word.Application
    Set wdDoc = wdApp.Documents.Open("C:\Test2.doc")
    wdApp.Visible = True
    wdDoc.FormFields("FormTest").Result = Text1.Text
    Set wdDoc = Nothing
    Set wdApp = Nothing
End Sub
-----------------------------------------
#Word文書にはテキストボックスフォームフィールドを配置し、
 プロパティでブックマーク名を"FormTest"に変更しました。

今も対応方法を検討していますが、
花ちゃん様から教えていただいた方法で
想定していた動作ができそうなので、これでやってみます。

ありがとうございました。