Word VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


14 / 45 ページ ←次へ | 前へ→

【649】Re:WORDマクロの解説本 追加情報
回答  H. C. Shinopy  - 09/8/26(水) 21:59 -

引用なし
パスワード
   「Word スキルアップコレクション Word Skill Up Collection」
著者:坪崎 誠司
出版社:プレスティージ(Prestige)
発売日:2009年8月24日
定価:1890円

目次から
41 Word でVBA マクロを使う
42 Word VBA を使って、ドキュメント中の選択した文字列を調べる、処理する
43 Word VBA を使って、ドキュメント中の選択した数字の合計を計算させる
44 Word VBA を使って、ドキュメント中の括弧対応を調べる
45 Word VBA を使って、「ファイル選択ダイアログ」を起動する
46 Word VBA を使って、複数ファイルの各ページ数を調べる
47 Word VBA を使って、複数ファイルの個人情報を削除する
48 Word VBA を使って、Word の右クリックメニューに自作マクロを追加する
49 Word VBA を使って、Word の右クリックメニューにサブメニューを作成する
50 Word を起動すると同時にマクロを実行する
・ツリー全体表示

【648】Re:IF関数のつかいかたを教えてください。
発言  りる  - 09/8/23(日) 19:09 -

引用なし
パスワード
   VBAはじめました さん、こんばんは。
長く放置されているので、エラーの原因だけでも。

>テキストフォームフィールドText1, Text2, Text3があり,Text3の種類が計算式となってます。
>Text1, Text2(両方とも種類が数値)に値があったときのみ計算をさせたくて,例えば
>=IF(Text1="", "", Text1 * Text2)
>としましたが,!構文エラー” の表示になってしまいます。
「Text1は数値である」と設定されているので、""は数値でないためにエラーになります。
お望みの回答でなくてすみません。
・ツリー全体表示

【647】IF関数のつかいかたを教えてください。
質問  VBAはじめました  - 09/8/3(月) 12:22 -

引用なし
パスワード
   テキストフォームフィールドText1, Text2, Text3があり,Text3の種類が計算式となってます。
Text1, Text2(両方とも種類が数値)に値があったときのみ計算をさせたくて,例えば
=IF(Text1="", "", Text1 * Text2)
としましたが,!構文エラー” の表示になってしまいます。
Text1=""の条件分の指定の仕方が悪いようなのですが, そもそも,フィールドに値があるか否かの判断はどのようにさせたらよいでしょうか?
よろしくお願いします。
・ツリー全体表示

【646】Re:LAN内で誰かがファイルを開いていたら開...
回答  りる  - 09/7/25(土) 17:30 -

引用なし
パスワード
   れおパパ さん、こんにちは。

>ワードファイルにパスワードを設定するプログラムを作成中ですが
>誰かがLAN内で同じファイルを開くときに、「使用中のファイル」のメッセージがでますが、このメッセージがでたときはファイルを開かせないか、一度読み取りで開くなりメッセージを出さないようにすることはできるのでしょうか?
サポートにある、ファイルが使用中かどうかをチェックする簡単な関数のサンプルコードです。
htt p://support.microsoft.com/kb/209189/ja
かなりあやしい日本語ですが(笑)、メッセージボックスを表示する部分を除いてほぼそのまま転載してあります。

パスワードを設定しようとしているならば、開かないほうがよさそうですよね。
Sub Test()
  Dim Ifile As String
 
  Ifile = "d:\TEST\TEST.doc"
  '
  If FileLocked(Ifile) = True Then
   Debug.Print "×", Ifile, Time
  Else
   '正常な処理
   Debug.Print "○", Ifile, Now
   Application.Documents.Open Ifile
  End If
End Sub
'//////////////////////////////////////////////////
Function FileLocked(strFileName As String) As Boolean
  On Error Resume Next
  ' If the file is already opened by another process,
  ' and the specified type of access is not allowed,
  ' the Open operation fails and an error occurs.
  Open strFileName For Binary Access Read Write Lock Read Write As #1
  Close #1
  ' If an error occurs, the document is currently open.
  If Err.Number <> 0 Then
   FileLocked = True
   Err.Clear
  End If
End Function

Debug.Printでイミディエイトウィンドウに処理結果を記録しています。
・ツリー全体表示

【645】LAN内で誰かがファイルを開いていたら開か...
質問  れおパパ  - 09/7/23(木) 22:47 -

