Excel VBA質問箱 IV

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

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


11578 / 13645 ツリー ←次へ | 前へ→

【15050】VBA参照設定の解除について 生茶 04/6/14(月) 14:31 質問[未読]
【15055】Re:VBA参照設定の解除について ichinose 04/6/14(月) 16:22 発言[未読]
【15061】Re:VBA参照設定の解除について 生茶 04/6/14(月) 17:28 回答[未読]
【15062】Re:VBA参照設定の解除について ichinose 04/6/14(月) 17:38 発言[未読]
【15065】Re:VBA参照設定の解除について 生茶 04/6/14(月) 18:45 お礼[未読]
【15273】Re:VBA参照設定の解除について 生茶 04/6/18(金) 14:56 質問[未読]
【15276】Re:VBA参照設定の解除について ichinose 04/6/18(金) 15:51 発言[未読]
【15348】Re:VBA参照設定の解除について 生茶 04/6/22(火) 9:07 お礼[未読]

【15050】VBA参照設定の解除について
質問  生茶  - 04/6/14(月) 14:31 -

引用なし
パスワード
   こんにちは。生茶です。

下記の様なAUTO_OPEN()の中で、データファイルにデータを書き込み、書き込み後
別の名前でファイルを保存しますが、データファイルには"LIST"というファイルが
参照設定されていています。別の名前でファイル保存する際、参照設定ほ解除したい
のですが、マクロ実行すると参照設定が解除されません。
ちなみに、On Error Resume Nextを削除し、実行するとで「中断モードでは入力
できません」というエラーメッセージが表示されます。
中断か、終了ボタンをクリックすると参照設定は解除されます。
エラーメッセージを回避し、参照設定を解除出来る方法をご存知の方いらっしゃい
ませんか!?

どうぞ宜しくお願い致します。


Public Sub AUTO_OPEN()

Application.ScreenUpdating = False
Application.DisplayAlerts = True

Application.CommandBars("Mail送信").Visible = True
Application.CommandBars("Visual Basic").Enabled = False

InitializeApp

Line:  If Worksheets("パラメータ").Range("K35") <> 1 Then

  Worksheets("パラメータ").Visible = True

  Worksheets("パラメータ").Range("K32").ClearContents
  Worksheets("パラメータ").Range("M32").ClearContents
  Worksheets("パラメータ").Range("O32").ClearContents
  
  Application.EnableEvents = True

  Application.Run "'List.xls'!Orderplacejudging_Open"
  
  If BClose = 1 Then
    Application.DisplayAlerts = False
    Application.CommandBars("Mail送信").Visible = False
    Application.CommandBars("Mail送信").Delete
    ThisWorkbook.Activate
    
    On Error Resume Next
    Application.VBE.activeVBProject.References.Remove Application.VBE.activeVBProject.References("LIST")
'    Debug.Print Err.Number
'    MsgBox Err.Number
    
    Workbooks("List.xls").Close SaveChanges:=False
    ActiveWorkbook.Close SaveChanges:=False
    Application.Quit
  ElseIf OK = 1 Then
    Worksheets("表紙").Select
    Application.CommandBars("Mail送信").Visible = True
    Worksheets("パラメータ").Visible = xlVeryHidden
    
    Application.Run "'List.xls'!flist"
    
    If Cancel_1 = 1 Then 'FeilSaveキャンセル
      GoTo Line: 'LINE:へジャンプ
    ElseIf Cancel_1 = 0 Then
      Show_Flg = 1
      Worksheets("パラメータ").Range("K35") = Show_Flg
      Application.Run "'List.xls'!Orderplacejudging_Close"
    End If
    Worksheets("パラメータ").Visible = xlVeryHidden
    
    On Error Resume Next
    Application.VBE.activeVBProject.References.Remove Application.VBE.activeVBProject.References("LIST")
'    MsgBox Err.Number
    
    ThisWorkbook.Save
    Workbooks("List.xls").Close SaveChanges:=False
    
    End If
 
