Excel VBA質問箱 IV

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

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


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

【34668】シートの並列表示処理 ビギナー 06/2/9(木) 16:06 質問[未読]
【34670】Re:シートの並列表示処理 Kein 06/2/9(木) 16:29 発言[未読]
【34743】Re:シートの並列表示処理 ビギナー 06/2/10(金) 21:29 質問[未読]
【34772】Re:シートの並列表示処理 kobasan 06/2/12(日) 8:29 発言[未読]
【34671】Re:シートの並列表示処理 awu 06/2/9(木) 16:33 回答[未読]
【34744】Re:シートの並列表示処理 ビギナー 06/2/10(金) 21:30 質問[未読]

【34668】シートの並列表示処理
質問  ビギナー  - 06/2/9(木) 16:06 -

引用なし
パスワード
   こんにちは。
ichinose様のご協力により、2つのブックの差異個数のカウントと差異部分に色付けし、ブックの並列表示するVBAを組みました。しかし、私のPCではうまく並列表示できますが、サーバにファイルを置き他の人が実行すると、

  Windows.CompareSideBySideWith "book2"

でエラーが発生してしまいます。

何故でしょうか??

よろしくお願いいたします。


Private Sub CommandButton7_Click()
  book1.xlsとbook2.xlsを開く
  Workbooks.Open Filename:="C:\Documents and Settings\All Users\デスクトップ\book1.xls"
  Workbooks.Open Filename:="C:\Documents and Settings\All Users\デスクトップ\book2.xls"
  '並べて比較
  Windows.CompareSideBySideWith "book2"

  Dim sht1 As Worksheet
  Dim sht2 As Worksheet
  Dim radd As String
  Dim crng As Range
  Dim diffcnt As Long
  Set sht1 = Workbooks("book1").ActiveSheet
  Set sht2 = Workbooks("book2").ActiveSheet
  '     ↑比較する開いている二つのブック名を指定する
  radd = 検査セル範囲の取得(sht1, sht2)
  diffcnt = 0
  For Each crng In sht1.Range(radd)
    With crng
     If .Value <> sht2.Range(.Address).Value Then
       .Interior.ColorIndex = 3
       sht2.Range(.Address).Interior.ColorIndex = 4
       diffcnt = diffcnt + 1
       End If
     End With
    Next
  MsgBox "相違セル個数= " & diffcnt & " , vbOKOnly
  Set sht1 = Nothing
  Set sht2 = Nothing
End Sub
'=========================================================================
Function 検査セル範囲の取得(sht1 As Worksheet, sht2 As Worksheet) As String
  Dim r1 As Range
  Dim r2 As Range
  Dim mcol As Long
  Dim mrw As Long
  Set r1 = sht1.Range("a1").CurrentRegion
  Set r2 = sht2.Range("a1").CurrentRegion
  mcol = r1.Columns.Count
  If mcol < r2.Columns.Count Then mcol = r2.Columns.Count
  mrw = r1.Rows.Count
  If mrw < r2.Rows.Count Then mrw = r2.Rows.Count
  With sht1
   検査セル範囲の取得 = .Range(.Cells(1, 1), .Cells(mrw, mcol)).Address
   End With
  Set r1 = Nothing
  Set r2 = Nothing

End Function

【34670】Re:シートの並列表示処理
発言  Kein  - 06/2/9(木) 16:29 -

引用なし
パスワード
   >CompareSideBySideWith
というメソッドは、少なくともExcel2000にはありません。2002以降に新規で実装
されたものでしょうか。それなら当然ですが、2000以前のブックへ入れて実行すると
エラーになります。2000以前では、ウィンドウを並ばせるメソッドは Arrange を
使っていました。例えば横に並べるなら、↓このように書きます。試してみて下さい。

Windows.Arrange ArrangeStyle:=xlArrangeStyleVertical

あと
>サーバにファイルを置き
ということは、目的のブックの保存先が変更されているのでしょーか ? それなら
Openメソッドの引数に渡すパスも、正確に変更しないといけませんが。

【34671】Re:シートの並列表示処理
回答  awu  - 06/2/9(木) 16:33 -

引用なし
パスワード
   そのままでは、こちらでもエラーが出ます。

直前まで、book2.xls がアクティブなので、

Windows.CompareSideBySideWith "book1.xls"

とすれば、いいと思いますが、如何でしょうか。 .xls も付けて。

【34743】Re:シートの並列表示処理
質問  ビギナー  - 06/2/10(金) 21:29 -

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

こんばんは。

ご意見ありがとうございます。

ExcelのVerは一緒でした。

ブックの場所も正しかったです。

でも、できないということは、何かネットワーク上にファイルを置いた場合(本プログラムも含めて)、他の処理も必要になるのでしょうか?

>>CompareSideBySideWith
>というメソッドは、少なくともExcel2000にはありません。2002以降に新規で実装
>されたものでしょうか。それなら当然ですが、2000以前のブックへ入れて実行すると
>エラーになります。2000以前では、ウィンドウを並ばせるメソッドは Arrange を
>使っていました。例えば横に並べるなら、↓このように書きます。試してみて下さい。
>
>Windows.Arrange ArrangeStyle:=xlArrangeStyleVertical
>
>あと
>>サーバにファイルを置き
>ということは、目的のブックの保存先が変更されているのでしょーか ? それなら
>Openメソッドの引数に渡すパスも、正確に変更しないといけませんが。

【34744】Re:シートの並列表示処理
質問  ビギナー  - 06/2/10(金) 21:30 -

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

こんばんは。

ご意見ありがとうございます。

やはり、できませんでした。。。

何か、ネットワーク上で処理させる場合、プログラムの追加が必要なのでしょうか。。。

>そのままでは、こちらでもエラーが出ます。
>
>直前まで、book2.xls がアクティブなので、
>
>Windows.CompareSideBySideWith "book1.xls"
>
>とすれば、いいと思いますが、如何でしょうか。 .xls も付けて。

【34772】Re:シートの並列表示処理
発言  kobasan  - 06/2/12(日) 8:29 -

引用なし
パスワード
   おはようございます。

このマクロのあるbookとbook1.xlsとbook12.xls を同じフォルダに入れて、
下記のように変更して、このマクロを実行すると、サーバー上でも、うまく
動きました。

>  book1.xlsとbook2.xlsを開く
>  Workbooks.Open Filename:="C:\Documents and Settings\All Users\デスクトップ\book1.xls"
>  Workbooks.Open Filename:="C:\Documents and Settings\All Users\デスクトップ\book2.xls"
>  '並べて比較
>  Windows.CompareSideBySideWith "book2"


 
  'book1.xlsとbook2.xlsを開く
  Workbooks.Open Filename:=ThisWorkbook.Path & "\book1.xls"
  Workbooks.Open Filename:=ThisWorkbook.Path & "\book2.xls"
  '
  '並べて比較
  Windows.Arrange ArrangeStyle:=xlArrangeStyleVertical

のように変更。

私は、このように3つのBookがセットで関係している場合は、よく同じフォルダに入れて
ThisWorkbook.Pathをよく使います。試してみてください。

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