引用なし
パスワード
   ワードファイルにパスワードを設定するプログラムを作成中ですが
誰かがLAN内で同じファイルを開くときに、「使用中のファイル」のメッセージがでますが、このメッセージがでたときはファイルを開かせないか、一度読み取りで開くなりメッセージを出さないようにすることはできるのでしょうか?
・ツリー全体表示

【644】Re:コンボボックスのRowSourceの利用
回答  りる  - 09/7/20(月) 12:15 -

引用なし
パスワード
   hikka さん、こんにちわ。
もう解決済みかもしれませんが、
>  RowSource
>をexcelファイルを呼び出してから処理なんてできるのでしょうか?
こっちだけ。

Private Sub UserForm_Initialize()
  If ComboBox1.ListCount = 0 Then
   Dim xlApp As Object, obj As Object, Ldat As Variant
   'ヘルプのCreateObjectからほぼそのまま転載
   Set xlApp = CreateObject("excel.application")
   'フォルダはdocファイルと同じ。
   Set obj = xlApp.Workbooks.Open(ThisDocument.Path & "\book1.xls")
   '取り込む範囲はSheet1のB2:B6
   Ldat = obj.Worksheets("Sheet1").Range("B2:B6").Value
   'エクセルを終了させる処理
   xlApp.DisplayAlerts = False
   obj.Close
   Set obj = Nothing
   xlApp.DisplayAlerts = True
   xlApp.Quit  ' 処理終了後、Quit メソッドでアプリケーションを終了し、
   Set xlApp = Nothing  ' オブジェクトの参照を解放します。
   '
   '読み込んだ値をリストにセット
   ComboBox1.List = Ldat
  End If
End Sub
エクセル表から読み込むならばCreateObjectで取得してみてはいかがでしょうか。
・ツリー全体表示

【643】コンボボックスのRowSourceの利用
質問  hikka  - 09/6/24(水) 20:52 -

引用なし
パスワード
   こんにちわ。
コンボボックス表示の値について質問です。
excel vba では、
Option Explicit
 Private Sub UserForm_Initialize()
 Me.ComboBox1.RowSource = "Sheet1!b1:b5"
End Sub
で値を選択できますが、ワード文章内で同様なことができるのでしょうか?

もしくは
  RowSource
をexcelファイルを呼び出してから処理なんてできるのでしょうか?
よろしくお願いします。
・ツリー全体表示

【642】Re:ダブルクリックでuserformを表示
お礼  hikka  - 09/6/22(月) 22:14 -

引用なし
パスワード
   りるさん。こんにちわ。
返答ありがとうございます。
なかなかうまくいかずでした。

原因は再インストールしたあとの
ツールーマクローセキュリティーのレベルが高
のままでした。

内容はばっちりOKです。

目標はユーザーホームにいわゆる「はんこ」
並べてクリックで押していくものがタスクでした。
良いものできるようがんばりますね。
ありがとうございました。
・ツリー全体表示

【641】Re:csvを表に変換したいのですが。。。
お礼  かすみ  - 09/5/20(水) 17:23 -

引用なし
パスワード
   りるさん、こんばんは。

今回もりるさんのご教授を参考に問題を解決できました。ありがとうございます。

ワードマクロは初めて触ったのですが、勝手が分からず混乱しておりまして、非常に助かりました。

この度はたいへんお世話になりました。
改めて御礼を申し上げます。
・ツリー全体表示

【640】Re:csvを表に変換したいのですが。。。
回答  りる  - 09/5/19(火) 19:05 -

引用なし
パスワード
   かすみ さん、こんばんは。

>カンマで区切られた、データのn番目とn番目を抜き出して、表にするにはどのようにしたら良いでしょうか。
>sprit関数を使うということは調べられたのですが。。。
Spritの使い方はわりと最近EXCEL質問箱でもあったので省きますが。

>重ねての質問であり、誠に申し訳ないのですが、ヒントだけでも頂ければ幸いです。
csvを1行ずつ読み込み、Splitで分割してから必要なところだけをドッキングした文字列を作成し、文書にとりこんで表のオートフォーマットで体裁を整えています。

