私は月に利用可能なレンタルを追跡するワークブックを作成しています。毎月1枚ずつ12枚に分かれています。各シートの最初の3つの列は、宿泊施設の種類、寝室の数、賃貸料に含まれるものを追跡します。コンセプトには、入力エラーを減らすために入力するのではなく、ポイントアンドクリックオプションでユーザーが入力できるドロップダウンコンボボックスがあります。コンボボックスが選択されたリストインデックス値を返さない
アクティブなセルがどの列にあるかによって内容が変化し、次に配列がコンボボックスに割り当てられる固定配列をセットアップしました。コードは、Sheet1モジュールのコンボボックスコードの下にあり、ThisWorkbookモジュールはSheetSelectionChangeの下で呼び出すため、各シートのコードが繰り返されることはありません。
A標準モジュールは、すべての12個のコンボボックスは、同じ名前、cboOptionsを共有
公共の配列を作り、彼らは関係なく、選択されたものをシートの、正しく取り込みます。私の問題は、コンボボックスのどれも、それを指示するコードに関係なく、選択されたリストの値を返すことがないということです。私は選択された位置の値に対して返された位置の値を調べるためにテストしましたが、パターンを確立することはできませんでした。私は、変数と配列をクリアして、コードが邪魔になるかもしれないと思っていましたが、効果がないようです。問題について私ができることを読んだことがありますが、問題の可能性については考えていません...事前に感謝しています!
Sheet1のモジュール内のコード:
Private Sub cboOptions_Change()
Erase myarray()
cboOptions.Visible = True
cboOptions.Enabled = True
cboOptions.Clear
n = ActiveCell.Row
If n >= 3 And n < 10000 Then
If ActiveSheet.Range(ActiveCell.Address).Address = Range("A" & n).Address Then
myarray(1) = "Apartment"
myarray(2) = "Room"
myarray(3) = "Townhouse"
myarray(4) = "House"
ElseIf ActiveSheet.Range(ActiveCell.Address).Address = Range("B" & n).Address Then
myarray(1) = "1"
myarray(2) = "2"
myarray(3) = "3"
myarray(4) = "4"
myarray(5) = "5"
ElseIf ActiveSheet.Range(ActiveCell.Address).Address = Range("C" & n).Address Then
myarray(1) = "Heat & Water"
myarray(2) = "All-inclusive"
Else
cboOptions.Enabled = False
cboOptions.Visible = False
End If
End If
'ActiveSheet.cboOptions.ListIndex = 0
'Dim x As Long
'MsgBox ActiveSheet.Name
With ActiveSheet
.cboOptions.Left = .Range(ActiveCell.Address).Left
.cboOptions.Top = .Range(ActiveCell.Address).Top
.cboOptions.List = myarray()
With .cboOptions
'the problem is that x needs to get assigned a value from the combo box before it continues to execute
x = .List(.ListIndex)
'MsgBox x
End With
.Range(ActiveCell.Address) = x 'myarray(x)
.Columns(ActiveCell.Column).ColumnWidth = cboOptions.Width * 0.18
x = 0
Erase myarray()
End With
End Sub
はThisWorkbookにおけるコード:Module1の中
Sub Workbook_SheetSelectionChange(ByVal sh As Object, ByVal Target As Range)
Application.Run "Sheet1.cboOptions_Change"
End Sub
コード:
Option Explicit
Public myarray(0 To 5) As String
あなたのコードはcboOptions_Changeである理由? –
これは、コンボボックスを作成するために必要な場所です。元のコンボボックスはSheet1にあり、他のすべての参照点です。私は標準的なモジュールの中でそれを作ることができると思います... – quadrature
それで、条件は訂正されていますか?なぜなら、もしそうでなければ、あなたはコンボボックスに何も持たないからです。 –