Woindows2000にOffice2000のWordとExcelとPowerPointだけをインストールしました。(Accessなどその他のものはインストールはせず)
その後、Excel97で実行していたExcelのファイルを起動させてマクロを実行したところ、
「”VBA5.DLL”のファイルが読み込めない」
という旨のメッセージが表示されてマクロが実行できなくなりました。
何度か再インストールを繰り返したのですが改善されていません。
どのように対処すればよろしいのでしょうか?
お知恵を拝借したく思っています。

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

A 回答 (1件)

こんにちは。

maruru01です。
おそらく"VBA5.DLL"というファイルがないのではないでしょうか?
そのExcelファイルのマクロが実行出来る環境のシステムフォルダで、"VBA5.DLL"を探して、今使用している環境のシステムフォルダ(Windows2000なら、c:\WINNT\system32)に入れてやればいいかも知れません。
的を外していたらすみません。
では。

この回答への補足

一応、マクロが動く他のPCで検索をすると、
このようなファイルは見つかりませんでした。

補足日時:2001/10/18 12:45
    • good
    • 0

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

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

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

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

Qexcelのマクロでrangeの選択がうまくいきません。

excelのマクロでrangeの選択がうまくいきません。
以下のマクロをsheet2に書きました。testcopyは動きますが、testcopy2は動きません。なぜなのでしょうか。どうすればいいのでしょうか。それ以外のマクロの部分との関係から、cellsを使い、数字を使ってrangeの処理をしたいのです。よろしくお願いします。

Sub testcopy()
Worksheets("sheet1").Range("B3:C10").Copy
Worksheets("sheet2").Range("e5").Select
ActiveSheet.Paste
End Sub

Sub testcopy2()
Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy
Worksheets("sheet2").Range("e5").Select
ActiveSheet.Paste
End Sub

Aベストアンサー

>testcopyは動きますが、testcopy2は動きません

testcopyは「動作したり、しなかったりする」が正しい表現です。
  要するに今回testcopyが動いたのは▼たまたま▼ということです。

testcopy2 は当然ながらエラーになります。
何れにしろ、両方ともに問題があるということです。
その問題点は2つあります。

(1)アクティブでないシートのセルはSelect(Activate)できない
(2)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


これを踏まえて、、、、
---------------
●testcopy●

これが動作するのは
Sheet【2】がアクティブな状態で実行する場合です

Sheet【1】がアクティブな状態で実行すると
  Worksheets("sheet2").Range("e5").Select
ここで、問題点(1)の理由によりエラー。
で、先ずシートを選択、次にセルを選択と2段階にしないといけません。

  Worksheets("sheet2").Select
  ActiveSheet.Range("E5").Select

----------------
●testcopy2●

▼Sheet【1】がアクティブな状態で実行
  testcopyと同じ場所、同じ理由でエラー

▼Sheet【2】がアクティブな状態で実行
  Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy
  ここで、問題点(2)により、エラー。
 
 Cellsの前にシートオブジェクトがないので
 Cells(3, 2), Cells(10, 3)はアクティブなSheet【2】のセルとみなされ
 (★実際はちょと違う場合もありますが今回はそう★)

 Worksheets("sheet1").Range(  ← Sheet【1】
 Cells(3, 2), Cells(10, 3))   ← Sheet【2】

このようにSheet【1】【2】が混在していることになり、エラー
で、Cellsの前にシートを付加してセルがどのシートのセルか明示してやる

Worksheets("sheet1").Range(Worksheets("sheet1").Cells(3, 2), Worksheets("sheet1").Cells(10, 3)).Copy
  
---------------------------------
で、質問者のコードを修正すると
'-------------
Sub testcopy()
 Worksheets("sheet1").Range("B3:C10").Copy
 With Worksheets("sheet2")
   .Select
   .Range("E5").Select
   .Paste
 End With
End Sub
'-------------

Sub testcopy2()
 With Worksheets("sheet1")
   .Range(.Cells(3, 2), .Cells(10, 3)).Copy
 End With
 With Worksheets("sheet2")
   .Select
   .Range("E5").Select
   .Paste
 End With
End Sub
'--------------

●ただ今回のような単純なコピーの場合は
 既出の回答にあるようにSelectなしで書くのがふうつです。