Sub tempo2()
  Dim s1 As String, s2 As Variant, s3 As String
  Ifile = "D:\Tempo\Tempo2.csv"
  Open Ifile For Input As #1
   Do Until EOF(1)
     Line Input #1, s1
     If s3 <> "" Then s3 = s3 & vbCrLf
     s2 = Split(s1, ",") 'カンマで区切る(0スタート)
     'エラーチェックはしていません
     '    |2番目    |6番目    |9番目    |12番目&13番目|
     s3 = s3 & s2(1) & "," & s2(5) & "," & s2(8) & "," & s2(11) & s2(12)
   Loop
  Close #1
  Application.Documents.Add
  With ActiveDocument.Content
   'テキストを文書に
   .Text = s3
   '表の体裁に
   .ConvertToTable Separator:=wdSeparateByCommas, AutoFitBehavior:=wdAutoFitFixed
  End With
End Sub
・ツリー全体表示

【639】Re:csvを表に変換したいのですが。。。
質問  かすみ  - 09/5/19(火) 15:11 -

引用なし
パスワード
   りるさん
朝早くから早速のご回答頂き、本当にありがとうございます。
ご教授頂いた方法を参考に、未熟な私にも目的が達せられました。
とても感謝しております。

大変恐縮なのですが、重複するような事例ですので重ねて質問をさせて頂きたいのです。
また別のものなのですが
カンマで区切られた、データのn番目とn番目を抜き出して、表にするにはどのようにしたら良いでしょうか。
sprit関数を使うということは調べられたのですが。。。

下記のようなCSVファイルです。
01,02,03,04,05,06,07,08,09,10,11,12,13,14,15
16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
31,32,33,34,35,36,37,38,39,40,41,42,43,44,45
以下数十行続く。数字は実際には、不規則な文字列。

表にするときには、カンマの何番目かは決まっています。
一行目 |2番目|6番目|9番目|12番目&13番目|
二行目 |2番目|6番目|9番目|12番目&13番目|
以下数十行続く。


重ねての質問であり、誠に申し訳ないのですが、ヒントだけでも頂ければ幸いです。
どうかよろしくお願いいたします。
・ツリー全体表示

【638】Re:csvを表に変換したいのですが。。。
回答  りる  - 09/5/19(火) 4:49 -

引用なし
パスワード
   かすみ さん、おはようございます。
>はじめて投稿いたします。
>Wordでのマクロ作成に苦心しており、お知恵を拝借したく投稿いたしました。
>CSVのファイルから、Wordで表作成をしたいのです。
>
>CSVファイルの中身が以下のようになっています。
>○○○,○○●●▲○○,■▲■,○○,○○,○○,▼▼●●,▼▲,▲▲●●,■■▲●
>○○○,○○▲▲■○○,■■●■,○○,○○,○○,▼●●,●▲●,▼●
>○○○,○○▲■▲○○,●▼,○○,○○,○○,■●▼,■▲,●■■
>以下数十行続く。

>○の文字列だけを取り除いて、カンマで区切られた部分を各セルに振り分けるイメージ。
>|●●▲|■▲■ |▼▼●●|▼▲ |▲▲●●|■■▲●
>|▲▲■|■■●■|▼●● |●▲●|▼●  |
>|▲■▲|●▼  |■●▼ |■▲ |●■■ |

>何卒よろしくお願いいたします。
○を抜いた後にセルがずれるかどうかわからないので、表にしてから行を削除しています。

Sub Tempo()
  Dim Ifile As String, s1 As String
  Dim RR As Long, CC As Long, Rmax As Long, Cmax As Long
  '新しい文書で作業
  Application.Documents.Add
  '読み込むファイル名
  Ifile = "C:\Tempo\Tempo.csv"
  'ファイルを読み込む『挿入→ファイル』
  With ActiveDocument.Content
   .InsertFile FileName:=Ifile, Range:="", _
   ConfirmConversions:=False, Link:=False, Attachment:=False
   '○を抜く『編集→置換』
   With .Find
     .Text = "○"
     .Replacement.Text = ""
     .Execute Replace:=wdReplaceAll
   End With
   '表に変換『罫線→表のオートフォーマット』
   .ConvertToTable Separator:=wdSeparateByCommas, AutoFitBehavior:=wdAutoFitFixed
   '追加した表を処理
   With .Tables(1)
     Cmax = .Columns.Count
     Rmax = .Rows.Count
     '
     For CC = Cmax To 1 Step -1
      s1 = ""
      '制御コード等を消した状態で全行空欄だったら列削除
      For RR = 1 To Rmax
        s1 = s1 & Replace(Replace(.Cell(RR, CC).Range.Text, Chr(13), ""), Chr(7), "")
      Next
      '全行空欄の列を抜く『罫線→削除→列』
      If s1 = "" Then .Columns(CC).Delete
     Next
   End With
   '保存したフリ
   .Parent.Saved = True
  End With
