ExcelでSelectionプロパティを使用するには?

解決


初心者ちゃん  2005-04-13 23:25:51  No: 120909

たびたびすみません・・・

先ほどオブジェクトのName取得で悩んでいたものは皆様のおかげで解決した
のですが、そのデータをExcelでプレビューすると一度目は処理が通っても
二度目からSelectionプロパティがNothingで帰ってくる為、エラーで落ちてしまいます。

いろいろ処理方法を変更するなど対策を試みたのですが力不足のせいか一人では解決できませんでした。
もう一度どなたかお知恵をお貸しください。

        '表示
        XLObj.Visible = True

        For i = 1 To ObjCount
            XLWB.ActiveSheet.Shapes(PictureNameG(i)).Select
            'プロパティの設定
            On Error Resume Next
            With Selection
                .Locked = False
                .Placement = xlMoveAndSize
                .PrintObject = True
                .Locked = True
                .Enabled = False
            End With
            On Error GoTo 0
            DoEvents
        Next i
        XLWB.PrintOut , , nCopy, True

        'プレビューを終了する
        If PreviewNoClose = False Then
            XLWB.Close False
            XLObj.Quit
        End If
      

    '終了
    Set XLWB = Nothing
    Set XLObj = Nothing


魔界の仮面弁士  2005-04-14 00:24:14  No: 120910

> 二度目からSelectionプロパティがNothingで帰ってくる為、エラーで落ちてしまいます。
Selectionを使うのは、極力避けましょう。
それから、暗黙のオブジェクトを使うのも厳禁です。

> With Selection
たとえばコレ、Excel内でVBAとして実行する場合は、
「自分自身の選択範囲」である事が明確なので、さほど問題になりません。

しかし、外部(VBなど)から操作しようとした場合は、それが
どのオブジェクトのSelectionなのかを明示する必要があります。
XLObj.Selectionなどのようにして。

たとえば、プログラム内でExcelを3つ起動していたと仮定しましょう。

この時、「Selection」とだけ書いてあっても、どのExcelを操作すれば
よいのか、VBには分かりませんよね。
そのため、予期しない動作となってしまう可能性があるわけです。

これは、VB内でExcelを1つしか起動していなかったとしても同様です。
現在VBで開いているExcelが操作される事になるのか、それとも
別のExcelを操作すればよいのか、処理が曖昧になってしまいますから。

特に、「参照設定」していた場合、勝手に暗黙のオブジェクトを生成するため、
一見、正しく動作しているように見えますが、Excelが終了せずに
非表示のままメモリ上に残ってしまったり、あるいは、今回のように
2回目にはうまく動かなかったりといった弊害があります。

# 参照設定していなければ、暗黙のオブジェクトが生成される事も無いので、
# こうした問題は発生しなくなります。


初心者ちゃん  2005-04-14 02:15:16  No: 120911

魔界の仮面弁士さん、重ね重ねありがとうございます。m(。。;)m

ご指導の通り

With XLObj.Selection

とコードを修正するだけでエラーで落ちる事もなくなりました...
自分では気づかなかったです。

ほかのコードも修正できるところは修正させていただきました。
もっと自分で修正できるように努力していきたいと思います。
ありがとうございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加