'-----------
Sub testcopy111()
 Worksheets("sheet1")
   .Range("B3:C10").Copy Worksheets("sheet2").Range("E5")
 End With
End Sub
'-----------
Sub testcopy222()
 Worksheets("sheet1")
  .Range(.Cells(3, 2), .Cells(10, 3)).Copy Worksheets("sheet2").Range("E5")
 End With
End Sub
'-----------

今回の件は重要事柄ですので覚えておきましょう。
以上です。
 

>testcopyは動きますが、testcopy2は動きません

testcopyは「動作したり、しなかったりする」が正しい表現です。
  要するに今回testcopyが動いたのは▼たまたま▼ということです。

testcopy2 は当然ながらエラーになります。
何れにしろ、両方ともに問題があるということです。
その問題点は2つあります。

(1)アクティブでないシートのセルはSelect(Activate)できない
(2)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


これを踏まえて、、、、
-...続きを読む

Q(実行時エラー5852)ExcelデータをWordに差し込んだ後、Wordファイルを分割するマクロ

同じような質問を多数みかけるのですが、回答を見ても解決できなかったので質問させてください。

ExcelデータをWordに差し込んで帳票を作りました。
印刷は一括で行えば良いのですが、個別にメール添付して送る必要があるため、差し込んだWordをそれぞれ個別に分割する作業をマクロで行いたいと思っています。

マクロはWEB上に出回っているものとほぼ同じで、他のファイルで全く同じ作業をしていたので、現在使用しているほかのWordファイル(正常に動いているもの)からコピーして利用することにしました。

1、差込を設定したWordに他のファイルからマクロをコピーして実行すると実行時エラー5852が出る
2、問題なく動くマクロがあるWordファイルをコピーし、内容を今回使用する帳票に書き換えて実行した場合は、エラーも出ずに問題なく作業が行える。※しかし既に帳票を整えてしまったため、できれば1の方法で行いたいです


実際に使用しているマクロコードとエラーは次のとおりです。
【コピー&貼り付けで使用しているマクロ】
Sub XXXX依頼シート()
Dim i As Long, LRec As Long
With ThisDocument.MailMerge
.DataSource.ActiveRecord = wdLastRecord
LRec = .DataSource.ActiveRecord
For i = 1 To LRec
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
.DataSource.FirstRecord = i
.DataSource.LastRecord = i
.DataSource.ActiveRecord = i
.Execute Pause:=True
ActiveDocument.SaveAs ThisDocument.Path & "\" & _
.DataSource.DataFields(20).Value & ".doc", wdFormatDocument
'ファイル名に使うフィールド(例では14番目)
ActiveDocument.Close
Next i
End With
End Sub
----------------------------------------------------------------
Private Sub Document_New()

End Sub

【エラー】
実行時エラー '5852'
指定したオブジェクトが見つかりません。
※デバッグをすると、4行目の「.DataSource.ActiveRecord = wdLastRecord」が黄色くなります



オブジェクトの指定がうまく行っていないのかな?とも思っているのですが、マクロも何も、難しいことはさっぱりわからず...わらをもつかむ思いで、質問させていただきました。
よろしくお願いいたします。

同じような質問を多数みかけるのですが、回答を見ても解決できなかったので質問させてください。

ExcelデータをWordに差し込んで帳票を作りました。
印刷は一括で行えば良いのですが、個別にメール添付して送る必要があるため、差し込んだWordをそれぞれ個別に分割する作業をマクロで行いたいと思っています。

マクロはWEB上に出回っているものとほぼ同じで、他のファイルで全く同じ作業をしていたので、現在使用しているほかのWordファイル(正常に動いているもの)からコピーして利用することにしました...続きを読む

Aベストアンサー

No.1の回答者です。
私もマクロについては初心者を少し卒業した程度の知識しかないので、
何が問題なのか知らずに使ったりしている場合もあります。

今回のマクロについても、何が問題なのかを理解しないままNo.3の回答をしているので、追加のアドバイスができないと書きましたが、補足やお礼にある内容を読んで、私なりに少し理解した部分がありました。
No.3の回答内容も、モジュールの使い方を理解していなかったために、
マクロの記載先(保存先)を間違えていました。

