マンガでよめる痔のこと・薬のこと

リッチテキストボックスを用いて
中身(テキスト)の単語を色々な表現(色、太字、サイズ)で表すことを行なっています。
この内容をExcelにコピーできるようにしたいのですが。
色などの情報を正しく引き継いでもらうためには
どのようなコーディングをすればいいのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

ズブの素人ですので、見当違いであればお許し下さい。



<単純にテキストを読み込む場合>

Public Function FileReadAll(ByVal FileName As String) As String
On Error GoTo Err_FileReadAll
   Dim fso As FileSystemObject
   Dim fil As File
   Dim txs As TextStream
  
   Set fso = New FileSystemObject
   Set fil = fso.GetFile(FileName)
   Set txs = fil.OpenAsTextStream(ForReading, TristateUseDefault)
   FileReadAll = txs.ReadAll
Exit_FileReadAll:
   Exit Function
Err_FileReadAll:
   MsgBox Err.Description & "(FileReadAll)", vbExclamation, " 関数エラーメッセージ"
   Resume Exit_FileReadAll
End Function

Private Sub CommandButton1_Click()
  Dim strText As String
  
  strText = FileReadAll("d:\temp\Test.txt")
  MsgBox strText
End Sub

これで、コマンドボタンをクリックすると Test.txt の内容をstrTextに代入してMsgBox で表示できます。
リッチテキストボックスのテキストを出力した後にエクセルのコマンドボタンをクリックし、エクセルにstrText を表示すれば、事実上のコピーが成立します。
もちろん、エクセルが開いていない場合に、自動オープンして自動コピーする。
あるいは、エクセルのコマンドボタンを送信側から操作するなど色々のケースがあるでしょう。
まあ、直接にコピーするよりも簡単という訳です。

<複雑な情報の転送>

・元々の情報とエクセルの対応を決める。
・それぞれの情報の再現方法を決める。
・これらを構造体変数に代入する。
・構造体変数を一旦ファイルとして出力する。
・エクセルで構造体変数を呼び込む。
・構造体変数をエクセルに反映する。

コピー情報が単純ではないと判断し<構造体変数化>という手法を提示したものです。

どのような構造体変数を用意すべきかは、質問の範囲では不明です。
例えば、次のような構造体変数の出力とリードには BLoad()、BSave()という関数を使っています。

Private Type MENU
  TitleCaption   As String * 24 ' トップメニュータイトル
  MenuCount     As Integer   ' メニュー総数
  SubItems(5)    As Integer   ' 各メニューの項目数
  MenuNames(5)   As String * 16 ' 主メニュー名
                   ' ----+----1----+----2----
  LargeIcons(5, 19) As String * 24 ' Icons\Large\xxxxxxxx.ico
  SmallIcons(5, 19) As String * 24 ' Icons\Small\xxxxxxxx.ico
  IconTexts(5, 19) As String * 12 ' アイコンテキスト
  AppTypes(5, 19)  As String * 1  ' アプリケーションの種類
  AppNames(5, 19)  As String * 20 ' アプリケーション名
  AppDescs(5, 19)  As String * 32 ' アプリケーションの説明
  ViewMode     As Integer   ' 表示モード
End Type
Dim MyMenu As MENU

' --------------------------------------------------------------------------------
' 構造体変数 MyMenu を Menu.ini に保存
' --------------------------------------------------------------------------------
Private Function BSave(ByVal FileName As String, ByRef MyMenu As MENU) As Boolean
On Error GoTo Err_BSave
  Dim isOK    As Boolean
  Dim intFreeFile As Integer
  
  isOK = True
  intFreeFile = FreeFile
  Open FileName For Random As intFreeFile Len = Len(MyMenu)
  Put #intFreeFile, 1, MyMenu
Exit_BSave:
On Error Resume Next
  Close #intFreeFile
  BSave = isOK
  Exit Function
Err_BSave:
  isOK = False
  Resume Exit_BSave
End Function

' --------------------------------------------------------------------------------
' ランダムファイル Menu.ini を構造体変数 MyMenu にロード
' --------------------------------------------------------------------------------
Private Function BLoad(ByVal FileName As String, ByRef MyMenu As MENU) As Boolean
On Error GoTo Err_BLoad
  Dim isOK    As Boolean
  Dim intFreeFile As Integer
  
  isOK = FileExists(FileName)
  If isOK Then
    intFreeFile = FreeFile
    Open FileName For Random As intFreeFile Len = Len(MyMenu)
    Get #intFreeFile, 1, MyMenu
  End If
