Excel VBA質問箱 IV

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

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


3475 / 13644 ツリー ←次へ | 前へ→

【61982】相対指定して開いたファイルにシートを転記する方法 テンマ 09/6/15(月) 16:48 質問[未読]
【61984】Re:相対指定して開いたファイルにシートを... もも 09/6/15(月) 17:28 発言[未読]
【61985】Re:相対指定して開いたファイルにシートを... テンマ 09/6/15(月) 17:47 発言[未読]
【61986】Re:相対指定して開いたファイルにシートを... もも 09/6/15(月) 18:44 発言[未読]
【61991】Re:相対指定して開いたファイルにシートを... テンマ 09/6/16(火) 10:10 発言[未読]
【61992】Re:相対指定して開いたファイルにシートを... もも 09/6/16(火) 10:18 発言[未読]
【61994】Re:相対指定して開いたファイルにシートを... テンマ 09/6/16(火) 11:34 お礼[未読]

【61982】相対指定して開いたファイルにシートを転...
質問  テンマ  - 09/6/15(月) 16:48 -

引用なし
パスワード
   BVA初心者ですが、インターネットで調べても回答に辿り着かず質問させて頂きます。
エクセルのファイルAを開き、そのマクロで処理を実行しようとしています。
処理概要:1..エクセルのファイルAを開き、処理開始の釦を押す。
     2..テキストのファイルBをエクセル変換し開く。
     3..相対指定で、エクセルのファイルCを開き、
       2.で作成した、エクセルのシート1個丸ごと切り取り持ってくる。

条件:エクセルのファイルA及び、テキストのファイルBは、絶対位置指定で行う事が可能なので問題ないが、エクセルCは相対位置指定で行う必要があります。

エクセルのファイルCを絶対位置で指定する方法では、処理可能でしたが、
他のエクセルファイルのシートを、相対位置指定でフォルダを表示させ、
ユーザーに選択させ開いたシートに丸ごと切り取って持ってくる処理が出来ません。
ファイルを開く所まではいくのですが、相対位置指定な為、ファイル名が記述出来ません。
対処方法をご教授下さい。

【61984】Re:相対指定して開いたファイルにシート...
発言  もも  - 09/6/15(月) 17:28 -

引用なし
パスワード
   ▼テンマ さん:
こんにちは

>ファイルを開く所まではいくのですが、相対位置指定な為、ファイル名が記述出来ません。

「相対指定」というのが意味わからないのとコードの掲示が無いので
よくわかりませんが

Cブックを開くときにオブジェクト変数に格納してしまえば
問題ないのでは?

というよりファイル名が記述出来ない状態でどうやって開いているのか
知りたいですけど。。。

【61985】Re:相対指定して開いたファイルにシート...
発言  テンマ  - 09/6/15(月) 17:47 -

引用なし
パスワード
   ▼もも さん:書込み有難うございます。
ユーザー毎の集計処理を実施したく、
シートの中の以下部分のように直接指定すれば動くのですが
【Sheets(1).Move After:=Workbooks("プログラム調査.xls").Sheets】
保存先のシートがユーザー毎に違うので間接指定し、ダイアログで選択するようにしたのですが、ファイル名が特定出来ないなかで、どいった指定をしたらよいのかが解りません。

作成したシートは以下です。
Sub 処理ALL()
'*******************ファイル3.xlsを選択し開く******************
  Dim myCurDir As String
  Dim myFile As String
  Dim myTitle As String

  myTitle = "ファイルの選択" '実行前のカレントフォルダ記憶
  myCurDir = CurDir     'カレントフォルダ変更
  
   '*********************フォルダを指定して「ファイルを開く」ダイアログを呼び出す
  CreateObject("WScript.Shell").CurrentDirectory = "D:\新しいフォルダ\"
  myFile = Application.GetOpenFilename("Excelファイル,*.xls", , myTitle) 'カレントフォルダを元に戻す

  If myFile = "False" Then
    MsgBox "処理を中止します", vbOKOnly + vbExclamation, "処理中止"
  End If
  
  Workbooks.Open (myFile)

  CreateObject("WScript.Shell").CurrentDirectory = myCurDir
  If myFile = "False" Then
    MsgBox "キャンセルされました。"
  End If


'*******************ファイルB.csvを開く******************
 
  Workbooks.Open "C:\ABC\ファイルB.csv"
   
'*************シート名を日付にして新規作成する************

Dim MySh As Object, ws As Object
Dim NewShName As String
Dim i As Integer
Const MyDateRn As String = "M1" '←月日の入力セル


