環境:Ms Windows2000 sp1/Ms SQL Server2000/Ms Vb6.0/ ActiveReports Ver1.0J +Ver1.5J差分
上記の環境で作成したPGをMSDEの環境で実行したら「オートメーションエラー、起動したオブジェクトはクライアントから切断されました」のエラーが発生しました。

PGの内容は以下のとおり
・frmMainフォームから印刷範囲指定のfrmPrintをCALLし、 PrtRepというレポートを表示。
・frmMain、frmPrint、PrtRepはクラスオブジェクト「CSeisanWk」をCALL
・「CSeisanWk」は「CSeisan」をCALLし、データベース にアクセスしている。
・frmMain、frmPrint、PrtRepは「Esc」キーを押すと  Unload Meでフォームまたはレポートを閉じる
・1回目にfrmMainからfrmPrintを起動し、範囲指定後、 PrtRepを表示。PrtRepをEscキーで閉じ、frmPrintを Escキーで閉じる
・2回目にfrmMainからfrmPrintを起動し、範囲指定後、 PrtRepを表示。PrtRepをEscキーで閉じると、オートメーショ ンエラーが発生。
・この状態で,PrtRepを範囲指定を変更して何度でも表 示可能。
・ただし、frmPrintをESCキーにて閉じるとPGが終了してしまう(frmMainが閉じている)
・記述を「Unload frmMain、Unload frmPrint、Unload
 PrtRep」に変更しても状況は変わらず。
・クラスオブジェクトの開放の問題とおもい、オブジェクトの開放、DB切断、これらの記述をコメント化しても状況は
 変わらず。
・frmMainで「form KeyUp」イベントにブレイクポイントを置いて みたが止まらず。
・MSDEでない環境ではこのエラーが起きない。

めちゃくちゃわかりにくい記述で申し訳ないのですが、
どなたかいい知恵を貸してください。

A 回答 (1件)

内部処理を抜粋したコードを公開してくれませんか?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qサーバのクライアントアクセスライセンスについて

NTサーバのクライアントライセンス(CAL)にカウントされるのは
以下のどれとどれでしょうか?
よろしくお願いします.

1.サーバ上の共有フォルダへのアクセス
2.サーバ上の共有プリンタへのアクセス
3.サーバ上のSQLサーバDBへのODBC接続
4.サーバ上のオラクルDBへのSQL*Net接続
5.サーバに対してのHTTP接続(IIS)
6.サーバに対してのFTP接続
7.サーバ利用側が独自に開発したUDP/TPCポートを使用したサーバ型サービスに対するアクセス
8.サーバに対してPINGを行う(まさか)



特にwwwサービスへのアクセスがクライアントライセンスにあたるのかが知りたいです.あたらないですよね??
これが抵触するとしたら,膨大なライセンスが必要になってしまうとおもいましたので...

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

Aベストアンサー

> 7.サーバ利用側が独自に開発したUDP/TPCポートを使用したサーバ型サービスに対するアクセス

ユーザ認証がアプリケーション独自のものであり、Windows2000の統合サインオンサービスを利用していない場合は CAL不要です。


> 特にwwwサービスへのアクセスがクライアントライセンスにあたるのかが知りたいです.あたらないですよね??

WindowsNTのIISは CAL不要でしたが、Windows2000のIISでアクセスを登録ユーザだけに制限している場合は CALが必要になります。
しかし、登録ユーザが数千、数万となった場合にコストがかかり過ぎるため、CALを代替するライセンスとしてインターネットコネクタライセンスがあります。インターネットコネクタライセンスを購入したサーバでは無制限アクセスが許可されます。

Qフォルダ参照ダイアログAPIをVBAに組み込んだときのESCキー押下

フォルダ参照ダイアログAPIをVBAに組み込み、フォルダ選択画面が表示されたとき、ダイアログ上の「OK」「キャンセル」以外に、キーボードの「ESC」キーを押下すると、VBAの「コードの実行を中止」ダイアログが表示されプログラムの実行が中断します。「ESC」キーを押下しても「キャンセル」と同等の処理で、「コードの実行を中止」ダイアログを表示しないようにできるでしょうか。お知恵をお貸しください。

Aベストアンサー

こんにちは、KenKen_SP です。

> eDi89Uy6さん...

??このように表示されてるのですか^^;

> ダイアログ上の「OK」「キャンセル」以外に、キーボードの「ESC」キーを
> 押下すると、VBAの「コードの実行を中止」ダイアログが表示されプログラム
> の実行が中断します。