End Sub

『』内はマクロ記録した手順です。
ちなみに、13と7を消しているのは、確認してみたらそれが入っていたからです。
13はともかく何故7が入っているのかはよくわかりません。
・ツリー全体表示

【637】csvを表に変換したいのですが。。。
質問  かすみ  - 09/5/18(月) 14:52 -

引用なし
パスワード
   はじめて投稿いたします。
Wordでのマクロ作成に苦心しており、お知恵を拝借したく投稿いたしました。
CSVのファイルから、Wordで表作成をしたいのです。

CSVファイルの中身が以下のようになっています。
○○○,○○●●▲○○,■▲■,○○,○○,○○,▼▼●●,▼▲,▲▲●●,■■▲●
○○○,○○▲▲■○○,■■●■,○○,○○,○○,▼●●,●▲●,▼●
○○○,○○▲■▲○○,●▼,○○,○○,○○,■●▼,■▲,●■■
以下数十行続く。

▲、■、▼は同じ文字列でなく、一つずつ全く異なる文字列です。
○は不必要な文字列です。

上のCSVファイルを以下の様な表にしたいのです。
○の文字列だけを取り除いて、カンマで区切られた部分を各セルに振り分けるイメージ。
|●●▲|■▲■ |▼▼●●|▼▲ |▲▲●●|■■▲●
|▲▲■|■■●■|▼●● |●▲●|▼●  |
|▲■▲|●▼  |■●▼ |■▲ |●■■ |

何卒よろしくお願いいたします。
・ツリー全体表示

【636】Re:複数のフォーム対応
お礼  スーザン  - 09/5/10(日) 19:52 -

引用なし
パスワード
   りるさん。
ありがとうございます。
思っていた通りの事ができました。
また、いろいろ教えてください。
・ツリー全体表示

【635】Re:複数のフォーム対応
発言  りる  - 09/5/9(土) 9:53 -

引用なし
パスワード
   スーザン さん。おはようございます。

>りるさんが言うように、1つのフォームに4つのテキストボックスがあり、また1つのコマンドボタンがあるのです。

でしたら、これで。

○ボタンのあるフォームに
Private Sub CommandButton1_Click()
  Test TextBox1.Text, 7 ' 7行目に転記するテキストボックスのText
  Test TextBox2.Text, 8 ' 8行目     〃
  Test TextBox3.Text, 9 ' 9行目     〃
  Test TextBox4.Text, 10, Me  ' 10行目 〃
End Sub

○標準モジュールを挿入して以下を記述。
※前回書いたので省略。
・ツリー全体表示

【634】Re:フォームテキスト入力
お礼  すみん  - 09/5/7(木) 22:04 -

引用なし
パスワード
   りるさん。ありがとうございました。

やりたかった事が可能になりました。
・ツリー全体表示

【633】Re:複数のフォーム対応
発言  スーザン  - 09/5/7(木) 22:01 -

引用なし
パスワード
   りるさん
真剣に考えてくれているのに、私の用量が悪くて申し訳ないです。
りるさんが言うように、1つのフォームに4つのテキストボックスがあり、また1つのコマンドボタンがあるのです。
誠に申し訳ありませんでした。

上記の内容の場合、どのような記述をしたらよいのでしょうか?
・ツリー全体表示

【632】Re:複数のフォーム対応
発言  りる  - 09/5/7(木) 7:43 -

引用なし
パスワード
   スーザン さん、おはようございます。


>と言うのも、今住所宛名フォームを作成いており、4つの項目というのが、郵便番号、住所、方書、名前なのです。
4つのフォームじゃなくて、ひとつのフォームにテキストボックスを4つ置いたほうが管理しやすそうですね。
Exitのタイミングで順番に表示していくのかな?

>そのフォームに、必要項目を入力後に、コマンドボタンをクリックすることにより、ワード上に転写される方法を考えています。

ということなので、

