Excel VBA質問箱 IV

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

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


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

【61440】うまくLoopさせるには にしもり 09/5/8(金) 13:10 質問[未読]
【61441】Re:うまくLoopさせるには つん 09/5/8(金) 13:15 回答[未読]
【61443】Re:うまくLoopさせるには neptune 09/5/8(金) 13:46 回答[未読]
【61449】Re:うまくLoopさせるには にしもり 09/5/8(金) 17:07 お礼[未読]

【61440】うまくLoopさせるには
質問  にしもり  - 09/5/8(金) 13:10 -

引用なし
パスワード
   こんにちは。
このようなことをやっています。

Sub Macro1()

  Workbooks.Open Filename:="C:\_sales\北海道支店.xls"
  Columns("G:G").ColumnWidth = 11.65
  ActiveWorkbook.Save
   ActiveWorkbook.Close
 
  Workbooks.Open Filename:="C:\_sales\東京支店.xls"
  Columns("G:G").ColumnWidth = 11.65
  ActiveWorkbook.Save
   ActiveWorkbook.Close

  Workbooks.Open Filename:="C:\_sales\関西支店.xls"
  Columns("G:G").ColumnWidth = 11.65
  ActiveWorkbook.Save
   ActiveWorkbook.Close

End Sub

われながらいけてないとおもいます。
そこで(あいかわらず拙いですが、)次のようにしました。

Sub Macro1()

Dim MyBranch
Dim i As Integer

Do Until i = 2

If i = 0 Then
  MyBranch = "北海道支店.xls"
  i = i + 1
ElseIf i = 1 Then
  MyBranch = "東京支店.xls"
  i = i + 1
ElseIf i = 2 Then
  MyBranch = "関西支店.xls"

End If

   Workbooks.Open Filename:="C:\_sales\MyBranch"
  Columns("G:G").ColumnWidth = 11.65
  ActiveWorkbook.Save
   ActiveWorkbook.Close

Loop

End Sub

実行するとMyBranch.xlsが無い、と出ます。
どこが悪いかどなたかご教示いただけませんでしょうか。

【61441】Re:うまくLoopさせるには
回答  つん  - 09/5/8(金) 13:15 -

引用なし
パスワード
   にしもり さん:

>   Workbooks.Open Filename:="C:\_sales\MyBranch"

>実行するとMyBranch.xlsが無い、と出ます。

とりあえず、この件。
変数は「""」の中にいれちゃだめです。

"C:\_sales\" & MyBranch

かな。

【61443】Re:うまくLoopさせるには
回答  neptune  - 09/5/8(金) 13:46 -

引用なし
パスワード
   ▼にしもり さん:
こんにちは

>このようなことをやっています。
>Sub Macro1()
私なら面倒だし、充分見易いのでMacro1で満足しますけど、こういう方法が
判り易いという意味で元ソースを生かしてサンプル書いてみました。

※全く動かしてませんので、悪しからず。
※必要最低限の記述しかしていません。
Sub SampleMain()
  Dim MyBranch(2) As String
  Dim i As Long
  
  MyBranch(0) = "北海道支店.xls"
  MyBranch(1) = "東京支店.xls"
  MyBranch(2) = "関西支店.xls"
  
  For i = 0 To 2
    Call Sample(MyBranch(i))
  Next i
End Sub

'私ならという事で感想。
'・本当はBook名が判っているので、ActiveWorkbookは使いません。
'・同じ理由でColumns("G:G")も上位オブジェクトを指定します。
Private Sub Sample(pBookName As String)
  Workbooks.Open Filename:="C:\_sales\" & pBookName
  Columns("G:G").ColumnWidth = 11.65
  ActiveWorkbook.Save
  ActiveWorkbook.Close
End Sub

【61449】Re:うまくLoopさせるには
お礼  にしもり  - 09/5/8(金) 17:07 -

引用なし
パスワード
   ▼つんさん、neptuneさん:

仰るとおり変数を""の中に入れておりました。

また、LoopでなくForを使えばよいのですね。
上位オブジェクトというのを私は理解できてないので下記のようにまとめ、うまく動作しました。
ありがとうございました。

Sub Macro1()

 Dim MyBranch(2) As String
 Dim i As Long

  MyBranch(0) = "北海道支店.xls"
  MyBranch(1) = "東京支店.xls"
  MyBranch(2) = "関西支店.xls"

 For i = 0 To 2
  
  Workbooks.Open Filename:="C:\_sales\" & MyBranch(i)
  Columns("G:G").ColumnWidth = 11.65 
  ActiveWorkbook.Save
  ActiveWorkbook.Close

 Next i

End Sub
   

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