ご提示頂いたコードはキャンセル時に初期フォルダのパスをそのまま返すみたい
ですね。 つまり、ShowFolders 関数の呼び出し方次第なのですが、面倒な仕組
です。関数の仕様としてキャンセル時に初期フォルダを返すのって、余り宜しく
ない気がします。

また、CallBack を使っているのに、前回選択のフォルダを記憶してません...

これを修正するのはちょっと面倒なので、私が使っているものを Excel VBA
用に簡略化したものを提示します。ご参考下さい。

ユーザー定義関数 BrowseForFolder で、次の機能を関数化してあります。

 1. フォルダ参照ダイアログを表示
 2. 前回の選択フォルダを記憶(Excel2000以上で機能します)
 3. ユーザーが選択したフォルダの「¥マークで終わるパス」を返す(重要)

この関数は3つ引数を受付ますが、どれも省略可能です。それぞれの意味は、

第1引数:[strCaption] 省略可 ダイアログに表示する文字列
第2引数:[strRootPath] 省略可 初期表示のフォルダ(ルートパス)
     -->初期値「デスクトップ(仮想)」です
第3引数:[blnFixRoot] 省略可 第2引数で指定した初期フォルダより上位
     のディレクトリーに移動可能にするかどうかを True / False で設定

     例)strPath = BrowseForFolder(,"D:\",True)
       --> D:\ が初期フォルダとして表示され、デスクトップまで OK
     例)strPath = BrowseForFolder(,"D:\",False)
       --> D:\ が初期フォルダとして表示され、それより上位は無理

となってます。

キャンセル時の戻り値は「 長さ0の文字列 = vbNullString 」です。

【以下ソースコード】より下の部分を標準モジュールにコピペ
して下さい。ご質問の趣旨であるキャンセル時の処理ですが、ソース一番下に
Sub Sample() に書いておきました。

’【以下ソースコード】---------------------------------------------------

Option Explicit

' フォルダ参照ダイアログ

Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" ( _
  lpBrowseInfo As BROWSEINFO _
) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" ( _
  ByVal pidl As Long, _
  ByVal pszPath As String _
) As Long
Private Declare Function ILCreateFromPathA Lib "shell32.dll" Alias "#189" ( _
  ByVal pszPath As String _
) As Long
Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal pv As Long)
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _
   ByVal hwnd As Long, _
   ByVal wMsg As Long, _
   ByVal wParam As Long, _
   ByRef lParam As Any) As Long

' BROWSEINFO構造体
Private Type BROWSEINFO
  hwndOwner   As Long  ' オーナーウインドウのハンドル
  pidlRoot    As Long  ' ルートフォルダ定数
  pszDisplayName As String ' 選択フォルダ名
  lpszTitle   As String ' ダイアログ表示メッセージ
  ulFlags    As Long  ' オプション
  lpfn      As Long  ' CallBack関数アドレス
  lParam     As String ' CallBack関数パラメータ
  iImage     As Long
End Type

Private Const CSIDL_DESKTOP = &H0
Private Const BIF_RETURNONLYFSDIRS = &H1
Private Const WM_USER = &H400
Private Const BFFM_SETSELECTIONA = (WM_USER + 102)
Private Const BFFM_INITIALIZED = 1

Private Const MAX_PATH = 260

' フォルダ参照ダイアログを開いて¥記号で終わるパスを返す
Public Function BrowseForFolder( _
  Optional strCaption As String = "フォルダを指定して下さい", _
  Optional strRootPath As String, _
  Optional blnFixRoot As Boolean) As String

  Dim udtBROWSEINFO As BROWSEINFO
  Dim lngRet    As Long
  Dim strPath    As String
  Static strPrevDir As String

  ' BROWSEINFO構造体を用意
  With udtBROWSEINFO
    .hwndOwner = 0&
    .pidlRoot = CSIDL_DESKTOP
    If strRootPath <> vbNullString Then
      If blnFixRoot Then
        .pidlRoot = ILCreateFromPathA(strRootPath)
      End If
      If Len(strPrevDir) Then
        strPrevDir = strRootPath
      End If
    End If
    .lpszTitle = strCaption
    .ulFlags = BIF_RETURNONLYFSDIRS
    ' Excel97 では AddressOf 演算子が使えないので
    ' 条件付きコンパイルする
    #If VBA6 Then
      .lpfn = GetPointer(AddressOf BrowseCallbackProc)
      If Len(strPrevDir) Then
        .lParam = strPrevDir
      End If
    #End If
  End With
  ' フォルダの参照ダイアログ呼び出し
  lngRet = SHBrowseForFolder(udtBROWSEINFO)
  If lngRet > 0 Then
    strPath = String$(MAX_PATH, vbNullChar)
    Call SHGetPathFromIDList(lngRet, strPath)
    Call CoTaskMemFree(lngRet)
    strPath = Left$(strPath, InStr(strPath, vbNullChar) - 1)
    ' 前回参照フォルダ記憶
    strPrevDir = strPath
    ' 戻り値(パスの終わりに¥を付与)
    If Right$(strPath, 1) <> "\" Then strPath = strPath & "\"
    BrowseForFolder = strPath
  End If