Exit_BLoad:
On Error Resume Next
  Close #intFreeFile
  BLoad = isOK
  Exit Function
Err_BLoad:
  isOK = False
  Resume Exit_BLoad
End Function

参考になれば幸いです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
こんなにも具体的に教えていただけるとは思っておらず、ビックリしました。
教えていただいたものを参考にあれこれと試してみます。
本当にありがとうございました。

お礼日時:2006/01/15 12:12

ほぼ同様のことを私は次の要領で行っています。


(1)必要なプロパティ情報を構造体変数に代入しランダムファイルに記録。
(2)Excelでは、同じ構造体変数に呼び込み必要なプロパティを設定する。
以上です。

この回答への補足

ごめんなさい。具体的にどういう風にしたらいいのか教えていただけませんか?

補足日時:2006/01/10 15:43
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qリッチテキストをテキストに変換

お世話になります。
アクセスVBAでデータをリッチテキスト形式にて出力することはできたのですが、その後、出力したリッチテキストをテキスト(改行つき)で保存する方法がわかりません。マクロなど使えば可能なのでしょうか??

出力の際に、テキストで出力すればいいだろうって話かもしれませんが、そこはリッチテキスト形式にて出力する課題なんです(^_^;)

Aベストアンサー

>アクセスVBAでデータをリッチテキスト形式にて出力することはできたのですが

>出力したリッチテキストをテキスト(改行つき)で保存する方法がわかりません

これは対なので、それを逆作業を行うだけですね^^;


取り出し方法が一つじゃないので、格納方法も複数考えられます。

まず取り出し元のソースと、格納されているDBの型を公開してください。
イメージ型かメモ型では、扱いがそれぞれ異なるパターンがあります。

QAccessの画面更新を一時的に停止する方法。

こんにちは。
Accessの画面更新を一時的に停止する方法を捜しています。
ExcelのScreenUpdatingと同様な機能です。

VBAでの更新処理時に画面がチラチラと動くのを防止したいと思っています。
(Ver:Access2000)
ご存知の方宜しくお願い致します。

Aベストアンサー

Application.Echo False '画面の描画を止める

・・・処理を実行する・・・

Application.Echo True '画面の描画を行う

Qテキストボックスに改行を含む値を表示する場合

テキストファイルより1行ずつ値を改行「chr(13)」でつなげて取得し、それを
テキストボックスに表示させたいのですが、そのまま値をテキストボックスの
textプロパティに設定すると、改行が「・」で表示され改行されていません。
テキストボックスのプロパティでMultiLineもTrueにしてあるのですが、これは
無理なことなのでしょうか?
一行ずつ取得してテキストボックスに表示する際に改行を設定していくしかない
のでしょうか?
詳しい方いらっしゃいましたらご教示ください。
よろしくお願いいたします。

Aベストアンサー

お疲れ様です。

では、これでどうですか?

例)

  Dim strText As String

  '// 元の文字
  strText = "AAA" & Chr(13) & "BBB"

  '// Cr を CrLf に変換
  '// Text1.Text = Replace(strText, Chr(13), Chr(13) & Chr(10)) と同じ意味
  Text1.Text = Replace(strText, vbCr, vbCrLf)


strText をファイルから読み込んだものとして考えるといいと思います。
お試しください。

間違っていたらごめんなさい。

QHTMLのソースをエクセルに貼り付ける方法

HTMLのソースを、そのまま(メモ帳表示データのまま)Excelに貼り付ける方法はありますか。

メモ帳でソースの表示をして、全て選択→コピー→Excelに型式を選択して貼り付け→テキスト
で貼り付けてみましたが、変なフォーマットで表示されます。
セルの書式を文字列にしても同じです。

目的はExcelの文字列操作で特定の文字だけ拾い出して加工しようと考えています。
OS:Win95、Excel2000です。

Aベストアンサー

再び登場です。
ソースを表示させたメモ帳をとりあえず一度名前を付けて保存して下さい。
そしてExcelのデータメニューから外部データの取り込み、テキストファイルのインポートをクリック。
後は必要に応じて取り込み方を選びます。
これでどうでしょうか?

