Excel VBA質問箱 IV

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

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


1607 / 13646 ツリー ←次へ | 前へ→

【73188】別のウィンドウを開いた後、当日日付ファイルのウィンドウをアクティブにし... ハクエン 12/11/26(月) 19:09 質問[未読]
【73189】Re:別のウィンドウを開いた後、当日日付フ... UO3 12/11/26(月) 19:58 発言[未読]
【73190】Re:別のウィンドウを開いた後、当日日付フ... ウッシ 12/11/26(月) 23:20 回答[未読]
【73194】Re:別のウィンドウを開いた後、当日日付フ... ハクエン 12/11/27(火) 11:44 お礼[未読]
【73195】Re:別のウィンドウを開いた後、当日日付フ... ウッシ 12/11/27(火) 12:18 回答[未読]

【73188】別のウィンドウを開いた後、当日日付ファ...
質問  ハクエン  - 12/11/26(月) 19:09 -

引用なし
パスワード
   VBA勉強中です、宜しくお願いします。
初歩的な部分で申し訳ないのですが教えてください。

題名の部分の作っていたのですが対象のウインドウをアクティブに出来ません
処理的には以下の流れです。
データ生成マクロ実行(ファイル名が「【作成中】004_台帳クローズチェック_yyyymmdd)
→処理終了
→別のデータ修正ファイルを開く
→データ生成マクロで出来たデータをデータ修正ファイルにコピペ ×
→データ修正
→データ生成ファイルに修正後データをコピペ ×

ファイル名が日付毎に作るので固定が出来ません。
一応以下の様に日付を取得しているのですが「実行時エラー'9'」が出ます。
デバッグ中tの値を確認しても当日日付は取得出来ています。
表示例:t = "【作成中】004_台帳クローズチェック_2012/11/26.xls"

Dim t As String
t = Date
t = "【作成中】004_台帳クローズチェック_" + Mid$(t, 21, 4) + Mid$(t, 25, 2) + Right(t, 27) + ".xls"
 Windows(t).Activate


基礎部分だと思うのですが、調べても解りませんでした。
どうかよろしくお願いします。 

【73189】Re:別のウィンドウを開いた後、当日日付...
発言  UO3  - 12/11/26(月) 19:58 -

引用なし
パスワード
   ▼ハクエン さん:

こんばんは

ブックをアクティブにしようとして 9 インデックスエラーがでるのは
その名前のブックが開かれていないからです。
Activate する前に MsgBox t で、アクティブにしようとしているブック名を
確かめてみられてはいかがでしょう。

なお、エラーとは関係ありませんが、

Windows(t).Activate

これは、

Workbooks(t).Activate

のほうが、より普通の書き方かもしれません。

【73190】Re:別のウィンドウを開いた後、当日日付...
回答  ウッシ  - 12/11/26(月) 23:20 -

引用なし
パスワード
       こんばんは

>表示例:t = "【作成中】004_台帳クローズチェック_2012/11/26.xls"

このファイル名は無効な名前では?

>Dim t As String
>t = Date
>t = "【作成中】004_台帳クローズチェック_" + Mid$(t, 21, 4) + Mid$(t, 25, 2) + Right(t, 27) + ".xls"

普通は「+」ではなくて「&」とします。

Mid$(t, 21, 4)とMid$(t, 25, 2)が何を取得しようとしているのか分かりません。

ファイル名として付けられる有効な名前としたら

t = "【作成中】004_台帳クローズチェック_" & Format(t, "yyyymmdd") & ".xls"

とかになるのでは?

[追加]
Activateする必要が有るのかどうかも検討して下さい。

【73194】Re:別のウィンドウを開いた後、当日日付...
お礼  ハクエン  - 12/11/27(火) 11:44 -

引用なし
パスワード
   UO3様
>ブックをアクティブにしようとして 9 インデックスエラーがでるのは
>その名前のブックが開かれていないからです。
>Activate する前に MsgBox t で、アクティブにしようとしているブック名を
>確かめてみられてはいかがでしょう。
むぅ、一応ブックは開いてるはずなのですが…
確認したtの値は t = "【作成中】004_台帳クローズチェック_2012/11/26.xls"でした、日付は取得出来ており、日付もあっていたのでなぜインデックスエラーなのかな・・・と

>なお、エラーとは関係ありませんが、
>Windows(t).Activate
>これは、
>Workbooks(t).Activate
>のほうが、より普通の書き方かもしれません。
なるほど、より普通の書き方という概念がまだ身についていませんのでもっと勉強をします。

ウッシ様
>表示例:t = "【作成中】004_台帳クローズチェック_2012/11/26.xls"
>このファイル名は無効な名前では?
そうでしたね、/が入るファイル名はありえないですね

>普通は「+」ではなくて「&」とします。
>Mid$(t, 21, 4)とMid$(t, 25, 2)が何を取得しようとしているのか分かりません。
ネットで色々探してたら似たような構文があったので参考にしていました、
Mid〜で【作成中】004_台帳クローズチェック_20121126.xlsファイルのyyyymmddを個々に取得しようとしてました、一応日付は取得していたので問題ないのかなと思っていました。

>ファイル名として付けられる有効な名前としたら
>t = "【作成中】004_台帳クローズチェック_" & Format(t, "yyyymmdd") & ".xls"
これに変更しましたら問題無く動作しました、ありがとうございます。


>[追加]
>Activateする必要が有るのかどうかも検討して下さい。
別ファイルを開いてから元ファイルへ転記する処理をしているのでブックのActivateをしなければならないかなと…まだやり方、考え方が未熟ですので色々考えたいと思います。


素早い回答ありがとうございました。
まだ何が普通の書き方、別の考え方がある等が理解してませんが少しずつ勉強したいと思います。

【73195】Re:別のウィンドウを開いた後、当日日付...
回答  ウッシ  - 12/11/27(火) 12:18 -

引用なし
パスワード
   こんにちは

>>普通は「+」ではなくて「&」とします。

VBAの場合、文字列の結合には「&」を使います。
数字を文字列として結合しようとして「+」を使うと加算されてしまうと思います。

>別ファイルを開いてから元ファイルへ転記する処理をしているのでブックのActivateをしなければならないかなと…まだやり方、考え方が未熟ですので色々考えたいと思います。

どのブックのどのシートのセルかをきちんと修飾してあげれば大抵の場合Activateする必要はないです。

Workbooks(t).Workheets("Sheet1").Range("A1").Value = "テスト"

のように。

1607 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free