End Function

' CallBack プロシージャのアドレスを返す
Private Function GetPointer(lngAddressOf As Long) As Long
  GetPointer = lngAddressOf
End Function

' BrowseForFolder 関数 Callback プロシージャ
Private Function BrowseCallbackProc( _
  ByVal hwnd As Long, ByVal uMsg As Long, _
  ByVal lParam As Long, ByVal lpData As Long) As Long
  If uMsg = BFFM_INITIALIZED Then
    SendMessage hwnd, BFFM_SETSELECTIONA, 1, ByVal lpData
  End If
End Function


’【以下使い方のサンプルコード】

Sub Sample()

  Dim strPath As String
  
  strPath = BrowseForFolder()   ’<--基本的にはこれだけ
  If strPath = vbNullString Then  ’<--長さ0の文字列ならキャンセル
    MsgBox "キャンセル"
    Exit Sub           ’<--キャンセル時は終了
  End If
  
  ’<--以降の処理を書く-->
  ’取り合えずパスを表示してみる
  MsgBox strPath
  ' 選択されたフォルダにある Sample.xls を開いてみる
  Workbooks.Open Filename:=strPath & "Sample.xls"

End Sub

こんにちは、KenKen_SP です。

> eDi89Uy6さん...

??このように表示されてるのですか^^;

> ダイアログ上の「OK」「キャンセル」以外に、キーボードの「ESC」キーを
> 押下すると、VBAの「コードの実行を中止」ダイアログが表示されプログラム
> の実行が中断します。

ご提示頂いたコードはキャンセル時に初期フォルダのパスをそのまま返すみたい
ですね。 つまり、ShowFolders 関数の呼び出し方次第なのですが、面倒な仕組
です。関数の仕様としてキャンセル時に初期フォルダを返すのって、余り...続きを読む

QLAN側のクライアントPCのブラウザから同LAN内にあるサーバに割り当ててあるドメインへのアクセスができない

【質問】
LAN側のクライアントPCのブラウザから同LAN内にあるサーバに割り当ててあるドメインへのアクセスができません。どなたかどこに問題があるかわかる方はいらっしゃいますでしょうか?

以下に、現在の環境、状況を記述します。

【環境】
自宅サーバー(VineLinux+Apache)を立ち上げています。回線はYahooBBで、ルータはYahooBBブロードバンドルータを利用しています。
ネットワーク構成ですが、
WAN側─ルータ┬─サーバー(192.168.3.10)
          └─クライアント(192.168.3.*)
上記のようになっています。
クライアントのプライベートIPはDHCPで割り当ててます。サーバーに割り当てているドメインをtest.jpと仮定して下さい。(DNSサーバはWAN側にあります)

【状況】
・WAN側のPCのブラウザからhttp://www.test.jpへのアクセスはできています。
・LAN側のクライアントPCのブラウザからサーバのプライベートアドレス(192.168.3.10)へのアクセスはできています。
・LAN側のクライアントPCのブラウザからWAN側にあるプロキシサーバーを利用してhttp://www.test.jpへのアクセスはできています。
★LAN側のクライアントPCのブラウザからhttp://www.test.jpへのアクセスができません。
・LAN側のクライアントPCからtest.jpへPINGは通ります。

以上です。
よろしくお願い致します。

【質問】
LAN側のクライアントPCのブラウザから同LAN内にあるサーバに割り当ててあるドメインへのアクセスができません。どなたかどこに問題があるかわかる方はいらっしゃいますでしょうか?

以下に、現在の環境、状況を記述します。

【環境】
自宅サーバー(VineLinux+Apache)を立ち上げています。回線はYahooBBで、ルータはYahooBBブロードバンドルータを利用しています。
ネットワーク構成ですが、
WAN側─ルータ┬─サーバー(192.168.3.10)
          └─クライアント(192.168.3.*)