ElseIf Worksheets("パラメータ").Range("K35") = 1 Then
    Worksheets("表紙").Select
    Application.CommandBars("Mail送信").Visible = True
    
    On Error Resume Next
    Application.VBE.activeVBProject.References.Remove Application.VBE.activeVBProject.References("LIST")
'    MsgBox Err.Number
    
    Workbooks("List.xls").Close SaveChanges:=False
End If

Worksheets("パラメータ").Visible = xlVeryHidden 'Sheet(パラメータ)の非表示

On Error Resume Next
Application.VBE.activeVBProject.References.Remove Application.VBE.activeVBProject.References("LIST")
'MsgBox Err.Number

Workbooks("List.xls").Close SaveChanges:=False

End Sub

【15055】Re:VBA参照設定の解除について
発言  ichinose  - 04/6/14(月) 16:22 -

引用なし
パスワード
   ▼生茶 さん:
こんにちは。
>
>下記の様なAUTO_OPEN()の中で、データファイルにデータを書き込み、書き込み後
>別の名前でファイルを保存しますが、データファイルには"LIST"というファイルが
>参照設定されていています。別の名前でファイル保存する際、参照設定ほ解除したい
>のですが、マクロ実行すると参照設定が解除されません。
>ちなみに、On Error Resume Nextを削除し、実行するとで「中断モードでは入力
>できません」というエラーメッセージが表示されます。
>中断か、終了ボタンをクリックすると参照設定は解除されます。
>エラーメッセージを回避し、参照設定を解除出来る方法をご存知の方いらっしゃい
>ませんか!?
>
>どうぞ宜しくお願い致します。
ご提示されたコードをきっちりトレースしていませんが、
参照設定の解除を行うのは、下のマクロが記述されている
ブックのプロジェクトですねよね?
これは、
「Thisworkbook.Vbproject」で取得して見て下さい。
例えば、生茶 さんがご提示されたマクロは長いので、
簡単な例で・・・・。

参照設定される「List.xls(プロジェクト名LIst)」には、標準モジュールに
'=======================================================
Sub test()
  ActiveWorkbook.Sheets(1).Cells(1, 1).Value = "ok"
End Sub

これだけのコードだとします。
この「List」を参照設定しているブックは、「reftest.xls」とします。


標準モジュールには、

'=================================================================
Sub auto_open()
  Call list.test
  If 参照設定解除(ThisWorkbook, "List") = 0 Then
   ThisWorkbook.SaveAs ThisWorkbook.Path & "\list33.xls"
   Workbooks("list.xls").Close False
   End If
End Sub
'===================================================================
Function 参照設定解除(bk As Workbook, renm As String) As Long
  On Error Resume Next
  With bk.VBProject
   .References.Remove .References(renm)
   End With
  参照設定解除 = Err.Number
  On Error GoTo 0
End Function

これでretest.Xlsを立ち上げてAuto_Openが実行されると、
保存された「list33.xls」は、参照設定が解除されています。
まず、これが正常に動作するか確認してみて下さい。


それから、

>  Application.EnableEvents = True
>
>  Application.Run "'List.xls'!Orderplacejudging_Open"
'   ↑ これですが、せっかく参照設定しているのに
'   Runメソッド要りませんよ!!
'   call list.Orderplacejudging_Open
'   でいけると思いますが・・・。
これは、ちょっと感じたので記述しておきました。

【15061】Re:VBA参照設定の解除について
回答  生茶  - 04/6/14(月) 17:28 -

引用なし
パスワード
   ▼ichinose さん こんにちは生茶です。

早速ご教授頂き大変ありがとうございます。
さて・・・ご教授頂いたとおりに確認させて頂きましたが・・・


>'=================================================================
>Sub auto_open()
>  Call list.test

  ↑動きませんでした・・・。
   Application.Run "'List.xls'!test"に変更すると動きました。

