Excel VBA質問箱 IV

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

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


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

【51636】ブックを分けましたが。 すず 07/9/27(木) 16:30 質問[未読]
【51645】Re:ブックを分けましたが。 neptune 07/9/27(木) 21:04 発言[未読]
【51652】Re:ブックを分けましたが。 すず 07/9/28(金) 14:21 質問[未読]
【51655】Re:ブックを分けましたが。 neptune 07/9/28(金) 15:58 回答[未読]
【51658】Re:ブックを分けましたが。 すず 07/9/28(金) 16:33 回答[未読]
【51659】Re:ブックを分けましたが。 neptune 07/9/28(金) 17:23 発言[未読]
【51662】Re:ブックを分けましたが。 neptune 07/9/28(金) 21:54 回答[未読]

【51636】ブックを分けましたが。
質問  すず  - 07/9/27(木) 16:30 -

引用なし
パスワード
   いよいよ集大成。
1つのブックにシートが大量になってしまったため、
マスタとその他2つの計3つに分けました。

しかし、今まで動いていたマクロが動かなくなりました。

マスタのブックのWorkbookモジュールの所に

  Dim wApp1 As Excel.Application, wApp2 As Excel.Application

  Set wApp1 = New Application
   wApp1.Visible = True
   wApp1.Workbooks.Open "C:\Documents and Settings\デスクトップ\hoge.xls"

  Set wApp2 = New Application
   wApp2.Visible = True
   wApp2.Workbooks.Open "C:\Documents and Settings\デスクトップ\hogehoeg.xls"
として、マスタ以外の2つのブックを開くように指定しました。

そしてマスタのブックには
Private Sub test1()

  Dim wApp1 As Workbook
  On Error Resume Next
  Set wApp1 = Workbooks("C:\Documents and Settings\デスクトップ\hoge.xls")

  Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet, i As Long
  
 '処理対象のシートを明確にするために変数にセット
  Set ws1 = ThisWorkbook.Worksheets("マスタ")
  Set ws2 = wApp1.Worksheets("sheet1")
  Set ws3 = wApp1.Worksheets("sheet2")
 '変数を作成
  Dim AB As Long, BA As Long
 'SUMIFで合計する
  i = 8
  With ActiveSheet
    Do Until .Cells(i, 6).Value = ""
      AB = Application.WorksheetFunction.SumIf _
         (ws2.Range("C7:C441"), ws1.Range("F" & i).Value, ws2.Range("E7:E441"))
      BA = Application.WorksheetFunction.SumIf _
         (ws3.Range("C7:C47"), ws1.Range("F" & i).Value, ws3.Range("F7:F47"))
      If AB > BA Then
      ws1.Range("G" & i).Value = AB - BA
      ElseIf AB < BA Then
      ws1.Range("G" & i).Value = BA
      End If
      i = i + 1
    Loop
  End With

End Sub

としました。
マスタと同じ内容のセルをhoge.xlsのsheet1とsheet2から探し出し、
マスタに反映させる、というものです。

一切数字が反映されなくなってしまったのですが、
コード自体が間違っているのでしょうか?

というか、マスタ以外の2つのブックが永遠に開かれていくという罠に陥っておりますが。

【51645】Re:ブックを分けましたが。
発言  neptune  - 07/9/27(木) 21:04 -

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

>コード自体が間違っているのでしょうか?
恐らくそう思います。
もう一度自分が何をしているかを考えてみたほうが良いです。
コードの一行一行を理解することをお勧めします。

【51652】Re:ブックを分けましたが。
質問  すず  - 07/9/28(金) 14:21 -

引用なし
パスワード
   >neptune さん