上記...続きを読む

Aベストアンサー

WAN--(GIP)ルータ(LIP)--(LIP)サーバ
          └-(LIP)クライアント
GIP:グローバルIPアドレス
LIP:ローカルIPアドレス

という状況ですよね?
www.test.jpのIPアドレスは、上記GIPになりますね。

外から接続すると、
WAN→ルータGIP→(ルータLIPを通って)→サーバLIP
という風に接続するようにルータにNATの設定をしていることと思います。

クライアントがサーバLIPでアクセスするときには、
クライアントLIP→サーバLIP
と直接接続することかとおもいます。

で、問題のクライアントがhttp://www.test.jpにアクセスする場合ですが、
クライアントLIP→(ルータLIPを通って)→ルータGIP
とアクセスするようになります。

このとき、ルータの機能として、
クライアントLIP→(ルータLIPを通って)→ルータGIP→(ルータLIPを通って)→サーバLIP
となる機能があるルータなのでしょうか?

一般的なルータであると、
ローカルからルータのグローバルにアクセスした場合には転送しないというものが多いです。

その機能があり、うまくいかないのであれば、ルータのメーカーに問い合わせてみたほうがよろしいかとおもいます。

pingの場合は、ルータが返答しているのでしょうから、問題がないとなっても別に上記に矛盾しません。

WAN--(GIP)ルータ(LIP)--(LIP)サーバ
          └-(LIP)クライアント
GIP:グローバルIPアドレス
LIP:ローカルIPアドレス

という状況ですよね?
www.test.jpのIPアドレスは、上記GIPになりますね。

外から接続すると、
WAN→ルータGIP→(ルータLIPを通って)→サーバLIP
という風に接続するようにルータにNATの設定をしていることと思います。

クライアントがサーバLIPでアクセスするときには、
クライアントLIP→サーバLIP
と直接接続することかとおもいます。

で、問題のクライアン...続きを読む

QEscキーを押すと、中断する時としない時がある

エクセルVBAです

VBAでループしているときに、Escキーを押すと、中断する時としない時があるのですが
しない時はなぜしないのでしょうか?

Aベストアンサー

AELAFAYQDIZ さん
こんにちは。

確かに中断のキーが効く場合と効かない場合がありますね。
私もはっきりしていません。
単純には「キーボードを受け付けない状態の処理をしている」とのことだと思います。
よって「何故効かないのか」では無く「効く」ようにできないかをを考えたほうが良いかも知れません。

1.ループ命令の中の「DoEvents」を追加する。
  DoEventsを入れることにより、キーボード入力を受け付けるようになります。
   Sub TEST()
    Do
     DoEvents
    Loop
   End Sub

2.中断の方法を選ぶ
 中断には3種類あるかと思います。
  ・Escキーによる中断
  ・Ctrl + Break キー による中断
  ・VBEの中断ボタン による中断

 「Escキー」より「Ctrl + Break キー」の方が一般的で中断が効きやすいと思います。

以上、色々と試してみて下さい。

Qサーバーのクライアントアクセスライセンスについて

現在、仕事で、Windows2000Serverを使っています。
用途を分けるために、新たにサーバーの購入を検討しています。今まで使用していたサーバーも継続して使用します。
ここで質問ですが、今まで使用していたサーバーのクライアントアクセスライセンスは購入していますが、新規で購入するサーバーの分もライセンスを購入しなくてはなりませんか?
使用人数は40名です。
宜しくお願いします。

Aベストアンサー

まずクライアントアクセスライセンスモードが
『接続クライアント数モード』(WindowsServer2003の場合は「接続デバイス数または接続ユーザー数モード」)
と『同時使用ユーザー数モード』のどちらかを使っているかで変わります。
さらに新規サーバがWindowsServer2003の場合そのCALの数え方も変わってきます。

今回のような場合、基本的に1台のPCが2台のサーバに接続するのなら「接続クライアント..」で現行の40のまま
「同時接続...」で40追加(合計80)CALが必要になるでしょう。

こちらにライセンスに関して詳細に書かれています。
該当する製品をご確認ください。
(たぶん4-13だけで大丈夫でしょう)
http://www.microsoft.com/japan/licensing/guide/default.asp


基本的に、MSのサポートに問い合わせ「製品購入に関する問い合わせ」を行うのが確実でしょう。
http://www.microsoft.com/japan/customer/info/default.aspx