>  If 参照設定解除(ThisWorkbook, "List") = 0 Then
>   ThisWorkbook.SaveAs ThisWorkbook.Path & "\list33.xls"
>   Workbooks("list.xls").Close False
>   End If
>End Sub
>'===================================================================
>Function 参照設定解除(bk As Workbook, renm As String) As Long
>  On Error Resume Next
>  With bk.VBProject
>   .References.Remove .References(renm)

   ↑ 当初のご質問と同じ様にエラーメッセージが表示されました。。。
   上記の様にApplication.Run "'List.xls'!test"に変更した事が
   原因でしょうか!?


>   End With
>  参照設定解除 = Err.Number
>  On Error GoTo 0
>End Function
>
>これでretest.Xlsを立ち上げてAuto_Openが実行されると、
>保存された「list33.xls」は、参照設定が解除されています。
>まず、これが正常に動作するか確認してみて下さい。

 私のExcelの環境か、その他VBA参照設定の不備
 (何か別に参照設定しなければならない項目が有る)
 なのでしょうか!?

【15062】Re:VBA参照設定の解除について
発言  ichinose  - 04/6/14(月) 17:38 -

引用なし
パスワード
   ▼生茶 さん:
まず、Excel2000で当方で正常に作動している事を報告しておきます。


↓のコードが記述されているブックは、予め手動操作にて
ListというProject(List.Xls)に参照設定してある
という条件下で動作します。
これでダメなんですか?
>
>
>>'=================================================================
>>Sub auto_open()
>>  Call list.test
>
>  ↑動きませんでした・・・。
>   Application.Run "'List.xls'!test"に変更すると動きました。
>
>>  If 参照設定解除(ThisWorkbook, "List") = 0 Then
>>   ThisWorkbook.SaveAs ThisWorkbook.Path & "\list33.xls"
>>   Workbooks("list.xls").Close False
>>   End If
>>End Sub
>>'===================================================================
>>Function 参照設定解除(bk As Workbook, renm As String) As Long
>>  On Error Resume Next
>>  With bk.VBProject
>>   .References.Remove .References(renm)
>
>   ↑ 当初のご質問と同じ様にエラーメッセージが表示されました。。。
>   上記の様にApplication.Run "'List.xls'!test"に変更した事が
>   原因でしょうか!?
>
>
>>   End With
>>  参照設定解除 = Err.Number
>>  On Error GoTo 0
>>End Function
>>
>>これでretest.Xlsを立ち上げてAuto_Openが実行されると、
>>保存された「list33.xls」は、参照設定が解除されています。
>>まず、これが正常に動作するか確認してみて下さい。
>
> 私のExcelの環境か、その他VBA参照設定の不備
> (何か別に参照設定しなければならない項目が有る)
> なのでしょうか!?

【15065】Re:VBA参照設定の解除について
お礼  生茶  - 04/6/14(月) 18:45 -

引用なし
パスワード
   ▼ichinose さん:
>↓のコードが記述されているブックは、予め手動操作にて
>ListというProject(List.Xls)に参照設定してある
>という条件下で動作します。
>これでダメなんですか?

 申し訳ございません。。。
 キチンと参照設定出来ていなかった様です。。。  
 もう一度、参照設定して実行してみました。
 バッチリ動作致しました!
 誠にありがとうございました!


 

【15273】Re:VBA参照設定の解除について
質問  生茶  - 04/6/18(金) 14:56 -

引用なし
パスワード
   ichinose さん

以前、下記の様な内容でご教授頂きまして・・・
その節は大変ありがとうございました。(ペコ)

更にご質問がございます。

auto_open()が記述されているファイルのシートに書き込みをし
(以前お話しました通り、フォーム表示させパラメータを入力し
 シートに書き込みます)その後、別ファイル名で保存します。
要は、データを書き込む側は、「List.xls」側では無く、
「reftest.xls」側です。
そうしますと、参照設定は解除される様ですが、どうしてもエラー
メッセージが表示されてしまいます。

ちみなに、フォームを表示させキャンセルボタンをクリックする
とフォームを閉じ、「reftest.xls」ファイルの参照を解除して
ファイルを閉じるのですが、その時は参照設定は解除され、
エラー表示はされません。この時は、書き込みも保存もしません。


