プロが教えるわが家の防犯対策術!

同じユーザーフォーム2に2つコンボボックスがあります。
1つ目のコンボボックスは動作します。(別ブックのシート)
2つ目が動きません。(同じブックの別シート)どうすれば動作しますか?助けてください。
Private Sub UserForm_Initialize()           ←1つ目のコンボボックス1
Dim wb As Workbook
Dim sh As Worksheet
Dim lastrow As Long
Const TargetBook As String = "請求.xlsm"
Dim myDesktop As String
Dim wsh As Object
Set wsh = CreateObject("Wscript.Shell")
myDesktop = wsh.SpecialFolders("Desktop")
Set wsh = Nothing
'ブック名:請求のフルパスを指定
Set wb = Workbooks.Open(myDesktop & "\" & TargetBook)
Set sh = wb.Worksheets("請求先")
lastrow = sh.Cells(sh.Rows.Count, "C").End(xlUp).Row
With ComboBox1
.List() = sh.Range("C2:C" & lastrow).Value
.Style = fmStyleDropDownList
End With
wb.Close False
'初期化処理
Worksheets("受注IMP").Activate
End Sub

Private Sub ComboBox1_Change()
Worksheets("受注IMP").Range("B2").Value = ComboBox1.Text
End Sub

Private Sub コンボ2()                 ← 2つ目のコンボボックス2     
Dim lastrow As Integer                            
Dim i As Integer
lastrow = Worksheets("荷主").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastrow
ComboBox1.AddItem Worksheets("荷主").Range("C" & i).Value
Next i
End Sub

Private Sub ComboBox2_Change()
Worksheets("受注IMP").Range("B3").Value = ComboBox2.Value
End Sub

質問者からの補足コメント

  • ComboBox2は動きません。どこかに不足があるのですね。
    標準モジュール module1 ---
    Sub S_ComboBox2()
    Dim lastrow As Integer
    Dim i As Integer
    lastrow = Worksheets("荷主").Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To lastrow
    UserForm2.ComboBox2.AddItem Worksheets("荷主").Range("C" & i).Value
    Next i
    End Sub

    Userform2---
    Private Sub コンボ2呼ぶ()
    '初期化処理
    Worksheets("受注IMP").Activate
    Call S_ComboBox2 '← 呼び出す
    End Sub

      補足日時:2023/03/25 16:33

A 回答 (3件)

こんにちは


問題があるかも知れない箇所

Userform2---
Private Sub コンボ2呼ぶ()
'初期化処理
Worksheets("受注IMP").Activate
Call S_ComboBox2 '← 呼び出す
End Sub

これはPrivate Sub コンボ2() 当該ご質問と同じ間違いをしています
#1様の回答に重複しますが

> Private Sub コンボ2呼ぶ()  と言うのはイベントプロシージャではありません(プロシージャの意味は調べてください)
従ってボタンに登録とかイベント内からCallステートメントで実行するとか・・何だかの方法で(呼び出し)実行しなければなりません

マクロを実行する
https://support.microsoft.com/ja-jp/office/%E3%8 …

Callステートメント
https://excel-ubara.com/excelvba1/EXCELVBA405.html

Userform2--- イベントプロシージャから呼ぶ
対象の標準モジュールは明示しましょう

Private Sub UserForm_Initialize()
--割愛
wb.Close False
Call Module1.S_ComboBox2
'初期化処理
Worksheets("受注IMP").Activate
End Sub

更に Module1
Sub S_ComboBox2()
Dim lastrow As Integer
Dim i As Integer
lastrow = Worksheets("荷主").Cells(Rows.Count, 3).End(xlUp).Row
For i = 2 To lastrow
UserForm2.ComboBox2.AddItem Worksheets("荷主").Range("C" & i).Value
Next i
End Sub

ーーー
なおし(想像での不具合要素)
Cells(Rows.Count, 3) Cなので特別の意図が無いのであれば 3です

>ComboBox2は動きません。
この書き方だと誰も分かりません。具体的に事象を説明しましょう
    • good
    • 0
この回答へのお礼

標準モジュールの使い方、Call の仕方等勉強になりました。プロシージャについては、大きな命令の括りとしか認識できておらず、使い方や書き方などもきちんと理解できていない状況です。今回も大変お世話になり、恐縮です。本当にありがとうございました。
最後に補足についてですが、何故かAIのチェックに引っかかってしまい、質問することができず苦肉の策であのような書き方になってしまいました。申し訳ありませんでした。

お礼日時:2023/03/26 12:25

こんにちは


既に回答に出ている事と プラス
ComboBox1.AddItem Worksheets("荷主").Range("C" & i).Value は
コントロールのComboBox1に対して結果を出力しますが 対象はコンボ2なので
ComboBox2.AddItem Worksheets("荷主").Range("C" & i).Value
としてください
    • good
    • 0
この回答へのお礼

Qchan1962様、完全にケアレスミスです。ご指摘ありがとうございます。

お礼日時:2023/03/26 12:30

勝手には動かないので。



Private Sub UserForm_Initialize() '           ←1つ目のコンボボックス1

'初期化処理
Worksheets("受注IMP").Activate
Call コンボ2() '← 呼び出す
End Sub

かな?
    • good
    • 2
この回答へのお礼

初心者ですが何か。様、ヒントをありがとうございました。ネットや本でコードをコピペしている状況ですが、VBAを理解できるように頑張りたいと思います。

お礼日時:2023/03/26 12:28

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