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と関連する良く見られている質問

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の回答内容も、モジュールの使い方を理解していなかったために、
マクロの記載先(保存先)を間違えていました。

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

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マクロを実行すると2つのBookで実行されてしまう

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

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

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

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

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

宜しくお願いします。

Aベストアンサー

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

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

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・・検索ボタンをクリックするとマクロが実行されるようにしたい

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

Aベストアンサー

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


人気Q&Aランキング

おすすめ情報