プロが教える店舗&オフィスのセキュリティ対策術

いつも大変お世話になっております。
下記のコードで
ワークブックを追加したあとに シート名を変更することは可能でしょうか

set targetR =thisworkbook.worksheets("a").range("A1").currentregion
set wb =workbooks.add

targetR.copy wb.worksheets(1).range("A1") 'ここの部分です。

wb.close

A 回答 (1件)

りんごプリン様 こんばんは



予めworksheetオブジェクトのnameプロパティで設定する事で
可能です
set wb =workbooks.add
wb.worksheets(1).name="文字列"
targetR.copy wb.worksheets("文字列").range("A1")

nameプロパティは、設定、取得が出来ます

また、新規ブック作成時直後のインデックス1のシート名は Sheet1です
wb.worksheets("Sheet1")
でもnameプロパティで設定、取得が可能です

こちらを心配しているのかも知れませんね
nameプロパティはrangeオブジェクトの下位オブジェクトであるnameオブジェクトを参照していますので

thisworkbook.worksheets("a")の名前を変更する事も可能です
予め設定されたRangeオブジェクトの値は変わりません
親シート名は変わります
(Rangeオブジェクトの値を変更すると値は変更される)
ただし、これを実行すると同じプロシージャを次回、正しく実行できない可能性があります
set targetR =thisworkbook.worksheets("a") aが変更される為

nameオブジェクトについては
application、workbook、worksheetオブジェクトに含まれているnamesコレクションのメンバです。nameプロパティやnameステートメントと混同しないようにしてください

簡単なコードで検証できます
Sub experiment()
Dim wb As Workbook
Set wb = Workbooks.Add
Dim st As String
Dim targetR As Range
Set targetR = ThisWorkbook.Worksheets("a").Range("A1").CurrentRegion
st = "文字列"
wb.Worksheets(1).Name = st
ThisWorkbook.Worksheets("a").Name = "Now"
If targetR Is Nothing Then
Debug.Print "nothing"
Else
Debug.Print "Rangeのシート名 := "; targetR.Parent.Name
wb.Worksheets(st).Range("A1") _
.Resize(targetR.Rows.Count, targetR.Columns.Count).Value = targetR.Value
End If
End Sub

デバッグ方法、VBEの機能、使用方法などが解れば容易に自身で解決できるのでは無いかと思います
    • good
    • 0
この回答へのお礼

いつもありがとうございます。

お礼日時:2022/12/11 19:23

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