neptuneさんの言うとおり、見直してみました。
そして最初のopenの箇所は修正致しました。
  Dim i As Integer, k As Integer
  Dim ws3 As Object

  ChDir "C:\Documents and Settings\デスクトップ"
  Workbooks.Open Filename:= _
    "C:\Documents and Settings\デスクトップ\hoge.xls", UpdateLinks:=0

  ChDir "C:\Documents and Settings\デスクトップ"
  Workbooks.Open Filename:= _
    "C:\Documents and Settings\デスクトップ\hogehoge.xls", UpdateLinks:=0

しかし、やはりその下のコードが起動しません。
さっぱり分かりません。
With Activesheetがws1に効いているから、
ws2やws3を見に行かないのでしょうか?


>▼すず さん:
>こんにちは
>
>>コード自体が間違っているのでしょうか?
>恐らくそう思います。
>もう一度自分が何をしているかを考えてみたほうが良いです。
>コードの一行一行を理解することをお勧めします。

【51655】Re:ブックを分けましたが。
回答  neptune  - 07/9/28(金) 15:58 -

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

修正版をよく見ずに書いてしまったので1回削除してしまいました。^ ^;
で、2回目のコメントです。

キツイResを付けたので改造以来なら放置かなと思っていたのですが、
がんばりましたね。^ ^

>neptuneさんの言うとおり、見直してみました。
>そして最初のopenの箇所は修正致しました。
>  Dim i As Integer, k As Integer
>  Dim ws3 As Object
>
>  ChDir "C:\Documents and Settings\デスクトップ"
>  Workbooks.Open Filename:= _
>    "C:\Documents and Settings\デスクトップ\hoge.xls", UpdateLinks:=0
>
>  ChDir "C:\Documents and Settings\デスクトップ"
>  Workbooks.Open Filename:= _
>    "C:\Documents and Settings\デスクトップ\hogehoge.xls", UpdateLinks:=0
>しかし、やはりその下のコードが起動しません。
その下のコードってtest1の事ですか?それならtest1をCallしてやってますか?

>With Activesheetがws1に効いているから、
>ws2やws3を見に行かないのでしょうか?
ここまでの疑問ですが、wApp1 はどこに行ったのでしょう?
test1プロシージャも直しましたか?

#全体像がよく見えません。

【51658】Re:ブックを分けましたが。
回答  すず  - 07/9/28(金) 16:33 -

引用なし
パスワード
   >neptune さん

ご回答ありがとうございます!
頑張りました(*^-^*)


再度現状のコードを載せさせてください。

マスタのブックのWorkbookモジュールの所に

  Dim i As Integer, k As Integer
  Dim ws3 As Object

  ChDir "C:\Documents and Settings\デスクトップ"
  Workbooks.Open Filename:= _
    "C:\Documents and Settings\デスクトップ\hoge.xls", UpdateLinks:=0

  ChDir "C:\Documents and Settings\デスクトップ"
  Workbooks.Open Filename:= _
    "C:\Documents and Settings\デスクトップ\hogehoge.xls", UpdateLinks:=0
として、マスタ以外の2つのブックを開くように指定。
※Workbookモジュールにはこれ以上の記載はありません。
※"wApp"は使用せず、マクロの記録をそのまま貼ることにしました。

そしてマスタのシートも変更しました。
  Dim tBK1 As Workbook
  Set tBK1 = Workbooks("C:\Documents and Settings\デスクトップ\hoge.xls")
  Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet, i As Long

  Set ws1 = ThisWorkbook.Worksheets("マスタ")
  Set ws2 = tBK1.Worksheets("sheet1")
  Set ws3 = tBK1.Worksheets("sheet2")
 '変数を作成
  Dim AB As Long, BA As Long
 'SUMIFで合計する
  i = 8
  With ActiveSheet
    Do Until .Cells(i, 6).Value = ""
      AB = Application.WorksheetFunction.SumIf _
         (ws2.Range("C7:C441"), ws1.Range("F" & i).Value, ws2.Range("E7:E441"))
      BA = Application.WorksheetFunction.SumIf _
         (ws3.Range("C7:C47"), ws1.Range("F" & i).Value, ws3.Range("F7:F47"))
      If AB > BA Then
      ws1.Range("G" & i).Value = AB - BA
      ElseIf AB < BA Then
      ws1.Range("G" & i).Value = BA
      End If
      i = i + 1
    Loop
  End With

 End Sub

