マクロを作成していますが、マクロ機能の一部は、VBA に新しいスプレッドシートを作成させることです。配布の性質上、名前が変更されます。このスプレッドシートにコードを追加する必要があります。とにかく私はこれを行うことができますか?
3 に答える
ジョークはすでにそれがどのように機能するかを説明しています。さらに一歩進めます。
ワークシートを追加する構文は次のとおりです。
expression.Add(Before, After, Count, Type)
組み込みのExcelのヘルプを確認すると、、、、が何をBefore
表しているかがわかりますAfter
。Count
Type
EXCELのヘルプから
パラメータ(4つのパラメータはすべてオプションです)
Before
-新しいシートが追加される前のシートを指定するオブジェクト。After
-新しいシートが追加された後のシートを指定するオブジェクト。Count
-追加するシートの枚数。デフォルト値は1です。Type
-シートタイプを指定します。次のXlSheetType定数のいずれかになります:xlWorksheet
、、、、または。既存のテンプレートに基づいてシートを挿入する場合は、テンプレートへのパスを指定します。デフォルト値はxlWorksheetです。xlChart
xlExcel4MacroSheet
xlExcel4IntlMacroSheet
シートが作成されたら.insertlines
、関連するプロシージャを作成し、実行するコードを埋め込むために使用する必要があります。
注-IMP:コードをVBAプロジェクトに埋め込む場合は、[VBAプロジェクトオブジェクトモデルへのアクセスを信頼する]が選択されていることを確認する必要があります。スナップショットを参照してください。
Worksheet_SelectionChange
これは、シートを作成してから、 「HelloWorld」というメッセージを表示するコードを埋め込む例です。
コード-試してテストしました
Option Explicit
Sub Sample()
Dim ws As Worksheet
Dim nLines As Long
Dim VBP As Object, VBC As Object, CM As Object
Dim strProcName As String
Set ws = Worksheets.Add
Set VBP = ThisWorkbook.VBProject
Set VBC = VBP.VBComponents(ws.Name)
Set CM = VBC.CodeModule
strProcName = "Worksheet_SelectionChange"
With ThisWorkbook.VBProject.VBComponents( _
ThisWorkbook.Worksheets(ws.Name).CodeName).CodeModule
.InsertLines Line:=.CreateEventProc("SelectionChange", "Worksheet") + 1, _
String:=vbCrLf & _
" Msgbox ""Hello World!"""
End With
End Sub
上記のコードを実行すると、新しいシートコード領域は次のようになります。
次のコードは、スプレッドシートを追加します。
Public Sub Workbook_Add()
Dim wks As Worksheet
Set wks = ThisWorkbook.Worksheets.Add(, , 1, xlWorksheet)
With wks
'set codename of wks
ThisWorkbook.VBProject.VBComponents(.CodeName).Name = "tblWhatever"
'set tablename of wks
.Name = "whatever"
'add code (untested demo)
'ThisWorkbook.VBProject.VBComponents(.CodeName).CodeModule.InsertLines 1, "Option Explicit"
'add code (as of example from excel-help)
'Application.VBE.CodePanes(1).CodeModule.InsertLines 1, "Option Explicit"
End With
End Sub
この特定のスプレッドシートに VBA コードを追加する必要がある場合は、VBProject オブジェクトをさらに調べて、CodeModuleを探し、次にInsertLinesを探します。
あなたへのさらなるヒント - 私はあなたのテーブルの CodeNames を使用しようとします。変更される可能性は低くなりますが、最初はコードで使用するのはそれほど快適ではないかもしれません. 慣れる必要がありましたが、私にとっては、テーブル名を使用することに対して多くの利点があります。
お役に立てれば ;)
デフォルトの.Add
方法では、リストの先頭にシートが追加されます。Siddarth Routで説明されているように、コード行を追加する前に最後に追加したいことがよくあります。使用できる場所ならどこでもそれを行うには:
ActiveWorkbook.Worksheets.ADD After:=ActiveWorkbook.Sheets(ActiveWorkbook.Worksheets.Count)
WB を定義して設定すると、読みやすくなります。
Dim WB as Excel.workbook
Set WB = ActiveWorkbook
WB.Sheets.ADD After:=WB.Sheets(WB.Sheets.Count)
Set VBC = ActiveSheet 'If using in Siddarth Rout's code above
Sheets
図のように、Worksheets
交換可能です。