VBAワークシートオブジェクトの使用に関する問題

このQ&Aのポイント
  • VBAワークシートオブジェクトを使用したサブプロシージャが正常に動作しない問題が発生しています。
  • 問題のコードでは、Thissheet変数を使用してアクティブなシートを参照していますが、これがエラーを引き起こしています。
  • Thissheetの代わりにWorksheets(1)を使用すると正常に動作するため、Thissheetの使用方法に問題がある可能性があります。
回答を見る
  • ベストアンサー

VBA ワークシートオブジェクトがうまく使えない

以下のサブプロシージャ、動きません。 Sub main() Dim Thissheet As Worksheet Set Thissheet = ActiveSheet Workbooks.Open Filename:="Book2.xlsx" Range("A1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 1) Range("B1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 2) ActiveWindow.Close End Sub 機能:Book1.xlsxで上記マクロを起動すると、Book2.xlsxを開きセルの一部ををBook1にコピーし、閉じる エラーメッセージ: コンパイルエラー メソッドまたはデータ メンバーが見つかりません。 Range("A1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 1) この行のThissheet.で引っかかります。 ちなみにThissheetの代わりにWorksheets(1)を用いるとうまくいきます。 Thissheetを用いた場合、何がマズイのでしょうか? 以下の認識で書いてますが、誤りあるでしょうか? ThisWorkbook=マクロが納められているワークブック、つまりBook1.xlsx Activesheet= 行を実行した時にアクティブになっているワークシート、ここではBook1.xlsxのマクロ起動時のワークシート

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

>Thissheetを用いた場合、何がマズイのでしょうか? マクロで定義したThissheetは、thisworkbookの配下(メンバ)では無いからです。 方法1: Sub main() Dim Thissheet As Worksheet Set Thissheet = ActiveSheet Workbooks.Open Filename:="Book2.xlsx" Range("A1").Copy Destination:=Thissheet.Cells(1, 1) Range("B1").Copy Destination:=Thissheet.Cells(1, 2) ActiveWindow.Close End Sub 方法2: >以下の認識で書いてますが、誤りあるでしょうか? その通りに作成します。 Sub main() Dim Thissheet As Worksheet Set Thissheet = ActiveSheet Workbooks.Open Filename:="Book2.xlsx" Range("A1").Copy Destination:=ThisWorkbook.activesheet.Cells(1, 1) Range("B1").Copy Destination:=ThisWorkbook.activesheet.Cells(1, 2) ActiveWindow.Close End Sub

over_the_galaxy
質問者

お礼

ありがとうございます。 ThisWorkbookを使わない方法でうまく行きました。

その他の回答 (4)

回答No.5

#4の回答者です。 >Thissheetがダメでmysheetなら良いのは何故でしょうか?どちらも名が体を表していると思いますが。 私は、あなたのために書いたつもりが、余計なことを書いたようですね。それで、不愉快になりましたら、すみません。 「Thissheetがダメでmysheetなら良いのは何故でしょうか?」それは、本質的には慣習だというしかありません。ただ、ThisWorkbookという語が、システム上である限りは、混じらわしいと思わないでしょうか。"This" といういわゆる限定詞は、何を意味するかということになるはずです。ThisWorkbookというのは、マクロの書いてあるブックだと書きましたが、ユーザーが勝手につけるThisSheet という変数の意味は、それを限定することができません。my というのは、あくまでも、1つのプロシージャの中で使うためのものですよ、という意味が込められています。もちろん、他の呼び方で入れる方もいますが、システム上で使われるような単語は極力避けます。 moug(http://www.moug.net/)は、日本マイクロソフト社ともつながりがありますから、こういう所でも参考になさったらいかがでしょう。私のような、どこの馬の骨かも分からないような人間よりは、アテになるかもしれません。 http://moug.net/tech/exvba/0040049.html こういうことは、前回書いたように、VB.Net やVB6などのルールや、また、Excel97 からのMicrosoft の書き方になるべく近づけようとしているにしか過ぎません。本来は、もっと厳しく細かい規則が存在しています。 私は、約10年の間に、数千個のマクロを書いています。今は、1万行を越えるVBA・マクロ・コードを書くことはありませんが、基本的なことは分かっているつもりです。Microsoft が示すいくつかのプログラマーの書法や記法のルールはあるものの、コードが通ればそれでいいというなら、それは、自己流でもご自由です。 コードを見る限りは、初歩的なレベルのつまずきですから、入門から初級レベルで、ある程度のことは覚えておいた方がよいということを書いたのです。覚えるのは今しかないと思います。 VBAのユーザーは、ほとんどは個人的に書いているものですから、他人を考慮にいれないで書いても構わないといえば構いません。最終的には、「可読性」といって、他人から見ても分かるように書くということが大事です。それは、巡り巡って、自分のためでもあるからです。 ここの掲示板の回答者にも、自己流の書き方をしている方がいますが、何年経っても、あるレベルを越えません。ある程度、上級になって複雑になると、それではエラーを起こすコードというのも中にはあります。 また、私は、現実には、ワークシートやワークブックの状況を見ていませんから、あなたが、どんな風にワークシートを使っていらしゃるか実体が分からないし、実際はそうではないという以上、こちらも、「サンプル」と明記して、書いたまでと返事をするしかありません。 >Set mySheet=ActiveSheet '大文字・小文字を混ぜる >以外の方法があるのでしょうか? 通常、Excel VBAは、標準モジュールを多用します。その場合、ActiveSheet の場合は、シートオブジェクトは書かずに、そのまま、Rangeオブジェクトを書けば、良いということが多いです。 気に入らない内容でしたら、どうぞ無視なさって良いです。時々、そういう方はいらっしゃいますから、こちらは、別に気にかけてはいません。失礼しました。

over_the_galaxy
質問者

お礼

再度ありがとうございます。 何となく状況が分かって来ました。私の使い方は、あくまで「自分の」仕事上のデータ処理を効率的にするためにVBAを使います。周囲の人に配布もしません。個人で使うだけ、しかも小規模です。数人がかりで大規模なプログラムを作ることもありません。変数名のルールは、おそらく他人が見た時の分かり易さを目的としている筈です。変数名の話、大変申し上げにくいのですが、今の私には必須ではありません。 年間数百個ものマクロを書くことは今後もないでしょうし、業務内容的にもそれほどの時間は取れません。あなたの想像されているようなレベルに到達することも無いと思います。「何年経ってもあるレベルを超えない」理由は、数が少ない、個人で作る、小規模だからでしょう。その程度しか必要としないのです。 どちらかというと、必要な時に小規模マクロを短時間でスパッと書くことが必要です。作ろうか手作業か迷う場面が多いですから。現状では「ひな型」を数種類作って対応してます。

回答No.4

こんにちは。 なにか、全体的に書き方が変ではないでしょうか? 癖をつける前に、自己流の書き方は直したほうがよいです。 それと私は、回答者として、質問者のままを活かしてコードを書く必要はないと思います。 別に私の話なんか、どうでもよいなら無視しても構いませんが、良いとか悪いとか関係なく、このままじゃいけないと思って書いています。 >Workbooks.Open Filename:="Book2.xlsx" >  Range("A1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 1) >  Range("B1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 2) >ActiveWindow.Close それぞれの親オブジェクトや変数に入れたオブジェクトを分かって書いているならともかく、ActiveSheet は、ActiveSheetであって、何ものでもありません。ActiveSheet というのは、物理的にひとつしかありません。ActiveSheet とは、表に出ているシートのことです。ただし、ActiveSheet には例外があります。しかし、それについては無視します。 ActiveSheet を、変数に入れたら、それが、そのまま残るということです。ActiveSheetは、親オブジェクトの指定のWorkbookも含まれています。読みにくくなるので、できるだけ、名指ししたシートにすることです。 >Worksheets(1)を用いるとうまくいきます。 ということではなくて、きちんと、Worksheets("Sheet1")などと名称を入れるべきです。 こういうと、Worksheets("Sheet1")は、特定化されているのか、名称を換えられたらどうするか、というツッコミもありますが、その対処法は、今、ここには書きません。 Worksheets(1)の意味は、左側から1番目のワークシート(Sheetではなく、Worksheetです)ということです。 ThisWorkbookというのは、マクロの置いてあるブックという意味です。 >Set Thissheet = ActiveSheet それに、こういう紛らわしい名称の付け方に問題があります。ひとつオブジェクトに封入したら、ブックを含めた唯一の存在です。せめて、Sh1 などすべきです。以下では、mySheet にしています。myというプレフィックスは、ローカル(プロシージャ内だけに使われる)という意味です。 Set mySheet = ActiveSheet という書き方は、現行ではお勧めしません。 Workbooks.Open Filename:="Book2.xlsx" で、開いたブックのシートが一番上にきて、それが、ActiveSheet になります。 このレベルで問題が出るとしたら、基本通り書くべきなのですね。 なお、Sub Main() という書き方は、VB系の構造化した時に使う書き方です。これは、サブルーチン(下処理)を使う時に、差別化させるための名称です。基本的には、その用途の名称を使うか、Test1 や Macro1 や Sample1 など、枝番をつけやすい名称にしてあげます。異論のある人もいるかとは思いますが、一応、Microsoft のmsdnのVS.Net のVB系の記法など(一部はプロの記法)になるべく近づけるように心がけています。最初は面倒かとは思うでしょうけれども、その方がミスが少ないからです。 '// サンプルです。  Sub DataCopying()   Dim mySheet As Worksheet   Set mySheet = ThisWorkbook.Worksheets("Sheet1")      With Workbooks.Open("Book2.xlsx") '*     .Worksheets("Sheet1").Range("A1").Copy mySheet.Range("A1")     .Worksheets("Sheet1").Range("B1").Copy mySheet.Range("B1")     .Close SaveChanges:=False '**   End With End Sub '*Withステートメントは、基本の記法で使うようになっています。 '**"SaveChanges:=" の名前付き引数にしなくてもよいです。

over_the_galaxy
質問者

お礼

いつもありがとうございます。 全体的に変数の名前に問題があるようですね。 Thissheetがダメでmysheetなら良いのは何故でしょうか?どちらも名が体を表していると思いますが。 Worksheets(1)は、こうすれば動いたという説明のためです。むしろThissheetで動作しない理由が知りたかったのです。実使用においてはWorksheets(1)もWorksheets("sheet1")もダメです。マクロ起動時にアクティブなシートである必要があります。 Set mysheet=ActiveSheet 以外の方法があるのでしょうか?

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

> Range("A1").Copy Destination:=ThisWorkbook.Thissheet.Cells(1, 1) たぶん Range("A1").Copy Destination:=Thissheet.Cells(1, 1) だと動くのでは?

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

うーん、ThisWorkbookというオブジェクトがあるのに WorkSheetをオブジェクトにする意味って何でしょう? Dimはstringで宣言して Thissheet = ActiveSheet.name として Range("A1").Copy Destination:=ThisWorkbook.Worksheet(Thissheet).Cells(1, 1) じゃダメですか?

over_the_galaxy
質問者

お礼

ありがとうございます。 Thisbook無しでThissheetだけでシートが一意指定出来るということですか? 私はBook2がアクティブの時はThissheetだけではダメだろうと思い、ThisBookを付けました。 s

関連するQ&A

  • VBAでsheetのコピー

    ご回答有難う御座いました。補足説明を致します。動作するとこまでは、出来たのですが、一点変更しました。:=のコピーの所でデバッグすると、エラーになるので、=だけにしました。すると動作するのですが、新しいsheetの名前が、コピー元のsheet名になります。そして、MsgBoxを入れると、エラーになります。また、1sheetだけがコピーされます。大変恐縮ですが、もう一度ご教授願います。補足説明なりますが、やりたい事は、拡張子がxlsmの中に名前のついた10個のsheetがあります。この10個のsheetを拡張子がxlsxのBookにコピーしたいのですが、このBook1のsheetをVBAから新に作成しBook2のsheet1に纏めたいのですが、纏め方は、Book2のsheet1の下から上に10sheetをコピーして、条件としてBook2のsheet1の名前は、固定で構いません。Book1の一番初めのsheetにコピーする時だけ3行目にある見出しだけは、Book2のsheet1に付けたく。それ以外のBook1のsheetは、デターだ4行目以降をコピーしたいのですが、また、コピーしたいsheetの範囲に列は、A1~AFで列は3~62までです。マクロはご教授頂いた、下記通りです。 Sub macro1() Dim i As Long Dim w0 As Workbook Dim s As Worksheet Set w0 = ActiveWorkbook '1枚目シートから貼り付け先のブックを作る w0.Worksheets(1).Copy Set s = ActiveSheet '2枚目以降のデータをコピーする For i = 2 To w0.Worksheets.count With w0.Worksheets(i) .Range("A4:AF" & .Range("A65536").End(xlUp).Row).Copy Destination = s.Range("A65536").End(xlUp).Offset(1) End With Next i End Sub これを先ほど書きました、マクロを教えて頂けませんでしょうか?何せ、マクロ初心者なので、msm相談箱がたよりです。何卒マクロを教えて頂きたく宜しくお願い申し上げます。

  • シート間のコピー時の列幅と行の高さ

    マクロ初心者です。下記はシート間のコピーですが、列幅と行の高さも一緒にコピーするにはどのように書いたらよいでしょうか。マクロは"sheet1"に入っています。よろしくお願いいたします。 Sub macro1() Worksheets("sheet2").Activate Cells.Clear Worksheets("sheet1").Activate Worksheets("sheet1").UsedRange.Copy ActiveSheet.Paste Destination:=Worksheets("sheet2").Range("A1") End Sub

  • ワークシートをコピーしたい

    下記載のサンプルマクロは「ワークシートをコピーして、追加したワークブックにコピペする」マクロなんですが、これを「ワークシートをコピーして、追加したワークシートにコピペする」にできないでしょうか? 出来るのであれば、値と書式の他に関数もそのまま貼り付けたいので御教授お願いします。 ただマクロは削除してマクロ抜きのコピペが理想です。 宜しくお願い致します。 Sub サンプル() Dim sc As Integer sc = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー Workbooks.Add 'ブック追加 Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け Sheets("Sheet1").Name = "コピー" Application.CutCopyMode = False Application.SheetsInNewWorkbook = sc ActiveWorkbook.Close ThisWorkbook.Activate End Sub

  • Excel VBA 指定シートの取込

    こんにちは。 ExcelのVBAを使用して、異なるBookのシートを取込みたいのですが、 シートが無かった場合の処理方法がわかりません。 現在のコードは下記の様になっております。 With Workbooks.Open"BOOK1.xls" .Worksheets("Sh1").Cells.Copy ThisWorkbook.Sheets("Sheet1").Range("A1") .Worksheets("Sh2").Cells.Copy ThisWorkbook.Sheets("Sheet2").Range("A1") .Worksheets("Sh3").Cells.Copy ThisWorkbook.Sheets("Sheet3").Range("A1") .Close End With Book1に指定したシートが無い場合、何もしないようにしたいのですが、 どの様に書き換えれば宜しいでしょうか? よろしくお願いします。

  • エクセルVBAでコピー

    エクセルVBAでのコピーについての質問です。 ブック1 とブック2があります。 ブック1 のSheet1 内にマクロ含むワークシートを 新規ブックにファイル名を指定して 下記のようなプログラムでコピーしようとすると (標準モジュール1の内容) Sub newfilesave() MsgBox "デスクトップの「○○」フォルダに控え○○_日付時間.xlsxファイルを生成します。" Sheets("受付仕分リスト").Copy ActiveSheet.Cells.Copy ActiveSheet.Cells.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False ActiveSheet.Range("A1").Select 'マクロなしのエクセルデータとして名前を付け、ファイル形式も決めてデスクトップに日付を付けて保存する。。 ActiveWorkbook.SaveAs _ Filename:="C:\Users\user\Desktop\○○\○○_" & Format(Now(), "yyyymmdd_hhmm"), _ FileFormat:=xlOpenXMLWorkbook End Sub Sheet1 内にマクロの内容までコピーされてしまいます。 ブック1のレイアウトや書式などはそのままに マクロ部分だけを取り除いてコピーするには どのような流れでプログラムすればいいでしょうか? よろしくお願いします。

  • VBA SaveAsでワークシートの指定する時

    以下は自動マクロで作成したものをちょっと変えたものです。 Sub Macro1() Sheets(1).Select Sheets(1).Copy ChDir "C:\" ActiveWorkbook.SaveAs Filename:="C:\Book2.xlsx", _ FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False Windows("Book2.xlsx").Activate ActiveWindow.Close End Sub 内容: 一番左のシートのみBook2.xlsxに保存する 疑問点: シートをコピーした後、SaveAsコマンドで保存する際に「コピーしたシートのみ保存する」ような記述が見られないことです。SaveAs自体が、コピーされたシートのみ保存すること前提のメソッドなのでしょうか? ちなみに、Sheets(1).Copyを削除するとブック全体を保存します。

  • エクセルVBAで困っています。

    Excell2003でマクロを作成したのですが、思うような結果が出なくて困っています。 どなたかお力をお貸しください。 お願いします。 【作成したマクロ】 Sub テスト()   myPath = ThisWorkbook.Path   buf = Dir(myPath & "¥データ¥" & "*.xls")   Do While buf <> ""     Target = "'" & myPath & "[" & buf & "]Sheet1'!R1C1"     i = i + 1     Cells(i, 1) = buf     Cells(i, 2) = ExecuteExcel4Macro(Target)     buf = Dir()   Loop End Sub 【設定状況】 ・デスクトップ上に "サンプル.xls" があり、ThisWorkBookに上記マクロを書きました。 ・デスクトップ上に "データ" というフォルダがあり、その中に、"Book1.xls" と "Book2.xls" があります。 ・"Book1.xls" のSheet1のRange("A1")には "あいうえお" が入力されています。 ・"Book2.xls" のSheet1のRange("A1")には "かきくけこ" が入力されています。 【マクロ実行結果】 ・Range("A1") ・・・ Book1.xls ・Range("B1") ・・・ #REF! ・Range("A2") ・・・ Book2.xls ・Range("B2") ・・・ #REF! となってしまいます。 【求めたい結果】 ・Range("A1") ・・・ Book1.xls ・Range("B1") ・・・ あいうえお ・Range("A2") ・・・ Book2.xls ・Range("B2") ・・・ かきくけこ よろしくお願いします。

  • エクセルVBAで教えて下さい。

    エクセルVBAで以下の方法のマクロが分からず、教えて頂きたいです。 まず、ブックAのシートAがあり、シートAのセルD3には号機No.を入力します(999などの数値のみ) 次にブックBのシートBがあり、このシートのD列にも号機No.が入力されています。 やりたい事はブックAのシートAのD3に号機No.を入力したら、ブックBのシートBのD列から同じ号機No.を 探し、当てはまる号機の行のI列、J列、K列、L列、M列をコピーし ブックAのシートAのF13、F14、F15、F16、F17、に貼り付けたいです。 それぞれの貼り付け先は K列⇒F13 L列⇒F14 M列⇒F15 I列⇒F16 J列⇒F17のようになります。 それとブックBのシートBのD列に入力されている号機No.は同じ数値が入力されている時があります。 この場合は必ず下にある号機No.のが最新ですので、そちらを読み取るようにしたいです。 例えば、4行目と8行目に同じ号機No.がある場合は8行目の方を読み取る。 現在は GYOU = Application.InputBox でターゲットの行番号を入力して その行の列をコピー・ペーストしている感じです。 Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Dim tmp() As String If Intersect(Target, Range("D3")) Is Nothing Then Exit Sub Else End If Dim buf As String Dim j As Integer Dim GYOU As String Set xCur = Selection Dim OpenFileName As String Workbooks.Open Filename:="業務都合の為載せれません" GYOU = Application.InputBox("行を選択してください", "行指定") '<キャンセルの場合、処理を終わりにします。> If GYOU = "False" Then Exit Sub For j = 11 To 11 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(13, 6).PasteSpecial Paste:=xlPasteValues Next j For j = 12 To 12 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(14, 6).PasteSpecial Paste:=xlPasteValues Next j For j = 13 To 13 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(15, 6).PasteSpecial Paste:=xlPasteValues Next j For j = 9 To 9 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(16, 6).PasteSpecial Paste:=xlPasteValues Next j For j = 10 To 10 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(17, 6).PasteSpecial Paste:=xlPasteValues Next j ActiveWorkbook.Close SaveChanges:=False With xCur .Parent.Parent.Activate '元のブックへもどる .Parent.Activate '元のシートへもどる End With End Sub ど素人の為、めちゃくちゃな並びだとは思いますが一応現在の状態のマクロを載せておきます。 御指導の程、宜しくお願いします。

  • エクセルのVBAで教えて下さい。

    エクセルVBAで以下の方法のマクロが分からず、教えて頂きたいです。 まず、ブックAのシートAがあり、シートAのセルD3には号機No.を入力します(999などの数値のみ) 次にブックBのシートBがあり、このシートのD列にも号機No.が入力されています。 やりたい事はブックAのシートAのD3に号機No.を入力したら、ブックBのシートBのD列から同じ号機No.を 探し、当てはまる号機の行のI列、J列、K列、L列、M列をコピーし ブックAのシートAのF13、F14、F15、F16、F17、に貼り付けたいです。 それぞれの貼り付け先は K列⇒F13 L列⇒F14 M列⇒F15 I列⇒F16 J列⇒F17のようになります。 それとブックBのシートBのD列に入力されている号機No.は同じ数値が入力されている時があります。 この場合は必ず下にある号機No.のが最新ですので、そちらを読み取るようにしたいです。 例えば、4行目と8行目に同じ号機No.がある場合は8行目の方を読み取る。 現在は GYOU = Application.InputBox でターゲットの行番号を入力して その行の列をコピー・ペーストしている感じです。 Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Dim tmp() As String If Intersect(Target, Range("D3")) Is Nothing Then Exit Sub Else End If Dim buf As String Dim j As Integer Dim GYOU As String Set xCur = Selection Dim OpenFileName As String Workbooks.Open Filename:="業務都合の為載せれません" GYOU = Application.InputBox("行を選択してください", "行指定") '<キャンセルの場合、処理を終わりにします。> If GYOU = "False" Then Exit Sub For j = 11 To 11 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(13, 6).PasteSpecial Paste:=xlPasteValues Next j For j = 12 To 12 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(14, 6).PasteSpecial Paste:=xlPasteValues Next j For j = 13 To 13 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(15, 6).PasteSpecial Paste:=xlPasteValues Next j For j = 9 To 9 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(16, 6).PasteSpecial Paste:=xlPasteValues Next j For j = 10 To 10 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(17, 6).PasteSpecial Paste:=xlPasteValues Next j ActiveWorkbook.Close SaveChanges:=False With xCur .Parent.Parent.Activate '元のブックへもどる .Parent.Activate '元のシートへもどる End With End Sub ど素人の為、めちゃくちゃな並びだとは思いますが一応現在の状態のマクロを載せておきます。 御指導の程、宜しくお願いします。

  • VBA シートをコピーして名前を変更する

    Sub サンプル() Dim sh_name As String sh_name = Range("A1") ActiveSheet.Copy Before:=ActiveSheet End Sub (1)別ブック「book.xlsx」の「サンプル1」というシートを選択 (2)A1セルに記載している名前に変更する(テスト) (3)一番左にペースト という流れをやってみたいのですが、Range("A1”)がうまくいきません。 教えてください。 宜しくお願いします。

専門家に質問してみよう