アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして

----------------------------
配列Aにシート名を全て格納

フォームに引数を渡す

UserForm_Initialize にて
コンボボックスに引数を羅列させる
----------------------------

というようなマクロを作成しようと思っているのですが、フォームに引数を渡す方法がわからず困っています

どなたかご教授をお願いします
よろしくお願いします

A 回答 (4件)

どうしても Initialize イベントで初期設定を行いたいのなら、標準モジュールに書いた Public な変数に情報を持つしかないと思います。


呼び出し元から、最初にシート名一覧を Public 変数である "配列A" にセットしてからフォームを Show する。

Initialize じゃなくても良いのなら、フォームに独自のプロパティを作成する方法。
例えばこんな感じとか。

' 呼び出し元のコード
Dim sheetNames As String
' シート名に使えない文字を区切り文字に使う
sheetNames = "a/b/c/d/e/f"
UserForm1.OpenArg = sheetNames
UserForm1.Show

' ユーザーフォームのコード
Option Explicit

Public Property Let OpenArg(aArg As String)
 Dim argArray As Variant
 argArray = Split(aArg, "/")

 Dim arg As Variant
 For Each arg In argArray
  Me.ComboBox1.AddItem arg
 Next
End Property

フォームを Show する前にプロパティを呼び出すので、その瞬間にますフォームの Initialize イベントが実行され、そのあとプロパティに値がセットされてコンボボックスに値が入ります。
したがって Initialize イベント内でコンボボックスの値を元に他の初期化もすることはできませんので、コンボボックスに入れる値を使って初期化するコードはすべてこの独自プロパティの中で処理する必要があります。
ということで、初期化のコードが多い場合はコードが煩雑になる可能性があります。
    • good
    • 0

ウーン!



AddItem だけでは、表示されなくて当然です。

Private Sub CommandButton1_Click()
  With UserForm1.ComboBox1
    .AddItem "AAA"
    .AddItem "BBB"
    .AddItem "CCC"
    .Value = "AAA" ' Value の設定が必要
  End With
  UserForm1.Show
End Sub

ただ、ドロップダウン表示するには、次の仕掛けも必要です。

Private Sub UserForm_Activate()
  ComboBox1.DropDown
End Sub

なお、どうしても局所的な配列を渡したければ、<フォームのCaptionを経由して渡す>ことが可能です。
が、簡単なのは、広域変数を使うことです。

Private Sub CommandButton1_Click()
  WSName(0) = "AAA"
  WSName(1) = "BBB"
  UserForm1.Show
End Sub

Private Sub UserForm_Activate()
  With ComboBox2
    .AddItem WSName(0)
    .AddItem WSName(1)
  End With
End Sub
    • good
    • 0

Private Sub CommandButton1_Click()


  UserForm1.ComboBox1.AddItem "AAA"
  UserForm1.ComboBox1.AddItem "BBB"
  UserForm1.ComboBox1.AddItem "CCC"
  UserForm1.Show
End Sub

シート側で一気が判りやすいかと・・・。
    • good
    • 0
この回答へのお礼

この方法では、フォームを開くと同時に
コンボボックス内にアイテムが表示されないので
解決にはつながらなさそうです

回答ありがとうございました

お礼日時:2006/08/29 10:22

VBカテですが、Excel-VBAですか?


こういう意味ではない?

Private Sub UserForm_Initialize()
Dim ws As Worksheet
 For Each ws In ThisWorkbook.Worksheets
   ComboBox1.AddItem ws.Name
 Next ws
End Sub
    • good
    • 0
この回答へのお礼

この方法でも問題ないと思いますが

この方法では、再度Worksheetのset を行わなくてはならないので避けたい方法です

ちなみに配列に格納されているsheet名は別Bookのsheet名全てです

回答ありがとうございました

お礼日時:2006/08/29 10:24

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A