- ベストアンサー
このマクロを実行し、表示させるにはどうしたらよいですか?
恐れ入ります。初心者です。WinXP、Excel 2002を使用。VBAコードは読めません。 「本gooのカテゴリ」について、まだ把握してなく、別カテゴリで同質問してしまい、その回答者様に当「Office系ソフトのカテゴリ」へとご指示されました。 質問がダブってしまいましたが、よろしくお願い致します。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1432630 のページ の回答者No.2様のマクロを実行し、表示させるにはどうしたらよいですか? このままコピーしましたが、実行できませんでした。 私のやり方(解釈)が間違っていたのだと解りました。 別のコードを追加しないと、実行できないのでしたら、何かサンプル的コードで構いませんので、 このマクロを実行し表示させる方法が、おありでしたら教えてくださいませ。 1、コピー&ペーストから、詳しく教えて下さいませ。 2、Module1とModule2を個々のマクロで実行し、表示する方法も併せて教えて下さいませ。
- oshietecho-dai
- お礼率79% (263/330)
- オフィス系ソフト
- 回答数9
- ありがとう数7
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
書き方が悪かったですね。#8 の「サブルーチンには、~」以降は何故エラー になるのかの解説です。Workbooks.Open ~の部分は変更する必要はありませ ん。#8 での修正は次の部分だけです。 <修正前> ' ここで作成済みのマクロを呼び出す ----------------------- Call テスト(strFoundFile) '<--- 修正(ご自分のマクロ呼び出し) '--------------------------------------------------------- <修正後> 'ここで作成済みのマクロを呼び出す ------------------------ Call テスト(strFolderPath & strFoundFile) '--------------------------------------------------------- まずは、この部分だけ直して実行してみて下さい。それで、うまくいくと 思います。疑問があれば、再度補足して下さい。
その他の回答 (8)
- KenKen_SP
- ベストアンサー率62% (785/1258)
> フォルダの参照→OK→「Error(1004)、 > …xls`が見つかりません。ファイルおよびファイルの保存場所が正しいか > どうか確認してください。…。」となりました このような情報をいただけると非常に助かります。ありがとうございます^^ 原因は、完全に私のミスですね。すみません。 'ここで作成済みのマクロを呼び出す ------------------------ Call テスト(strFolderPath & strFoundFile) '--------------------------------------------------------- このように直してみて下さい。サブルーチンには、 「フォルダのパス」=ファイルの場所 を含めた情報を渡さなければなりませんでした。 × Workbooks.Open Filename:="test.xls" ファイル名は分かるが、どこにあるファイルなのか分からない -->ブックを開くことができず、1004番のエラー発生 ○ Workbooks.Open Filename:="C:\test.xls" ファイルの場所、ファイル名ともに分かるのでブックを開くことが可 どうでしょうか?
補足
大変恐れいります。 また、同じ→「Error(1004)、…」となりました。 ご確認ですが、 ' ブックを開く ---> 開かれたブックがアクティブになる Workbooks.Open Filename:=strFilename ↓を ' ブックを開く ---> 開かれたブックがアクティブになる Workbooks.Open Filename:="C:\test.xls" でよろしいでしょうか? 私の場合、今度は、Cドライブに「新しいフォルダ」として置いてみましたが、 Workbooks.Open Filename:="C:\*.xls" (しかし、これも、同じエラーでした) としなくてもよいのですね。 よろしくお願い致します。
- KenKen_SP
- ベストアンサー率62% (785/1258)
> ...下記のようにそのまま貼り付けてしまってよろしいでしょうか? 私が提示したサンプルを実行するなら、その通りです。それから、 ' ここで作成済みのマクロを呼び出す ----------------------- MsgBox strFoundFile '(EX) '--------------------------------------------------------- ↓ ' ここで作成済みのマクロを呼び出す ----------------------- Call テスト(strFoundFile) '<--- 修正(ご自分のマクロ呼び出し) '--------------------------------------------------------- も修正して下さい。 回答をよくお読みいただければ、その様に書いてあるはずです。私が回答 するときは専門用語は必要最小限しか使わず、なるべくご質問者様の立場 に立った回答になるように気をつけています。また、一度係わった以上は 私の回答なり、他の方の回答で、それなりの解決に至るまでは何度でも サポート致します。 もちろんそれが不十分であったり、ご質問の意図を外してトンチンカンな 回答をしてしまう場面も多々ありますが、少なくとも今回補足頂いた内容 は、 「聞く前に試してみる」 というのが抜けていると言うか、何と言うのでしょう、初心者とかの次元の 話では無い所に問題がある気がするのです。 「こうやってみたけど、うまくいかなかった。なぜか?」 という補足を頂けたら嬉しかったのですが....試してみればわかることで すよね。
補足
はい、2箇所修正して実行して見ましたが、フォルダの参照→OK→「Error(1004)、 `…xls`が見つかりません。ファイルおよびファイルの保存場所が正しいかどうか確認してください。…。」となりました。 但し、修正前は、 フォルダの参照→OK→Microsoft Excel→OK、OKで終了しました。 ちなみに、デスクトップにフォルダを作り、xlsファイルを2つ入れてあります。 以上よろしくお願い致します。
- KenKen_SP
- ベストアンサー率62% (785/1258)
▼ ご自分で作成されたマクロの修正 > そのマクロを走らせるとファイル名を聞いてきまして、そこでファイル名を > 入力してやれば、ある操作を施したあと自動的に上書き保存までしてくれる と前回のご質問にあります。例えば、こんな感じのマクロだとしましょう。 Sub テスト() Dim strFilename As String strFilename = InputBox("ファイル名は?") If strFilename = "" Then Exit Sub End If ' ブックを開く ---> 開かれたブックがアクティブになる Workbooks.Open Filename:=strFilename ' アクティブシートの A1 セルに値を書き込む ActiveSheet.Range("A1").Value = "Sample Data" ' 変更を保存して閉じる ActiveWorkbook.Close SaveChanges:=True End Sub これを次のように修正します。要はファイル名取得の部分が自動化されたので、 それを変数としてマクロに渡し、ブックを開く命令に使います。上と下の違い をよくご覧下さい。 Sub テスト(strFilename As String) '<---- <<注目>> If strFilename = "" Then Exit Sub End If ' ブックを開く ---> 開かれたブックがアクティブになる Workbooks.Open Filename:=strFilename ' アクティブシートの A1 セルに値を書き込む ActiveSheet.Range("A1").Value = "Sample Data" ' 変更を保存して閉じる ActiveWorkbook.Close SaveChanges:=True End Sub ▼ この修正されたマクロを、Module2 の末尾に貼り付けます ▼ 次に、マクロ「フォルダ内全ブックの順次処理」の次の様に修正します ' ここで作成済みのマクロを呼び出す ----------------------- MsgBox strFoundFile '(EX) '--------------------------------------------------------- ↓ ' ここで作成済みのマクロを呼び出す ----------------------- Call テスト(strFoundFile) '<--- 修正(ご自分のマクロ呼び出し) '--------------------------------------------------------- このような感じですが、よく意味が分からなければ、ご自分で作成された コードを補足して下さい。
補足
ご回答誠に有難うございます。 大変申し訳ありませんが、下記のようにそのまま貼り付けてしまってよろしいでしょうか? >▼ この修正されたマクロを、Module2 の末尾に貼り付けます End Sub Sub テスト(strFilename As String) '<---- <<注目>> If strFilename = "" Then Exit Sub End If ' ブックを開く ---> 開かれたブックがアクティブになる Workbooks.Open Filename:=strFilename ' アクティブシートの A1 セルに値を書き込む ActiveSheet.Range("A1").Value = "Sample Data" ' 変更を保存して閉じる ActiveWorkbook.Close SaveChanges:=True End Sub '■■■■■ 【 Module2 ここまで 】 ■■■■■■■■■■■■■■■■
- bonaron
- ベストアンサー率64% (482/745)
Office2003(たぶんXPも)だったら、 FileDialog が使えて、 フォルダの取得が簡単にできるんですけどね。 Accessユーザーにとっては、 ファイル名を取得できるだけでも大変な進歩です。
お礼
そうなんですね、どうも有難うございます。
- KenKen_SP
- ベストアンサー率62% (785/1258)
何気にクリックしたら私が前に書いたコードだったのでビックリしました^^; どうも混乱させてしまった様で、すみませんでした。 記述の方法は、他の回答者様がご説明下さいましたので省略しますが、前回書 いたコードにはバグがあって、、ルートフォルダを選択すると¥記号が2重に なってしまい、うまく動かなかったのかもしれません。 C:\\ <---こんな感じのパスが BrowseForFolder の戻り値になってしまう バグフィックスし、若干余計なモノをカット、必要なモノを多少加筆したもの を再掲しておきます。 UNC 変換部は、会社など複数の PC で使うには必要だと思いますので、残して おきました。フォルダ選択ダイアログは Shell を使った簡易な方法もあります が、環境により動作が微妙に違うなど不安定要素がありますので、あえて API を使ってます。 以下ソースコードです。 '■■■■■ 【 Module1 にコピー&ペースト 】 ■■■■■■■■■■■ Option Explicit ' フォルダ選択ダイアログ ' API Private Declare Function SHBrowseForFolder Lib "shell32.dll" ( _ lpbi As BROWSEINFO) As Long Private Declare Function SHGetPathFromIDList Lib "shell32" ( _ ByVal pidl As Long, ByVal pszPath As String) As Long Private Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" ( _ ByVal lpszLocalName As String, _ ByVal lpszRemoteName As String, _ cbRemoteName As Long) As Long Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal pv As Long) ' BROWSEINFO構造体 Private Type BROWSEINFO hwndOwner As Long pidlRoot As Long pszDisplayName As String lpszTitle As String ulFlags As Integer lpfn As Long lParam As Long iImage As Integer End Type Private Const CSIDL_DESKTOP = &H0 'デスクトップ Private Const BIF_RETURNONLYFSDIRS = &H1 'フォルダのみ Private Const MAX_PATH = 260 '----------------------------------------------------------------- ' @Description: フォルダ選択ダイアログ表示(右に\マークをつけてフォルダパスを返す) ' @Param : [strCaption] 省略可能 ダイアログに表示する文字列 ' @Param : [ConvertUNC] 省略可能 ネットワークドライブ名を UNC に変換 ' @Return : String '----------------------------------------------------------------- Public Function BrowseForFolder( _ Optional strCaption As String = "フォルダを指定して下さい", _ Optional blnConvUNC As Boolean = False) As String Dim udtBrowserInfo As BROWSEINFO Dim lngRet As Long Dim strPath As String With udtBrowserInfo .ulFlags = BIF_RETURNONLYFSDIRS .lpszTitle = strCaption .pidlRoot = CSIDL_DESKTOP End With lngRet = SHBrowseForFolder(udtBrowserInfo) If lngRet > 0 Then strPath = String$(MAX_PATH, vbNullChar) Call SHGetPathFromIDList(lngRet, strPath) Call CoTaskMemFree(lngRet) strPath = Left$(strPath, InStr(strPath, vbNullChar) - 1) If Right$(strPath, 1) <> "\" Then strPath = strPath & "\" End If If blnConvUNC Then Call ConvUNC(strPath) BrowseForFolder = strPath Else BrowseForFolder = vbNullString End If End Function ' ネットワークドライブ名を含むパスを UNC に変換する Private Sub ConvUNC(ByRef strPath As String) Dim strDRV As String Dim strBuf As String * MAX_PATH strDRV = Left$(strPath, 2) If strDRV Like "[A-Z]:" Then Call WNetGetConnection(strDRV, strBuf, MAX_PATH) If InStr(strBuf, vbNullChar) > 1 Then strPath = _ Left$(strBuf, InStr(1, strBuf, vbNullChar) - 1) _ & Mid$(strPath, 3) End If End If End Sub '■■■■■ 【 Module1 ここまで 】 ■■■■■■■■■■■■■■■■ '■■■■■ 【 Module2 にコピー&ペースト 】 ■■■■■■■■■■■ Option Explicit Sub フォルダ内全ブックの順次処理() Dim strFolderPath As String Dim strFoundFile As String Dim strMes As String Dim WB As Workbook '処理対象ファイル Const cnsTARGET_FILE As String = "*.xls" ' フォルダ選択ダイアログ表示 strFolderPath = BrowseForFolder(, True) ' 長さ0の文字列が返った場合はキャンセルとする If strFolderPath = vbNullString Then Exit Sub On Error GoTo ERROR_HANDLER ' フォルダ内のファイル検索 strFoundFile = Dir(strFolderPath & cnsTARGET_FILE) If strFoundFile = vbNullString Then MsgBox "指定された場所に対象ファイルはありません.", vbExclamation Exit Sub End If ' ファイルが見つからなくなるまでループ Do While strFoundFile <> vbNullString ' マクロが書かれたファイルは除外 If strFoundFile <> ThisWorkbook.Name Then 'ここで作成済みのマクロを呼び出す ------------------------ MsgBox strFoundFile '(EX) '--------------------------------------------------------- End If ' 再検索 strFoundFile = Dir() Loop TERMINATE: Exit Sub ERROR_HANDLER: Application.ScreenUpdating = True Select Case Err.Number Case Is = 52: strMes = "ドライブにアクセスできません." Case Else: strMes = Err.Description End Select MsgBox "Error(" & Err.Number & ")" & vbCrLf _ & strMes, vbCritical Resume TERMINATE End Sub '■■■■■ 【 Module2 ここまで 】 ■■■■■■■■■■■■■■■■
お礼
おかげさまで、実行、開くことができました。 大変恐れ入ります、どうも、有難うございました。 基本から順次勉強していきたいと思ってます。 私は、マクロの記録が少々できるぐらいですが、 1つだけ、お願いします。 フォルダ内のファイル.xlsを指定してきましたが、そこから進みませんが、このファイル.xlsにマクロを作成しておけば、OKボタンで実行されるのですか? それとも、 'ここで作成済みのマクロを呼び出す --------------- MsgBox strFoundFile '(EX) '------------------------------------------------ この点線間のどの部分に、自分の行いたいマクロコードを貼り付けるのですか? そしてOKボタンで実行されるわけですか? もしこの部分に貼り付けるとしたら、簡単なコードを「マクロの記録」で作成し、試しに実行してみようと思いますが、この場合の、記録スタート部分の操作だけが解りません。 お手数ですがよろしくお願い致します。
- Wendy02
- ベストアンサー率57% (3570/6232)
Wendy02です。 趣旨を理解してくださって、ありがとうございました。 >何かサンプル的コードで構いません でしたら、以下だけでも、サンプルコードとしては成り立っています。 MsgBox WB.Name '(EX) エラーが出る場合、どのようなエラーなのか、'1004 という番号が出るのか、それとも、他の番号なのか、ダイアログ・メッセージなのか、それを知りたいです。 コードが読めないとなると、もしかしたら、「標準モジュール」がお分かりにならないような気がします。 そのエラーの問題さえはっきりすれば、ある程度、マクロが分かる方ならアドバイスは可能かと思います。ただ、元のコードの改変は出来ませんね。 出来れば、段階的にVBAを学習していったほうがよいと思います。
お礼
度々、恐れ入ります。どうも有難うございます。 おかげさまで、NO.4様のコードで開くことができました。 未熟ですが、上記でサンプルのことを記載しておきました。
- akina_line
- ベストアンサー率34% (1124/3287)
こんにちは。 下記の手順で実行してください。 1.Excelを起動する。 2.メニューの[ツール]->[マクロ]->[Visual Basic Editor]を選択する。 3.別ウィンドゥでVBAのエディタが起動するので、その画面のメニューの[挿入]->[標準モジュール]を実行すると、「Module1」が挿入されます。 4.前回回答の「'■■■■■ 【 Module1 にコピー&ペースト 】 ■■■■■■■■■■■」から「'■■■■■ 【 Module1 ここまで 】 ■■■■■■■■■■■■■■■■」までを選択し、そこを右クリックして出るメニューの「コピー」を選びます。(特に最初の「'」を落とさないようにしてください。) 5.3で挿入した「Module1」の白地のところで右クリックして出るメニューから「貼り付け」を選ぶと、回答に記載されていたものが貼り付け(これをペーストと言います。)られます。 6.3の手順をもう一度行うと、「Module2」が挿入されます。 7.前回の回答の「'■■■■■ 【 Module2 にコピー&ペースト 】 ■■■■■■■■■■■」以降の部分を同様に「Module2」に貼り付けます。 8.[ツール]->[マクロ]を選ぶとウィンドの中に、「フォルダ内全ブックの順次処理」が出ると思いますので、右側の[実行]ボタンを押すと実行できます。 なお、Module1のルーチンはModule2のサブルーチンなので単独に実行はできません。 では。
お礼
ご詳細、どうもありがとうございました。 おかげさまで、No.4様のソースは何とか実行、開けました。
- trajaa
- ベストアンサー率22% (2662/11921)
当該質問見ました。 ん~。初心者の方にAPIを使わせるのは難しいのではと思います。 >ある操作を施して上書き保存するというマクロを作りました。 >VBAコードは読めません。 一見矛盾しているように見えますが、マクロの記録程度は出来るが、マクロコードの意味は理解していない。 と言ったレベルと言うことでしょうか? 今後、マクロを多用されますか? であれば、素直に参考書等を手に入れて、順序立てて学習された方が良さそうです。 今だけ、これだけ、動けば良いんだよと言う場合には。。。改めて回答します。
お礼
はい、マクロの記録が少々できるだけでございます。 おっしゃられるとおりです。 どうも有難うございました。
関連するQ&A
- このマクロを実行し、表示させるにはどうしたらよいですか?
初心者です。WinXP、Excel 2002を使用。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1432630 のページ の回答者No.2様のマクロを実行し、表示させるにはどうしたらよいですか? 私のやり方(解釈)が間違っているのだと思いますがこのままコピーし、実行してみましたが、エラーがでます。 1、コピー&ペーストから、もお少し、詳しく教えて 下さいませ。 2、Module1とModule2を個々のマクロで実行し、表示 する方法も併せて教えて下さいませ。
- ベストアンサー
- その他(インターネット・Webサービス)
- Excelマクロの[実行]ボタンが押せなくなった
今までちゅんと使えていたExcel2000マクロを、[ツール]-[マクロ]のマクロ画面から実行しようとしたら、[作成]以外のボタンがグレーになって押せなくなっていました。 そのマクロ自体は何も変更していません。 しいていうと、コードを別のところにコピーするためにVBエディタでコード表示させました。今もちゃんとコードはあります。 また実行できるようにする方法はありますか。VBエディタはほとんど使わないので、修復方法の見当がつきません・・・ よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 非表示シートのマクロ実行
マクロ処理をさせたいAシートを非表示にしてBシートにマクロボタンを置いて実行させたいのですが 非表示にすると実行できません。 Aシートは 計算処理を行い Bシートには 値だけを出したいので BシートからAシートのマクロ処理を実行したいと思っています。 非表示にしても別シートから実行出来る方法を教えてください。
- ベストアンサー
- その他(プログラミング・開発)
- マクロ実行後、表示がおかしくなる
マクロ実行後、表示がおかしくなる エクセル2003です。 たまになのですが、長いvbaコードを実行して、エクセル画面に戻ると、図のような状態になります。 A1など隠れた部分にも問題なく文字の投入はできます。 エクセルを再起動すれば元通りになりますが、これはエクセルのバグですか? 長いvbaコードで尚且つたまになので、どのコードでこの現象になるのかわかりません。 これは私だけでしょうか?
- ベストアンサー
- オフィス系ソフト
- モジュール内のマクロを全て実行させるには
エクセルのModule1に100のマクロがあるとします。 この100のマクロを一括処理させる方法を教えてもらいたいのですが。 ようするに実行ボタンを100回押さなくて済む方法です。 また100のマクロ名を一つ一つ記入しなくて済む方法です。
- ベストアンサー
- オフィス系ソフト
- マクロ実行中のメッセージ表示
お世話になります。 Excel2000マクロ実行中に、「処理中です」等のメッセージを表示したいのです。メッセージのUserFormを作成しましたが、マクロ実行中は、Caption(Formのタイトル部分)以外は、Formが白く表示されるだけです。ステップインで確認する時は正常に表示されます。 コードは、標準モジュールに UserForm1.Show (0) としました。 よろしくお願いいたします。 ※UserFormを使用する以外にも、メッセージを表示する方法があれば、それでも結構です。
- ベストアンサー
- オフィス系ソフト
- EXCELで”+100"を実行するマクロ
EXCELで、マクロを実行するたびに、そのセルに入っている数に100プラスされるマクロを作りたいのです。 意味がよく分からないかもしれませんが、 例えば、あるセルに"100"という数値が入っていて、 1回実行すれば100+100で"200"に、もう1度実行すると、200+100で"300"に。…という感じです。 私的に考えたのは、 別のセルに"そのセル+100"をする式を書き込み、 コピー&元のセルに値貼り付けをし、 式の入った別のセルをDELする… というのをマクロにしてみたのですが、 イマイチうまくないというか… よい方法があったら、アドバイスください。
- ベストアンサー
- オフィス系ソフト
- エクセルのマクロで別ファイル(エクセル)のマクロを実行させるには?
エクセルにおいてマクロを組んでいます. 1.実行させたいマクロAが組んであるファイル(Aファイルとします)が多数あります。またマクロAはモジュール内(Module1)に作っております。 2.1のマクロAを別のエクセルファイル(Bファイルとします)のマクロBで実行させたい. 上記のようなことを行いたいのですが可能でしょうか?さらに言えば、マクロBによってマクロAのプロシージャを指定して実行させることは出来るでしょうか? 現在は、マクロBによってマクロAを組んであるAファイルを開き、Aファイルのマクロの中にファイルを開いたときにマクロAを実行させる(イベントドリブン)ようにしています. 直接、マクロBでAファイルのマクロAを動かせるようになればマクロAにイベントドリブンなコードを組む手間がなくなるので、なんとかそのような事が出来ないでしょうか? どうか、詳しい方ご教授ください。 よろしくお願いいたします。。。
- ベストアンサー
- その他MS Office製品
- Excelでマクロ実行中に画面を固定する方法
Excelでマクロ(VBA)を実行しているとお考えください。 内容は他のシートのデータを別のシートにコピー&ペーストするとお考えください。 すると、画面がめまぐるしく動きます。 これをとめる方法をご存知の方教えていただければうれしいです。 (以前、やったことがあるんですが、忘れてしまいました) (また、検索で調べようとしたのですが、どのようなキーワードで検索すればいいのかわかりませんでした(私のキーワードでは見つかりませんでした)) よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- Excel2007VBAで、昨日作ったマクロが、なくなってしまいました
Excel2007VBAで、昨日作ったマクロが、なくなってしまいました。 マクロ名が残っているので、当該マクロを開くと実行ボタン等が空白で、作成ボタンのみ操作可能で、そのボタンを押すと中身は空白となっています。 そして、そこに、マクロの中身をコピーすると、Module 29 マクロ名 とか Module 32 マクロ名とかが、薄色で表示されますが、操作ができません。 なんとか元に戻したいのですが、その方法を、お教え頂けないでしょうか、よろしくお願い致します。
- ベストアンサー
- その他MS Office製品
お礼
度々、どうも有難うございました。自身の学習にもっと時間を費やすことに心がけたいと思いました。またよろしくお願い致します。