今回の場合、マクロを実行している差し込み用文書の文書名にVBEにて、
記載先がProject(文書名)における標準モジュールとしてのModule1などに記載しないと、「Active~~」などのコマンドが実行してするときに
アクティブになっている文書が違ってしまうことがあるということで、
エラーになるようです。

例えば文書名の標準モジュール以外に記載した場合に、ActiveRecordや
ActiveDocumentなどのコマンドの参照しているアクティブとなる文書が
マクロを記載している文書ではなく、別のものを参照してしまうことが
あり、そのためにエラーになるらしいです。
マクロの記載先が標準テンプレート(Normal)にした場合や、文書名の
ThisDocumentモジュールに記載した場合には、コマンドを実行していく
段階でActiveRecordがNormalなどのテンプレートだと、差し込みデータ
を持っている文書とは違うものなのでエラーになったり、私が間違えた
ThisDocumentモジュールに記載すると、ActiveDocumentがマクロを実行
している文書ではなく別に開いてしまう新規文書がアクティブな文書に
なるので、データーソースのフィールド名の参照ができなくなるので、
エラーになるようです。

「Active~~」などのコマンドをマクロとして記載する場合、マクロの
記載先を注意しないと、アクティブとなるオブジェクトが変わってきて
エラーとなるようです。

No.3の回答は、記載先がThisDocumentだったためにアクティブ文書で、
「4198:コマンドは正常終了できませんでした」というエラーが発生し
マクロを実行している文書と違う保存先であるActiveDocument.SaveAs
のコマンドが動いてしまい、同じエラーが私の環境でも起きてしまい、
前の回答内容となってしまいました。
これを
ThisDocument.SaveAs ThisDocument.Path & "\" & _
.DataSource.DataFields(10).Value & ".doc", wdFormatDocument
のように書けば、記載先の問題は起きずエラーも出ないのですが、別の
問題である[保存]ダイアログが表示されるようになるので、使い勝手が
悪くなります。

*************************************************

> NormalとProjectの2つが
Normalは、Word全体で使われる汎用テンプレートの名前であり、文書を
開いている場合は、常に参照されるテンプレートになります。

ここにマクロを記載すると、すべての文書で使えるようになるために、
コマンドの書き方を誤ると、開いているすべての文書に影響する場合が
あります。
また、アドインとして別のテンプレートを参照した場合には、Normalと
違ったTenplatePrject(テンプレート名)でも表示されます。

単純にProject(ファイル名)であれば、その文書に直接マクロを保存する
ものであり、他のファイルに影響を与えることはありません。
このProjectにもThisDocumentのモジュールと、挿入した標準モジュール
としてのモジュール名と、参照先Normalのように関連するテンプレート
の名前が付いたものがあると思います。
それぞれが違ったオブジェクトとして利用するようですが、現時点での
私は違いをはっきりと理解していません。ボヤっとした感じでの理解は
しているつもりですが、利用するときでの注意点などは知っているとは
言えないようです。

マクロの保存先としてテンプレートと文書があり、それぞれ違った対象
として利用するものですね。

http://www.hi-ho.ne.jp/tomita/tips/tips_wd_000.html
http://www5d.biglobe.ne.jp/Jusl/BunsyoWordUp/WordUp12.html
*************************************************

フィールドの個数と、そのフィールドを指定する場合のエラーが起きる
違いは検証していませんので分かりません。おそらく、フィールドの数
によるエラーが起きることはないと思いますよ。

No.1の回答者です。
私もマクロについては初心者を少し卒業した程度の知識しかないので、
何が問題なのか知らずに使ったりしている場合もあります。

今回のマクロについても、何が問題なのかを理解しないままNo.3の回答をしているので、追加のアドバイスができないと書きましたが、補足やお礼にある内容を読んで、私なりに少し理解した部分がありました。
No.3の回答内容も、モジュールの使い方を理解していなかったために、
マクロの記載先(保存先)を間違えていました。

今回の場合、マクロを実行している差...続きを読む

QRange("K" & TR).Formula = で、セルにマクロで式を書きたいのですが

よろしくお願いします。いつもgooの皆さんには大変お世話になっています
エクセルは2013です