まずクライアントアクセスライセンスモードが
『接続クライアント数モード』(WindowsServer2003の場合は「接続デバイス数または接続ユーザー数モード」)
と『同時使用ユーザー数モード』のどちらかを使っているかで変わります。
さらに新規サーバがWindowsServer2003の場合そのCALの数え方も変わってきます。

今回のような場合、基本的に1台のPCが2台のサーバに接続するのなら「接続クライアント..」で現行の40のまま
「同時接続...」で40追加(合計80)CALが必要になるでしょう。

こちらにライセンスに関...続きを読む

QExcel 2003 VBAにてマクロの実行中にESCキーにて中断されないようにしたい

Excel 2003 にてマクロの実行中にESCキーを押されるとコードの実行が中断されるのを抑制したいのですができません。

シートに直接テキストボックスコントロールを貼り付けています。
そのテキストボックスにKeyDownイベントプロシージャを記述しています。
テキストボックスにIMEの全角文字を入力中(未確定状態)の時に、ESCキーを押すとコードの実行を中断しましたというダイアログが出てしまいます。

KeyDownイベントプロシージャの内容の有無にかかわらず(処理は無記入でも)、ESCキーを押すとダイアログが表示されてしまいますので、ESCキーを押してもダイアログが表示されず処理が中断されない方法はありませんでしょうか。

調べましたところ、
Application.EnableCancelKey = xlDisabled
にてESCキーを無効にする事ができるそうなのですが、BOOKを開いた時のイベントにて
上記コードを記載しているのですが、抑制はできません。

何かしら別の方法で対応などはできないものなのでしょうか。
よろしくご教示をお願い申し上げます。

Excel 2003 にてマクロの実行中にESCキーを押されるとコードの実行が中断されるのを抑制したいのですができません。

シートに直接テキストボックスコントロールを貼り付けています。
そのテキストボックスにKeyDownイベントプロシージャを記述しています。
テキストボックスにIMEの全角文字を入力中(未確定状態)の時に、ESCキーを押すとコードの実行を中断しましたというダイアログが出てしまいます。

KeyDownイベントプロシージャの内容の有無にかかわらず(処理は無記入でも)、ESCキーを押すとダイア...続きを読む

Aベストアンサー

KeyDownイベントの内容がわからないので今ひとつ不安ですが、
以下で対応できるかもしれません。

'Sheetモジュール
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private flg As Boolean

Private Sub TextBox1_GotFocus()
  Application.EnableCancelKey = xlDisabled
  flg = False
  Do
    Sleep 1
    DoEvents
  Loop Until flg
End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  '処理
End Sub

Private Sub TextBox1_LostFocus()
  flg = True
End Sub

KeyDownイベントの内容がわからないので今ひとつ不安ですが、
以下で対応できるかもしれません。

'Sheetモジュール
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private flg As Boolean

Private Sub TextBox1_GotFocus()
  Application.EnableCancelKey = xlDisabled
  flg = False
  Do
    Sleep 1
    DoEvents
  Loop Until flg
End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shi...続きを読む

QWindows2000のクライアント アクセス ライセンスを確認する方法

Windows2000上のクライアント アクセス ライセンスを確認するには、どのような手順で実施すれば良いのでしょうか。ご教授宜しくお願いします。

Aベストアンサー

[スタート][プログラム][管理ツール][ライセンス]で、ライセンス数を確認できます。

QCallで呼び出し後にそのCallで例外が発生

例えば、下記のCallでプロシージャProc1を実行した後に、そのCallで例外(HRESULT からの例例:0x800A01B6)が発生します。

Call Proc1(a, b, c)

デバッグモードでこのCallにストップをかけ実行します。停止した後に1ステップごとに実行を進めるとと、Proc1が正常に終了した後、このCallで例外が発生したと報告されます。

環境は、Windows 7、VB 2010 Express、IE 11です。
何が起こっているのでしょうか?

Aベストアンサー

例外は登録されていないエラー種別なので、厳密には何が起きているか判りません。

ただ、Callで起きる場合の大半は型があっていないことが原因なので、
引数か関数そのもの型を確認してキャストしてみてください

Qメンバサーバのライセンスはクライアント数必要ですか?

どうぞご教授願います。
現在ドメインコントローラ(以下DC)があり、ユーザー管理とドメイン参加の認証を行っております。
この度、メンバサーバ(以下M-SV)を新しく立ち上げるのですが、そのM-SVは特定業務を入れる為に、特定のクライアント(以下CL)しか参加しません。
M-SVにはSQL-SVも同時にインストしますので、SQL-SVのライセンスは接続台数分必要なのは分かるのですが、
M-SVのライセンスも業務に参加するCLの台数分必要なのでしょうか?
私はDCのライセンスがあればM-SVは不要と思ってました。
お手数ですがご教授宜しくお願いいたします。

