4

マクロを作成していますが、マクロ機能の一部は、VBA に新しいスプレッドシートを作成させることです。配布の性質上、名前が変更されます。このスプレッドシートにコードを追加する必要があります。とにかく私はこれを行うことができますか?

4

3 に答える 3

8

ジョークはすでにそれがどのように機能するかを説明しています。さらに一歩進めます。

ワークシートを追加する構文は次のとおりです。

expression.Add(Before, After, Count, Type)

組み込みのExcelのヘルプを確認すると、、、、が何をBefore表しているかがわかりますAfterCountType

EXCELのヘルプから

パラメータ4つのパラメータはすべてオプションです

  1. Before-新しいシートが追加される前のシートを指定するオブジェクト。
  2. After -新しいシートが追加された後のシートを指定するオブジェクト。
  3. Count -追加するシートの枚数。デフォルト値は1です。
  4. Type -シートタイプを指定します。次のXlSheetType定数のいずれかになります:xlWorksheet、、、、または。既存のテンプレートに基づいてシートを挿入する場合は、テンプレートへのパスを指定します。デフォルト値はxlWorksheetです。xlChartxlExcel4MacroSheetxlExcel4IntlMacroSheet

シートが作成されたら.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

上記のコードを実行すると、新しいシートコード領域は次のようになります。

ここに画像の説明を入力してください

于 2012-09-05T13:11:42.383 に答える
2

次のコードは、スプレッドシートを追加します。

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 を使用しようとします。変更される可能性は低くなりますが、最初はコードで使用するのはそれほど快適ではないかもしれません. 慣れる必要がありましたが、私にとっては、テーブル名を使用することに対して多くの利点があります。

お役に立てれば ;)

于 2012-09-05T11:53:03.430 に答える
0

デフォルトの.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交換可能です。

于 2016-08-29T12:46:53.847 に答える