auto_open()が記述されているファイル(「reftest.xls」ファイル)
の書き込みや保存を行った場合は、どうしてもエラー表示されて
しまうものなのでしょうか!?

それとも別の原因が何かあるのでしょうか!?

ご教授の程、どうぞ宜しくお願い致します。


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
参照設定される「List.xls(プロジェクト名LIst)」には、標準モジュールに
'=======================================================
Sub test()
  ActiveWorkbook.Sheets(1).Cells(1, 1).Value = "ok"
End Sub

これだけのコードだとします。
この「List」を参照設定しているブックは、「reftest.xls」とします。


標準モジュールには、

'=================================================================
Sub auto_open()
  Call list.test
  If 参照設定解除(ThisWorkbook, "List") = 0 Then
   ThisWorkbook.SaveAs ThisWorkbook.Path & "\list33.xls"
   Workbooks("list.xls").Close False
   End If
End Sub
'===================================================================
Function 参照設定解除(bk As Workbook, renm As String) As Long
  On Error Resume Next
  With bk.VBProject
   .References.Remove .References(renm)
   End With
  参照設定解除 = Err.Number
  On Error GoTo 0
End Function

これでretest.Xlsを立ち上げてAuto_Openが実行されると、
保存された「list33.xls」は、参照設定が解除されています。
まず、これが正常に動作するか確認してみて下さい。

【15276】Re:VBA参照設定の解除について
発言  ichinose  - 04/6/18(金) 15:51 -

引用なし
パスワード
   ▼生茶 さん:
こんにちは。
うーん、おっしゃっている意味がわかりません。
というより、以前、投稿した例題は、

>auto_open()が記述されているファイルのシートに書き込みをし
>(以前お話しました通り、フォーム表示させパラメータを入力し
> シートに書き込みます)その後、別ファイル名で保存します。
>要は、データを書き込む側は、「List.xls」側では無く、
>「reftest.xls」側です。
>Sub test()
>  ActiveWorkbook.Sheets(1).Cells(1, 1).Value = "ok"
>End Sub
そうです。List.xls側のプロシジャーで実行しているだけで
書き込んでいるのはReftest.Xlsのブックです。
確かこの後、保存もしているはずです。


>そうしますと、参照設定は解除される様ですが、どうしてもエラー
>メッセージが表示されてしまいます。
こういう場合、どの箇所でどんなエラーメッセージが出るのか
記述して頂かないと・・・、エラーを追う事が出来ませんよね?

>
>ちみなに、フォームを表示させキャンセルボタンをクリックする
>とフォームを閉じ、「reftest.xls」ファイルの参照を解除して
>ファイルを閉じるのですが、その時は参照設定は解除され、
>エラー表示はされません。この時は、書き込みも保存もしません。

エラーが再現できる簡単なコードと再現手順が知りたいです。
(こういうの記述するのは大変ですが、これを考えてる
過程で何となく、原因コードが絞られてくる場合もあるものですよ)

【15348】Re:VBA参照設定の解除について
お礼  生茶  - 04/6/22(火) 9:07 -

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

>エラーが再現できる簡単なコードと再現手順が知りたいです。
>(こういうの記述するのは大変ですが、これを考えてる
>過程で何となく、原因コードが絞られてくる場合もあるものですよ)

 エラーが再現できる簡単なコードと再現手順を作成していた所、
 エラー原因が分かりました。
 うっかりWorkbooks("list.xls").Close Falseの部分を
 IFの外に記載していた為でした。。。
 
 If 参照設定解除(ThisWorkbook, "List") = 0 Then
  ThisWorkbook.SaveAs ThisWorkbook.Path & "\list33.xls"
  Workbooks("list.xls").Close False ←ここの部分
 End If

           ↓

 If 参照設定解除(ThisWorkbook, "List") = 0 Then
  ThisWorkbook.SaveAs ThisWorkbook.Path & "\list33.xls"
 End If
  Workbooks("list.xls").Close False ←ここの部分

 今は、エラー発生も無く順調にマクロ作成の方進めております。
 
 ichinoseさん ご教授誠にありがとうございました。
 感謝申し上げます。。。


 

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