マスタと同じ文字の入ったセルをhoge.xlsで参照し、
それに付随する数値をhoge.xlsのsheet1とsheet2から
引っ張ってきて反映するようにしているつもりです。
※sheet1とsheet2は各々データベース的イメージです。

今はインデックスが有効範囲にない、と怒られています。

【51659】Re:ブックを分けましたが。
発言  neptune  - 07/9/28(金) 17:23 -

引用なし
パスワード
   ▼すず さん:

こういう事ですか?

'////////////ThisWorkBookモジュール////////////////
Private Sub Workbook_Open()

  Dim i As Integer, k As Integer
  Dim ws3 As Object

  ChDir "C:\Documents and Settings\デスクトップ"
  Workbooks.Open Filename:= _
    "C:\Documents and Settings\デスクトップ\hoge.xls", UpdateLinks:=0

  ChDir "C:\Documents and Settings\デスクトップ"
  Workbooks.Open Filename:= _
    "C:\Documents and Settings\デスクトップ\hogehoge.xls", UpdateLinks:=0

End Sub

'////////////標準モジュール////////////////
Sub test1()
Dim tBK1 As Workbook
  Set tBK1 = Workbooks("C:\Documents and Settings\デスクトップ\hoge.xls")
  Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet, i As Long

  Set ws1 = ThisWorkbook.Worksheets("マスタ")
  Set ws2 = tBK1.Worksheets("sheet1")
  Set ws3 = tBK1.Worksheets("sheet2")
 '変数を作成
  Dim AB As Long, BA As Long
 'SUMIFで合計する
  i = 8
  With ActiveSheet
    Do Until .Cells(i, 6).Value = ""
      AB = Application.WorksheetFunction.SumIf _
         (ws2.Range("C7:C441"), ws1.Range("F" & i).Value, ws2.Range("E7:E441"))
      BA = Application.WorksheetFunction.SumIf _
         (ws3.Range("C7:C47"), ws1.Range("F" & i).Value, ws3.Range("F7:F47"))
      If AB > BA Then
      ws1.Range("G" & i).Value = AB - BA
      ElseIf AB < BA Then
      ws1.Range("G" & i).Value = BA
      End If
      i = i + 1
    Loop
  End With
End Sub

もし、こうならtest1プロシージャを実行する時は絶対確実に目的のシートが
ActiveSheetになっていますか?

>今はインデックスが有効範囲にない、と怒られています
どこでですか?

>Set tBK1 = Workbooks("C:\Documents and Settings\デスクトップ\hoge.xls")
は既に開いているから
Set tBK1 = Workbooks("hoge.xls")
でOKじゃないですか?

【51662】Re:ブックを分けましたが。
回答  neptune  - 07/9/28(金) 21:54 -

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

よ〜くソースを見ました。Bookを開くのはこれで良いのでは?
Private Sub Workbook_Open()
  Const cPath1 As String = "C:\Documents and Settings\デスクトップ\hoge.xls"
  Const cPath2 As String = "C:\Documents and Settings\デスクトップ\hogehoge.xls"

  Workbooks.Open cPath1 , UpdateLinks:=0
  Workbooks.Open cPath2 , UpdateLinks:=0
End Sub

>今はインデックスが有効範囲にない、と怒られています
恐らくBook名か、シート名を間違えているだけです。

>Application.WorksheetFunction.SumIf _
         (ws2.Range("C7:C441"), ws1.Range("F" & i).Value, ws2.Range("E7:E441"))
というのを使ったことが無いのでなんとも言えませんが、問題ないと思います。
with activesheet
・・・
end with
以外のところは、Book名か、シート名、range 等をまともに書いていれば問題ないです。

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