@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

VB6でExcelコントロールの制御

投稿者投稿内容
ヨッシー
会議室デビュー日: 2006/05/24
投稿数: 6
投稿日時: 2006-05-24 12:31
VB6での質問で申し訳ないのですが、誰か教えてください!!
VB6でエクセルを制御しているのですがラベルとかテキストボックスとかのコントロールを制御したいのですが、直接コントロール名にて指定すると制御できるのですが、変数にて制御しようとしましたがどうにも出来ないでいます。よろしくお願いいたします。

Excel.ActiveSheet.コントロール名.Caption="TEST"
           ↑↑↑
        ここを変数に置き換えたい

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-24 12:41
引用:

ヨッシーさんの書き込み (2006-05-24 12:31) より:

VB6での質問で申し訳ないのですが、誰か教えてください!!
VB6でエクセルを制御しているのですがラベルとかテキストボックスとかのコントロールを制御したいのですが、直接コントロール名にて指定すると制御できるのですが、変数にて制御しようとしましたがどうにも出来ないでいます。よろしくお願いいたします。

Excel.ActiveSheet.コントロール名.Caption="TEST"
           ↑↑↑
        ここを変数に置き換えたい


「できない部分」は最後の一文という解釈でよろしいでしょうか?

ヨッシーさんの言う "コントロール名" に該当したコントロールのインスタンスを持つ変数が、
ヨッシーさんのコードにある "Excel.ActiveSheet" に該当するシートのメンバに存在していれば良いと思います。

つまり、
 Excel.ActiveSheet.コントロール名.Caption="TEST"
という書き方をする必要はなくて、
 [シートのインスタンス].[シート内のコントロールのインスタンス].Caption = "Test"
が望ましいということです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ヨッシー
会議室デビュー日: 2006/05/24
投稿数: 6
投稿日時: 2006-05-24 13:38
じゃんぬねっと様、早速のご回答ありがとうございます。
質問がうまく伝わらなかった様で申し訳ありません。
コントロール名の所をエクセルVBAで定義した名前'Label1'とか'Text1'とかの実際の名前でなく変数名で汎用的に制御したいと思っています。こういうことは出来ないでしょうか?
よろしくお願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-24 13:46
引用:

ヨッシーさんの書き込み (2006-05-24 13:38) より:

質問がうまく伝わらなかった様で申し訳ありません。
コントロール名の所をエクセルVBAで定義した名前'Label1'とか'Text1'とかの実際の名前でなく変数名で汎用的に制御したいと思っています。こういうことは出来ないでしょうか?


変数 とのことですが、変数名はただの名前であり、動作上は特別な意味を持ちません。
ある変数に '参照を格納' して、'好きな変数名' でどうこうする、ということはできます。

...それが、先のレスだったりします。(;^-^)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-24 14:01
わかりにくいので、ちょっと例を...

コード:

    Dim 好きな変数名 As TextBox
    Set 好きな変数名 = xlSheet.Text1

    好きな変数名.Text = "好きな Text"


これが、別の名前で参照を取る方法になります。
コレクションで扱うような方法を取ると、名前で取り出せます。

コード:

    Dim hCollection As Collection
    Set hCollection = New Collection

    Call hCollection.Add(xlSheet.Text1,   "Control1")
    Call hCollection.Add(xlSheet.Label2,  "Control2")
    Call hCollection.Add(xlSheet.Button3, "Control3")

    hCollection("Control2").Caption = "MosaMosaAA"


この場合、'Control2' が実際の名前じゃない、ヨッシーさんの言う "変数名" の代わりになります。

まあ、こういう型を明示化できない + 遅延バインディングなコードは私は好きではありません。
何故、希望されているのかわかりませんが、真っ当にやるのが 1 番ですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ヨッシー
会議室デビュー日: 2006/05/24
投稿数: 6
投稿日時: 2006-05-25 11:05
 じゃんぬねっと様、回答ありがとうございます。

 確かにコントロール名称がわかっていれば行う意味がないのですが、私が実際に行いたいことは、エクセルフォームは別の人が作成しセルにコントロール名を列挙してもらい、VB6のプログラムを私が作成しエクセル内を制御しようとしています。

 内容としては、

 ・エクセル側に部品情報を列挙
  1,"ラベル1","Label"
  2,"ラベル2","Label"
     ・
     ・
  
 ・VB6側プログラム
  Sub Main
    Dim Ctl(n) as String
    '
    Call エクセル情報読込み
    Call ExlControl(Ctl(1),"TEXT")
  End Sub

  Sub ExlControl(Ctl As String,Msg As String)
    ・・・(Ctl).Caption = Msg
  End Sub

 見たいな方法が出来ないかと思っているのですが・・・。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2006-05-25 11:09
Excel の control って2種類ありますが、どっちなんでしょう?
ヨッシー
会議室デビュー日: 2006/05/24
投稿数: 6
投稿日時: 2006-05-25 15:26
SUBで定義した XlsControl は明示的に付けたモジュール名称なのですが、VB6でエクセルを扱うには、
'MicrosoftExcel 9.0 ObjectLibrary を参照設定して使っています。

スキルアップ/キャリアアップ(JOB@IT)