質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1157閲覧

VBA「Selectionと.Select」それぞれの範囲取得における違いについてわかりません。

masafumi55

総合スコア12

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/10/13 07:55

<<はじめに>>
いつもお世話になっております。VBA初心者のmasafumi55です。
お忙しいところ恐縮ですが、どなた様かご教示のほどお願いいたします。

<<目的>>
Range型の変数rgに、指定した範囲情報を入れる。指定範囲はRange("B2:Y19")。

<<エラーコード>> <エラーコメント:オブジェクトが必要です>
(注意)代入でエラーが起きましたが、代入しなければ、そもそもの範囲選択における処理は問題なく処理出来ていることは確認しました。

Dim rg As Range Set rg = _  ThisWorkbook.Worksheets("imageCardView").Range("B2:Y19").Select

<<エラーへの補足>>
以下の記述は目的の処理を問題なく行いました。
(注意)以下でのSelectionは、使用者が選択した範囲を指すようです。
Dim rg As Range
Set rg = Selection

<<結論>>
今回の理解できない点は、Selectionを代入する分には問題なく処理が走ったにもかかわらず、
具体的に範囲を.Selectで指定した場合は処理がうまくまわらなかったことです。範囲指定Range("B2:Y19")にする場合の正解をご教示お願いいたします。

<<今回模写参考にしたコード全文(エラー無し)>>

  Sub ImgSave()

' エラー処理 On Error GoTo ErrorProc Dim rg As Range Dim cht As Chart Dim Path As String Dim WSH As Variant ' 範囲指定された部分を画像として保存 Set rg = Selection rg.CopyPicture appearance:=xlScreen, Format:=xlPicture ' Chartに画像を挿入して貼り付け Set cht = ActiveSheet.ChartObjects.Add(0, 0, rg.Width, rg.Height).Chart cht.Parent.Select ' Excel2016の不具合回避対応 遅延の為挿入 ' *** それでもうまく作動しない時は試してみてください↓ *** ' Application.Wait Now() + TimeValue("00:00:01") cht.Paste ' 名前を付けて保存 ' 保存先はお好みで Set WSH = CreateObject("WScript.Shell") outputPath = WSH.SpecialFolders("Desktop") outputPath = outputPath & "\IMG-" & CStr(Format(Now, "yyyymmddhhmmss")) & ".PNG" Set WSH = Nothing ' PNGとして保存します cht.Export Filename:=outputPath, filtername:="PNG" cht.Parent.Delete MsgBox "画像作成完了しました" Exit Sub

 ErrorProc:
MsgBox "画像の作成に失敗しました"

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/10/13 10:58

コードは「コードの挿入」で記入しましょう。
masafumi55

2020/10/13 23:18

ご教示ありがとうございます!今回の指摘で気づくことができました。 コメント「こちらのほうが断然見易いです!」
guest

回答1

0

ベストアンサー

Selectionはプロパティ、Selectはメソッドで、まったく役割の異なるものだということを理解しましょう。

Selectionプロパティは選択されたセル範囲(Range)を返します。
Selectメソッドは指定したセル範囲を選択します。選択するという動作を実行するだけで何も返しません。

vba

1Set rg = _  2ThisWorkbook.Worksheets("imageCardView").Range("B2:Y19").Select

何も返さないものを代入しようとしているので"オブジェクトが必要です"と怒られます。

vba

1ThisWorkbook.Worksheets("imageCardView").Range("B2:Y19").Select '選択する 2Set rg = ThisWorkbook.Worksheets("imageCardView").Selection  '選択した範囲を代入

とするか、選択する必要がなければ下記でOKです。(たいていの処理は選択する必要はないです。)

vba

1Set rg = ThisWorkbook.Worksheets("imageCardView").Range("B2:Y19")  'セル範囲を代入

投稿2020/10/13 08:06

hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masafumi55

2020/10/13 23:14

さっそくのご回答誠にありがとうございます。補足までいただけて初心者でも難なく理解できました。 お忙しい中ご教示いただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問