○ボタンのあるフォームに
Private Sub CommandButton1_Click()
  Test UserFormA.TextBox1.Text, 7 'UserForm名とTextBox名を合わせてください
  Test UserFormB.TextBox1.Text, 8 ’上に同じ
  Test UserFormC.TextBox1.Text, 9 ’上に同じ
  Test Me.TextBox1.Text, 10, Me  ’上に同じ
End Sub

○標準モジュールを挿入して以下を記述。
Sub Test(arg1 As String, arg2 As Long, Optional arg3 As Object)
  'ドキュメントの先頭
  ActiveDocument.Range(Start:=0, End:=0).Select
  '3行目に移動(下に2つ移動)
  Selection.MoveDown wdLine, arg2 - 1, wdMove
  'そこに文字を挿入(選択範囲の拡張なし)
  With Selection
   .InsertBefore arg1
   .Collapse Direction:=wdCollapseEnd
  End With
  'フォームを閉じる
  If Not arg3 Is Nothing Then arg3.Hide
End Sub
・ツリー全体表示

【631】Re:複数のフォーム対応
質問  スーザン  - 09/5/6(水) 14:35 -

引用なし
パスワード
   りる さん、こんにちは。
昨日は、回答ありがとうございました。

実は、各フォームにボタンはなく、4つのフォームに1つのボタンなのです。
と言うのも、今住所宛名フォームを作成いており、4つの項目というのが、郵便番号、住所、方書、名前なのです。
そのフォームに、必要項目を入力後に、コマンドボタンをクリックすることにより、ワード上に転写される方法を考えています。

結構無謀な挑戦なんですけどね。
・ツリー全体表示

【630】Re:複数のフォーム対応
回答  りる  - 09/5/5(火) 20:27 -

引用なし
パスワード
   スーザン さん、こんばんわ。

>具体的に言いますと、フォームが複数あり、ワードのシートに転記したいのです。
>
>フォームAの情報を、ワード上の7段目
>フォームBの情報を、ワード上の8段目
>フォームCの情報を、ワード上の9段目
>フォームDの情報を、ワード上の10段目に、入力後、コマンドボタンをクリックして、ワード上にそれぞれ転記する。

内容からすると、マルチページで分岐したほうがよさそうですが、フォームが4つあるということでしょうか?
それぞれのフォームにCommandButton1とTextBox1があるとして(オブジェクト名が違う場合はそれに合わせてください)。

○FormAに。
Private Sub CommandButton1_Click()
  Test TextBox1.Text, 7, Me
End Sub

○FormBに。
Private Sub CommandButton1_Click()
  Test TextBox1.Text, 8, Me
End Sub

○FormCに。
Private Sub CommandButton1_Click()
  Test TextBox1.Text, 9, Me
End Sub

○FormDに。
Private Sub CommandButton1_Click()
  Test TextBox1.Text, 10, Me
End Sub

○標準モジュールを挿入して以下を記述。
Sub Test(arg1 As String, arg2 As Long, Optional arg3 As Object)
  'ドキュメントの先頭
  ActiveDocument.Range(Start:=0, End:=0).Select
  '3行目に移動(下に2つ移動)
  Selection.MoveDown wdLine, arg2 - 1, wdMove
  'そこに文字を挿入(選択範囲の拡張なし)
  With Selection
   .InsertBefore arg1
   .Collapse Direction:=wdCollapseEnd
  End With
  'フォームを閉じる
  If Not arg3 Is Nothing Then arg3.Hide
End Sub

A〜Cのボタンはフォームの切り替えで、Dだけ転記の場合は、
○FormAに。
Private Sub CommandButton1_Click()
  Me.Hide
  UserFormB.Show
End Sub

○FormBに。
Private Sub CommandButton1_Click()
  Me.Hide
  UserFormC.Show
End Sub

○FormCに。
Private Sub CommandButton1_Click()
  Me.Hide
  UserFormD.Show
End Sub

○FormDに。
Private Sub CommandButton1_Click()
  Test UserFormA.TextBox1.Text, 7
  Test UserFormB.TextBox1.Text, 8
  Test UserFormC.TextBox1.Text, 9
  Test Me.TextBox1.Text, 10, Me
End Sub

◎標準モジュールは上と同じ。

フォームを切り替えるよりもマルチページやフレームで対応するほうが簡単かもしれないですね。
・ツリー全体表示

14 / 45 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
207518
(SS)C-BOARD v3.8 is Free