QCSVファイルの中で、「 , 」カンマを使いたい

「 , 」で区切られたCSVファイルの中で、「 , 」カンマを使いたいのですが、可能でしょうか?

具体的には「これは1,500円でした。」というように、CSVファイルに収められた文章内で出てくる半角の数字(お金)の区切りに使いたいのです。
全角では代用したくないのですが、CSVファイルでデータを受け渡しする際に、困っています。

例えば、特殊文字などで対応可能でしょうか?

Aベストアンサー

受け渡しに使うと言うことは相手方のアプリケーションのことも考えなければいけないのですが・・・とりあえず対応が簡単そうな方法を。

1.各セルを""で囲む。(もちろんデータにダブルクォートがある場合はカンマと同様に困ります。
2.カンマで区切らずにタブで区切る。(比較的使われない文字ですが、やはりデータ中にタブがあるとカンマと同様です)

難しいけれど完璧に対応するためには、データ中の区切り文字は特殊な文字列に変更し、受け取り側のアプリケーションではその特殊な文字列をデータ中の区切り文字として扱うという方法が使われます。
例えば、データ中のカンマは\,にするとか。

データ作成側、受け取り側でそれぞれどこまで対応できるのか分かるともっと簡単かつ具体的な方法を回答できるかも知れません。

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QエクセルVBAで画像を貼り付ける座標設定方法は?

Sheets("Sheet1")に貼り付けたJ-pegの画像(=シンボルマーク)を別なシートに貼り付けるのは下記のVBAで出来ました。ただ、これでは貼り付け先のシートのセルK12が、貼り付け元のK12と同じ位置でないと思った場所に張り付きません。
そこでセルで場所を指定するのではなく、座標のようなもので指定する方法はないものかと考えた次第です。
オートシェイプなどは座標指定で作成できるのですが、J-pegのような画像はどうすればいいのでしょうか?

Sub TEST()
Sheets("FACE").Shapes("シンボルマーク").Copy
ActiveSheet.Range("K12").Select
ActiveSheet.Paste
End Sub

Aベストアンサー

#1です。
>この場合、ファイルをエクセルにくっつけて渡すなんてこと
>はできないものでしょうか?(別々にではなくあくまでエク
>セルのブックに付属した形で)
Excelのブックに付属した形にするなら、コピーペーストする方がいいと思います。一旦挿入した画像を別途保存するのは、簡単には出来ないと思います。

複数のシートで同じような作業をするなら、次のような方法も考えられます。
Function CpyMrk(MrkNM As String, myTop As Single, myLeft As Single)
Sheets("FACE").Shapes(MrkNM).Copy
ActiveSheet.Paste
ActiveSheet.Shapes(MrkNM).Top = myTop
ActiveSheet.Shapes(MrkNM).Left = myLeft
End Function

Sub test()
CpyMrk "シンボルマーク", 10, 10
End Sub

Qエクセルで別ブックをバックグラウンドでオープンする方法

最初にメニュー画面となるブックを開いた後、データブックをバックグランドのみで開きたいのですが、エクセルVBAで単純にOPENを行うと画面上にデータブックが表示されてしまいます。操作作業者に画面が次々入れ替わることを見せたくないのですが、ブックをバックグラウンドだけで開く方法はあるのでしょうか。VBAについては素人で宜しくお願いします。

Aベストアンサー

ごめんなさい。解決済みと思って見ていませんでした。 まだですか?

後で開いた3つのブックは、VBAで操作しないのですか。
操作するのでしたら、ブックをオブジェクト変数に入れておいた方が操作しやすい
と思うのですが・・・ 一応何処でどのように使うのか判りませんので・・・

こんな感じで如何でしょうか。

ブックを開いてから非表示にするまでの瞬時の画面のことですね。
それなら、その間、ScreenUpdating = False でどうでしょうか。

Public Bk1 As Workbook
Public Bk2 As Workbook
Public Bk3 As Workbook
Dim PathName As String

Sub Auto_Open()
PathName = ThisWorkbook.Sheets("メニュー").Range("C28").Value
ファイル読込 "初期値.xls", Bk1
ファイル読込 "データ1.xls", Bk2
ファイル読込 "データ2.xls", Bk3
End Sub

Sub ファイル読込(BkName, ObjBk)
Application.ScreenUpdating = False
Set ObjBk = Workbooks.Open(Filename:=PathName & "\" & BkName)
Windows(BkName).Visible = False
Application.ScreenUpdating = True
End Sub

ごめんなさい。解決済みと思って見ていませんでした。 まだですか?

後で開いた3つのブックは、VBAで操作しないのですか。
操作するのでしたら、ブックをオブジェクト変数に入れておいた方が操作しやすい
と思うのですが・・・ 一応何処でどのように使うのか判りませんので・・・

こんな感じで如何でしょうか。

ブックを開いてから非表示にするまでの瞬時の画面のことですね。
それなら、その間、ScreenUpdating = False でどうでしょうか。

Public Bk1 As Workbook
Public Bk2 As Workbook
P...続きを読む

QRichTextBoxで指定行の色を自動で変更・・。

変数内に入っているテキストから'が先頭にある行の色のみを灰色に変更して結果をリッチテキストボックスに表示するという事をしたいのですが、うまくいかず困っております・・。

最初は、変数text内に文字列が入っているとして下記コードを書いたのですが、無限ループになってしまいますし、色々サイトを見ていて無理なんだと気づき、次はhttp://itsuko-m.hp.infoseek.co.jp/rtf04.htm
を参考にしてみたのですが、やはり良く分かりません・・。
申し訳ありませんが、何か助言頂けると嬉しいです。
VB.NETです。


Do
RichTextBox1.SelectionStart = text.IndexOf("'")
RichTextBox1.SelectionLength = text.IndexOf(vbCrLf) - text.IndexOf("'")
RichTextBox1.SelectionColor = System.Drawing.Color.LightGray
Loop While text.IndexOf("'") <= -1

変数内に入っているテキストから'が先頭にある行の色のみを灰色に変更して結果をリッチテキストボックスに表示するという事をしたいのですが、うまくいかず困っております・・。

最初は、変数text内に文字列が入っているとして下記コードを書いたのですが、無限ループになってしまいますし、色々サイトを見ていて無理なんだと気づき、次はhttp://itsuko-m.hp.infoseek.co.jp/rtf04.htm
を参考にしてみたのですが、やはり良く分かりません・・。
申し訳ありませんが、何か助言頂けると嬉しいです。
VB.NETで...続きを読む

Aベストアンサー

こんな事をしたいのですか?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  Dim text As String = _
    "あいうえお" & vbCrLf & _
    "'かきくけこ" & vbCrLf & _
    "さしすせそ" & vbCrLf & _
    "たちつてと" & vbCrLf & _
    "'なにぬねの" & vbCrLf & _
    "はひふへほ" & vbCrLf & _
    "まみむめも" & vbCrLf & _
    "'やゆよ" & vbCrLf & _
    "らりるれろ" & vbCrLf & _
    "わをん"

  Me.RichTextBox1.Text = text

  Dim rtb As RichTextBox = Me.RichTextBox1
  Dim intS As Integer = 0
  Dim intE As Integer = 0

  While True
    intS = rtb.Text.IndexOf("'"c, intS)
    If intS = -1 Then
      Exit While
    Else
      intE = rtb.Text.IndexOf(Chr(10), intS)
      If intE = -1 Then
        Exit While
      Else
        rtb.SelectionStart = intS
        rtb.SelectionLength = intE - intS
        rtb.SelectionColor = System.Drawing.Color.LightGray
        intS = intE
      End If
    End If
  End While

End Sub

IndexOfではvbCrLfは検索できませんね、何ででしょう
オブジェクトブラウザで見ると「Chr(10) & Chr(13)」のString型なのに...

RTFを調査してみると幸せになれるかも

こんな事をしたいのですか?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  Dim text As String = _
    "あいうえお" & vbCrLf & _
    "'かきくけこ" & vbCrLf & _
    "さしすせそ" & vbCrLf & _
    "たちつてと" & vbCrLf & _
    "'なにぬねの" & vbCrLf & _
    "はひふへほ" & vbCrLf & _
    "まみむめも" & vbCrLf & _
    "'やゆよ" & vbCrLf & _
    "らりるれろ" & vbCrLf...続きを読む


人気Q&Aランキング