わけあって、セルにマクロで式を書いています
例えば TRは行を表す変数ですが
Range("K" & TR).Formula = "=IFERROR(AY" & TR & ","""")" と書いたマクロの結果は
=IFERROR(AY43,"") という式がRange("K" & TR) に書かれます

それでは、いま、マクロで下記のように書いているコード(TRは行を表す変数です)
Range("Z" & i) = Range("Z" & i - 1) - Range("AG" & TR) * 10000 は
Range("Z" & i).Formula = 
で書く場合、=の右側をどう書いたら良いでしょうか

色々とやってみたのですが狙った式になりません

この場合 変数 i を使っているので、もしかしたら、そもそも無理なことでしょうか

うまく説明できていませんがよろしくお願いします

Aベストアンサー

No.1です。申し訳ありません大ボケな回答をしていましました。

要するに↓ってことですよね? また勘違いしていたらスミマセン。

Range("Z" & i).Formula = "=Z" & i - 1 & "-AG" & TR & " * 10000"

Qマクロを実行すると2つのBookで実行されてしまう

AというBookとBというBookを同時に開いています。
どちらにもそれぞれ違った複数のマクロを登録しています。
マクロの中にはAの内容をBにコピーするというマクロもありますので、この2つは同時に開いておく必要があります。

困っているのはAのマクロを実行するとBでも同じように実行されてしまうのです。
マクロによってはその現象が起きないマクロもあります。
逆にBのマクロを実行してもAでは何も起きません。

Aのマクロを作成登録してる時にBも開いていたからでしょうか?
この現象がいつから起きたのか分かりません。
例えばAの表の内容を一括で消すマクロを実行すると、
Bの方でも消えてしまうのです。
Aのマクロの内容を見てもBでも動作させるような内容はありません。

何度おこなっても同じです。

どうすれば元に戻せますか?
数時間かけて作成したマクロが無駄になってしまい困っています。

宜しくお願いします。

Aベストアンサー

>何度おこなっても同じです。

・・・ということは、マクロに記述されている通りに実行すると、そのような結果になると考えられます。
逆に言えば、そのような結果が得られるようにマクロが組まれているということで、(そのつもりではないのでしょうが)そうなっている可能性が非常に高いと思われます。

QVBA マクロ実行時エラー’1004RangeクラスのPasteSpecialメソッドが失敗

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

*********************************************************
*********************************************************
Sub 日報別ファイルに保存したい1()
Worksheets("日報").Range("A3:AF36").Copy
With Workbooks.Add
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells.Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

ApplicationDisplayAlerts = True '同名FILEが存在する場合'
ActiveWorkbook.SaveAs Filename:= _
"c:\日報\" & ActiveSheet.Range("J2") & "年" & ActiveSheet.Range("l2") & "月" & ActiveSheet.Range("n2") & "日_日報.xls" _
, FileFormat:=xlNormal
.Close file


End With

End Sub

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

***********...続きを読む

Aベストアンサー

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-------------------------------------------
''もし、そのままでダメでしたら、 ' Application.EnableEvents = False 'イベントの介入を阻止する のところのコメント・ブロック('コードの手前のアポストロフィ)を外して、再度試してみてください。

Sub 日報別ファイルに保存したい2()
Dim myRng As Range
Set myRng = Worksheets("日報").Range("A3:AF36")
 ' Application.EnableEvents = False 'イベントの介入を阻止する

With Workbooks.Add
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteColumnWidths, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteFormats, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 
  Application.CutCopyMode = False
 
 ApplicationDisplayAlerts = True '**これは、そのままでは必要ないはずです。'
 
 ActiveWorkbook.SaveAs Filename:="c:\日報\" & ActiveSheet.Range("J2") & "年" & _
                 ActiveSheet.Range("l2") & "月" & _
                 ActiveSheet.Range("n2") & "日_日報.xls", _
                 FileFormat:=xlNormal
 .Close file
End With
Set myRng = Nothing
'Application.EnableEvents = True 'イベントマクロの活動を戻す

End Sub

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-----------------------------------------...続きを読む

QExcelからワード文書の文字置換を実行する(ワードでのマクロも)

ワードの文書中の文字列をマクロで書き換える。
準備:ワード文書(「文書1.docx」)にて 
本文中に 「すずき」
表に 「すずき」
ヘッダー、フッターに 「すずき」
ふたつのTextBox中に 「すずき」

ワードのマクロ、エクセルでのマクロを、とにかく、試行錯誤で完成させました。
しかし、意味が分からない部分があります。
下記にて①、②、③、そして、安定の観点からのサジェスチョンを
お願いしたいと思います。
方法は、これだけではないと思います。多分、使うクラス、メンバーの違い
だと思います。何がしかのサジェスチョンをいただければ幸いです。
宜しくお願い致します。
尚、環境は Windows10(Windows8.1 32bitからup),Office2010です。

'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Sub ワードでのマクロ()
Dim sec As Section
Dim hdr As HeaderFooter
Dim i as Integer

' 文章全体に対して、置換を実行する=====================
ActiveDocument.Range(0, 0).Select ’①必要性はない
Selection.WholeStory       ’①仮に入れるなら、どんな場合?

strFind = "すずき"
strReplace = "鈴木"

With Selection.Find
.Text = strFind
.Replacement.Text = strReplace
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With

' フッターに対して、置換を実行する=====================
For Each sec In ActiveDocument.Sections ’②For eachの必然性?
For Each hdr In sec.Footers        ’②同様に
With hdr.Range.Find ’3回,回るが、フッタが3つあるわけではない!?
.Text = strFind
.Replacement.Text = strReplace
.Forward = True
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next
Next

' ヘッダーに対して、置換を実行する=====================
For Each hdr In ActiveDocument.Sections.Item(1).Headers
’③Itemを使うことでも、OKであったが、やはりメンバーはitem(1)だけのようだ。
' このからくりはどうなっているのであろうか?
With hdr.Range.Find
.Text = strFind
.Replacement.Text = strReplace
.Forward = True
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next

'Shapeオブジェクトに対して置換実行=================
For i = 1 To ActiveDocument.Shapes.Count 
’For NextはTextBoxの数だけ。従って理解可。
ActiveDocument.Shapes(i).Select
Selection.Find.ClearFormatting       
Selection.Find.Replacement.ClearFormatting 
With Selection.Find
.Text = strFind
.Replacement.Text = strReplace
.Forward = True
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next i
End Sub

'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Sub エクセルでのマクロ()
Dim WdApp As Word.Application
Dim WdDoc As Word.Document

'ワード 文章全体に対して、置換を実行する===================
Set WdDoc = GetObject("C:\文書1.docx") ’ワード文書をオープン
Set WdApp = WdDoc.Application
WdApp.Visible = True
WdDoc.Activate
strFind = "すずき"
strReplace = "鈴木"
With WdDoc.Content.Find
.Text = strFind
.Replacement.Text = strReplace
.Forward = True
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With

' フッターに対して、置換を実行する=====================
Dim sec As Word.Section
Dim hdr As Word.HeaderFooter
For Each sec In WdDoc.Sections
For Each hdr In sec.Footers
With hdr.Range.Find
.Text = strFind
.Replacement.Text = strReplace
.Forward = True
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next
Next

' ヘッダーに対して、置換を実行する=====================
For Each hdr In WdDoc.Sections.Item(1).Headers
With hdr.Range.Find
.Text = strFind
.Replacement.Text = strReplace
.Forward = True
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next

'Shapeオブジェクトに対して置換実行=================
Dim myShape As Word.Shape
For Each myShape In WdDoc.Shapes
myShape.TextFrame.TextRange.Find.ClearFormatting
myShape.TextFrame.TextRange.Find.Replacement.ClearFormatting
With myShape.TextFrame.TextRange.Find
.Text = strFind
.Replacement.Text = strReplace
.Forward = True
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next
WdApp.Quit

End Sub

ワードの文書中の文字列をマクロで書き換える。
準備:ワード文書(「文書1.docx」)にて 
本文中に 「すずき」
表に 「すずき」
ヘッダー、フッターに 「すずき」
ふたつのTextBox中に 「すずき」

ワードのマクロ、エクセルでのマクロを、とにかく、試行錯誤で完成させました。
しかし、意味が分からない部分があります。
下記にて①、②、③、そして、安定の観点からのサジェスチョンを
お願いしたいと思います。
方法は、これだけではないと思います。多分、使うクラス、メンバーの違い
だと思い...続きを読む

Aベストアンサー

No.1の回答者です。
お礼を読みました。VBAでステップインを使ってマクロの動作確認を
しているのですね。
私は、マクロについて少しずつ理解している最中であり、高度な処理を
するようなものは、理解もできていませんし書くこともできません。
ですから、いくつかの疑問に対しては、私なりに理解している範囲での
回答になりますので、違っている場合もあります。


お礼の1.について
> Selectionを入れることで、動きました
そうですか。私も理解しているわけではないのですが。
'ActiveDocument.Range(0, 0).Select
このコメントブロックを解除してもダメだったのでしょうか?

変数rngを本文領域でも使えるようにする方法もあります。
Set rng = ActiveDocument.Range(Start:=0, End:=0)
With rng.Find
.Text = strFind
.Replacement.Text = strReplace
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
私の環境では、これで動作します。


お礼の2.について
> ' セクションごとのヘッダー・フッターで指定
> For Each sec In ActiveDocument.Sections

繰り返しが必要なのは、SectionオブジェクトにはHeadersプロパティと
Footersプロパティがあり、HeadersFootersコレクションオブジェクト
を持つためです。ここには3つの定数があり、それぞれに対して指定を
する必要があるためです。
http://www.relief.jp/itnote/archives/word-vba-header-footer-link-previous.php

さらに、セクション数が複数の場合に、セクション1と次のセクション
との関係で、前セクションとリンク(前と同じ)が切れている場合に、
指定した置換設定が続いているセクションでは実行されないためです。

このことから、セクションを指定する場合は、必要なので記入します。


お礼の3.について
お礼の2.と関連しますが、HeadersFootersコレクションオブジェクト
の3つの定数ごとに処理をしますので、3回の処理をします。
 wdHeaderFooterEvenPages
 wdHeaderFooterFirstPage
 wdHeaderFooterPrimary
これをセクションごとのヘッダーとフッターで繰り返すためです。


お礼の4.について
テキストボックスのみのロックなどがあることすら知りません。
Wordだけで作成したテキストボックスなのでしょうか?
(Excelなら、個別にロックできるので)
Wordにも[編集の制限]がありますが、保護を開始して制限する範囲に、
テキストボックスのみがあるとは思えないのですが?
エラーになる部分のテキストボックスを直接確認してみてはいかが。

今回のエラーが、何が影響しているのか私にはわかりません。
On Errorステートメントでエラーを無視することはできそうですが、
これを使うのは原因がわかっている場合のほうが良いみたいです。
http://officetanaka.net/excel/vba/statement/OnError.htm

ちなみに、Wordのバージョンなどの環境を書いたほうが、お互いの
違いによるトラブルを避けることができると思いますよ。
私の場合はWord2013なのですが、No.1の回答で提示したマクロは、
以前所持していたWord2002でも実行できたと思います。

No.1の回答者です。
お礼を読みました。VBAでステップインを使ってマクロの動作確認を
しているのですね。
私は、マクロについて少しずつ理解している最中であり、高度な処理を
するようなものは、理解もできていませんし書くこともできません。
ですから、いくつかの疑問に対しては、私なりに理解している範囲での
回答になりますので、違っている場合もあります。


お礼の1.について
> Selectionを入れることで、動きました
そうですか。私も理解しているわけではないのですが。
'ActiveDocument.Range(0, 0)...続きを読む

QExcelマクロでRange("A1:A5,C1:C5")をCellsで書きたいのですが

マクロ初心者です。
Excelマクロでグラフを作成するときに、元データを指定する所で、
Source:=Range("A1:A5,C1:C5")とするような場合、
「A1」とかアルファベットでの番地指定ではなく、
Cellsを用いて書きたいのです。

Source:=Range("A1:A5")であれば、
Source:=Range(Cells(1, 1), Cells(5, 1))と書けばいいことは分かるのですが、範囲指定を複数にする場合が分からないのです。

よろしくお願いします。

Aベストアンサー

Unionを使用したらできると思います。

Source:=Union(Range(Cells(1, 1), Cells(5, 1)), Range(Cells(1, 3), Cells(5, 3)))

今Excelがインストールされてないパソコンで作業していないので確認はしていないのですが・・・。

よかったら参考にして下さい

QEXCEL・・検索ボタンをクリックするとマクロが実行されるようにしたい

EXCELでSheet1にデータを入力、Sheet2に検索結果抽出フォームを作成してあります。セルにキーワードを入力しマクロの実行でデータの抽出ができるように出来上がっています。
そこで、セルに入力→ツールバーからマクロの実行という作業を検索ボタンを作成し一発で検索ができるようにしたいのです。
キーワードの入力セルはC:3です。
よろしくお願いします。

Aベストアンサー

シートにボタンを貼り付ければいいのですか?
表示 ツールバー から
フォームを選び、ボタンを選び、シートの
任意の場所に ドラッグでボタンの大きさを
決めて、作成します。
マウスのボタンを外すと、マクロの登録ダイアログが
でてきますんで、ボタンに、作成したマクロを登録
すればボタンを押すとマクロの処理ができます。
キーワードの摂取(C:3)も マクロに組み込んで
おいては どうですか?

Qエクセルのマクロ(range)について

マクロの作りと理解の方法について教えてください。

今、日報を作り直しています。
以前作成した方は、このように作っていました。


Worksheets("日報").Select
Range("Q7:Q23").Value = Range("U7:U23").Value
Range("S7:S59").Value = Range("V7:V59").Value
Range("A1").Select
MsgBox " 転写を終了しました。"
End Sub


マクロでは複数の行列を指定していますが、1行だけ表すと、
具体的な表とデータの変化の仕方とするとこのようになっています。

M    O    Q     S       U     V
個数 金額  累計個数 金額金額 (=M+Q) (=O+S)
0、   0、   100、   1000、    100、   1000 
1,初期状態

10、  100、  100、   1000、    110、   1100
2,個数を入力すると、計算式を入力してあるUとVの数が変わる

10、  100、   110、   1100、    120、   1200
3,マクロを実行すると、UとVの数がQとSに入力され、計算式を入力してあるUとVの数がさらに変わる。

0、   0、    110、   1100、   110、    1100
4,MとOの数をゼロ(クリア)にすると、計算式を入力してあるUとVの数が変わる。     


なかなか理解できないのは、Range("Q7:Q23").Value = Range("U7:U23").Valueの部分で、
2,の後にマクロを実行すると、U 110、V 1100がQ 100とS 1000に書き込まれることです。
通常の計算式だと=は対象となったセルをそのまま表示していると思うのですがのですが、
マクロに書いてある式だと3,のところでUとVの数をQとSに書き込んであります。
なぜ=なのにマクロでは一方のセルに数を書き込んでいるのでしょうか。
また、QやSをUやVへ書き込んでいないのでしょうか。

どなたか詳しく教えていただけると幸いです。

マクロの作りと理解の方法について教えてください。

今、日報を作り直しています。
以前作成した方は、このように作っていました。


Worksheets("日報").Select
Range("Q7:Q23").Value = Range("U7:U23").Value
Range("S7:S59").Value = Range("V7:V59").Value
Range("A1").Select
MsgBox " 転写を終了しました。"
End Sub


マクロでは複数の行列を指定していますが、1行だけ表すと、
具体的な表とデータの変化の仕方とするとこのようになっています。

M    O    Q     S...続きを読む

Aベストアンサー

プログラミング言語では、一般的に、
「=」は、右辺から左辺への「代入」
を意味します。

マクロ = Visual Basic = プログラミング言語
なので、Excelにおける「=」とは少し意味合いが違っています。

Qマクロと次のマクロ実行の間の時間を指定

EXCELで、マクロを使ってSHEET1にワードアートを挿入し、
10秒経ってから(挿入した文字を読むための時間)
SHEET2に別のワードアートを挿入したいと思っています。

SHEET1にワードアートを挿入するマクロ(マクロ1)の実行から
SHEET2にワードアートを挿入するマクロ(マクロ2)実行までの
時間を指定するにはこの2つをどうつなげて記述すればよいでしょうか?

Aベストアンサー

OnTimeメソッドを使用して、指定時間後にマクロの起動を行うことが可能です

Sub Macro1()
' Macro1の処理(ワードアートの挿入)
 Application.OnTime Now + TimeValue("00:00:10"), "Macro2"
End If

Sub Macro2()
' Macro1の処理(ワードアートの挿入)
End If


人気Q&Aランキング