Aベストアンサー

Windows Server 2003だと想定して回答します。

スタート>コントロールパネル>ライセンス
で表示される、クライアントライセンスモードで、製品:Windows Serverのモードが、
「接続デバイス数または接続ユーザー数」モードであれば、おそらく組織のデバイス全てまたはユーザー全てにCALがあるはずなので、メンバーサーバが増えたからといって、サーバーごとにCALを増やす必要はありません。

「同時使用ユーザー数」モードであって、クライアントがWindows Server 2003の機能を使う場合、サーバーごとにCALを増やす必要があります。

Windows Server 2003の機能とは、以下のものになります。

・認証サービス (ユーザーまたはアプリケーションの資格情報が本サーバー ソフトウェアとユーザーまたは本デバイス間でやり取りされる場合)
・ファイル サービス (ファイルまたはディスク記録装置へのアクセスと管理)
・印刷サービス (本サーバー ソフトウェアによって管理されるプリンタでの印刷)
・リモート アクセス サービス (仮想プライベート ネットワークを含む、通信リンクによる遠隔地からの本サーバーへのアクセス)

この中で問題になりそうなのは、認証サービスになります。

SQLserverを使用する特定業務アプリケーションが、Active Directoryのアカウントを認証などに使う場合は、Server OSの認証機能を使用するため、おそらくServer 2003のCALも必要だと思われます。

そうでなければ不要になる可能性もありますが、詳しくはアプリケーションベンダーまたはマイクロソフト(参考URL)に直接お問い合わせください。

参考URL:http://www.microsoft.com/japan/customer/default.aspx

Windows Server 2003だと想定して回答します。

スタート>コントロールパネル>ライセンス
で表示される、クライアントライセンスモードで、製品:Windows Serverのモードが、
「接続デバイス数または接続ユーザー数」モードであれば、おそらく組織のデバイス全てまたはユーザー全てにCALがあるはずなので、メンバーサーバが増えたからといって、サーバーごとにCALを増やす必要はありません。

「同時使用ユーザー数」モードであって、クライアントがWindows Server 2003の機能を使う場合、サーバーごとにC...続きを読む

Q範囲内の同名オブジェクトの削除

任意の範囲にあるオートシェイプを削除しようとして、調べて見たところ下記のような例文がありました。
Dim Obj As Object
Dim MyR As Range, CkR As Range
Dim M_Range As Range
For Each Obj In ActiveSheet.DrawingObjects
Set MyR = Range(Obj.TopLeftCell, Obj.BottomRightCell)
Set CkR = Intersect(MyR, Range("B25:CN27"))
If Not CkR Is Nothing Then
If CkR.Count = MyR.Count Then
Obj.Delete
End If
Set CkR = Nothing
End If
Set MyR = Nothing
Next

これだと通常に貼り付けたシェイプは削除出来るのですが、やろうとしているシートにはグループ化したシェイプを複数コピーして貼り付けてあります。
その為だと思うのですが、上記の方法だと削除出来ません。
原因は名前が同じなのでObj.Deleteが実行できないのだと思います。

同名のオブジェクトがある場合削除する方法はあるのでしょうか?
実行したいのはシートの一部の範囲内だけです。
宜しくお願い致します。

尚、マクロの記録で行うと以下の様な状態です。
ActiveSheet.Shapes.Range(Array("グループ化 16", "グループ化 16", ・・・・)).Select
Selection.Delete

任意の範囲にあるオートシェイプを削除しようとして、調べて見たところ下記のような例文がありました。
Dim Obj As Object
Dim MyR As Range, CkR As Range
Dim M_Range As Range
For Each Obj In ActiveSheet.DrawingObjects
Set MyR = Range(Obj.TopLeftCell, Obj.BottomRightCell)
Set CkR = Intersect(MyR, Range("B25:CN27"))
If Not CkR Is Nothing Then
If CkR.Count = MyR.Count Then
Obj.Delete
End If
Set CkR = Nothing
End If
Set MyR = Nothing
Next

これだと通常に貼り付けたシェ...続きを読む

Aベストアンサー

DrawingObjectsでは無く Shapesコレクションを For Eachでまわしてやればいいのでは ・・・


人気Q&Aランキング

おすすめ情報