質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1253閲覧

修飾子が無効ですとエラーが出てしまう

seina

総合スコア12

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/09/20 01:50

###前提・実現したいこと
最終的に複数あるワークブックをまとめて、新たなひとつのワークブックにしたいです。必要なワークブックは特定のひとつのフォルダに入れてあります。しかしフォルダ内でファイル名が特定しづらいので新たにタイトルを書き換えることを考えています。ファイルに英語で期間が表示されていますので、そちらを利用し先頭に月と今の年号を追加したいです。 (例;〇〇Jan-July ならば 07_〇〇Jan-July)またそのタイトル変更したファイルを、新規のファイルにシートとして追加したいです。

###発生している問題・エラーメッセージ

Worksheets.Countにカーソルを合わせるとワークシート数が7と表示されるが、WBのワークシートは1.またCBのワークシートも1しかないため算出方法が分からない。またMstr.Titleの部分で、修飾子が無効ですと表示されてしまう。

###該当のソースコード
Sub test()
Dim WB As Workbook, CB As Workbook
Dim Mstr As String
Dim filefolder As String
Dim openname As String 'filefolderに存在するファイル

filefolder = "\rfs\EC_INTL\Common\IEC\DATA\TB\01_RDC" _
Workbooks.Add
ActiveWorkbook.SaveAs filename:=filefolder & "まとめ.xlsx", _ FileFormat:=xlNormal
Set WB = ActiveWorkbook 'まとめファイル

openname = Dir(filefolder & "*.xls?")
Do Until openname = ""
Workbooks.Open filename:=filefolder & openname
'フォルダーに存在するファイルを開ける
Set CB = ActiveWorkbook
Mstr = CB.Name 'フォルダーに存在するファイルに名前をつける

If Mstr = Dir(filefolder & "July.xls?") Then _
Mstr.Title = "07_jan" & openname

CB.Sheets.Copy after:=WB.Worksheets.Worksheets.Count
WB.Activate
CB.Close savechanges:=False
openname = Dir()
Loop

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラーで怒られている内容は、String型のMstrにTitleなんていうパラメータはないよ、ということだと思います。
文字列をセットしたいだけならMstr = "07_jan" & opennameだけで大丈夫です。

ところで提示いただいたソースコードは作りかけのコードか何かでしょうか?
上記の間違いもそうですが、実際にVBAで動かすためには、上記以外の部分でもいくつか修正が必要そうです。

例えば、VBAでは行末のアンダーバー_はその行で終わらず次の行まで1文として認識するのですが、filefolder = ~の行末にある_が次の行のWorkbooks.Addとつながるとは思えません。
怒られているMstr = ~の直前の行のIF文にも_がありますが、こちらはIF文に対応するEndIfもないようなので、直後の行と連結して1行型のIf文としている正しい使い方なのかもしれません。

またCopy文の第一引数(After)はシートのインデックス番号ではなくシートそのものを指しますので、WB.Worksheets(WB.Worksheets.Count)とするのが正しそうです。

今回はおそらく実行前にエラー発生で止まっているのだと思いますが、その先にもいくつか試練が待ち受けていそうですね。
がんばってひとつずつ潰していってください。

投稿2017/09/20 05:10

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問