Set MySh = Worksheets("test")         '取り込むファイル名
Set ws = Sheets.Add(Before:=Worksheets(1))
  MySh.Cells.Copy Destination:=ActiveSheet.Range("A1")
  NewShName = Format(Date, "YYYY年MM月DD日")
  
  On Error GoTo ErrTrap
    ws.Name = NewShName 'シート名の設定
  On Error GoTo 0
    Range(MyDateRn).Value = Date
    
    Sheets(1).Select
    Sheets(1).Move After:=Workbooks("プログラム調査.xls").Sheets(1) '書き込むファイル名
    
    Sheets(2).Select
    Application.DisplayAlerts = False
    Windows("test.csv").Activate
    ActiveWindow.Close
    Application.DisplayAlerts = True
  Exit Sub
'******************************************************
ErrTrap:     i = i + 1
    NewShName = Format(Date, "YYYY年MM月DD日")
    NewShName = NewShName & "(" & i & ")" 'シート名に連番付与
  Resume
End Sub

【61986】Re:相対指定して開いたファイルにシート...
発言  もも  - 09/6/15(月) 18:44 -

引用なし
パスワード
   ▼テンマ さん:
>保存先のシートがユーザー毎に違うので間接指定し、ダイアログで選択するようにしたのですが、ファイル名が特定出来ないなかで、どいった指定をしたらよいのかが解りません。

特定できないのは

>  Workbooks.Open (myFile)

ここで開いているファイルでしょうか?

もし、そうでしたらそこを

  Set myBook = Workbooks.Open(myFile)
と、変数に入れてしまえば

Sheets(1).Move After:=Workbooks(myBook.Name).Sheets(Workbooks(myBook.Name).Sheets.Count)

のように、myBook.Nameでブック名は指定できると思うのですが
どうでしょうか?

【61991】Re:相対指定して開いたファイルにシート...
発言  テンマ  - 09/6/16(火) 10:10 -

引用なし
パスワード
   ▼もも さん:
ご対応有難う御座います。
ご指摘の通り以下で開いたファイルです。
Workbooks.Open (myFile)

ご教授頂いた方法を試しました。

Set myBook = Workbooks.Open(myFile)
変数に入れ、
Sheets(1).Move After:=Workbooks(myBook.Name).Sheets(Workbooks(myBook.Name).Sheets.Count)
と変更した所、シートの移動までは無事動作しました。
有難う御座いました。

しかし、実際切り取り挿入した後のシートの位置ですが、
以前は、以下としていた為、移動先をSheetの2個目に常に挿入される形としていました。
Sheets(1).Move After:=Workbooks("シート3.xls").Sheets(1)
今回ご教授頂いた移動では、最終シートに追加されてます。
以前と同じようにシートのSheetの2個目(1個目と2個目のシートの間に入る)に
常に入るようにするには、どうしたら良いかが解りません。
大変お手数ですが、ご教授願えませんでしょうか?

理由:実際はその後のマクロで、常に2個目の(新規追加された)シートと3個目の(直近で作成された)シートの違いを比較し、違いがあった場合、1個目のシートに記述するようにしています。

【61992】Re:相対指定して開いたファイルにシート...
発言  もも  - 09/6/16(火) 10:18 -

引用なし
パスワード
   ▼テンマ さん:
>シートの移動までは無事動作しました。
>有難う御座いました。
よかったですね^^


>Sheets(1).Move After:=Workbooks(myBook.Name).Sheets(Workbooks(myBook.Name).Sheets.Count)
>しかし、実際切り取り挿入した後のシートの位置ですが、
>以前は、以下としていた為、移動先をSheetの2個目に常に挿入される形としていました。
>Sheets(1).Move After:=Workbooks("シート3.xls").Sheets(1)
>今回ご教授頂いた移動では、最終シートに追加されてます。
>以前と同じようにシートのSheetの2個目(1個目と2個目のシートの間に入る)に
>常に入るようにするには、どうしたら良いかが解りません。
>大変お手数ですが、ご教授願えませんでしょうか?

これは
>Sheets(1).Move After:=Workbooks(myBook.Name).Sheets(Workbooks(myBook.Name).Sheets.Count)
の部分を

Sheets(1).Move After:=Workbooks(myBook.Name).Sheets(1)
とするだけでOKですよ

【61994】Re:相対指定して開いたファイルにシート...
お礼  テンマ  - 09/6/16(火) 11:34 -

引用なし
パスワード
   ▼もも さん:
ご教授有難う御座いました。
やりたい事が無事出来ました。

まだまだ、理解が浅く、やりたい事を実施するにあたり
本を見たり、Webで検索しながらしか出来ませんが、
今後とも勉強していきたいと思います。

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