1

これは簡単な質問だと思いますが、このようにExcelを使用したことがないため、苦労しています。Excel VBAベースのプログラムを作成しようとしています。私はコールセンターで働いています。さまざまなスキームの呼び出しを記録するための多数の Excel シートがあります。このプロセスを合理化するプロジェクトがあります。これまでのところ、各スキームを表す名前の付いた個別のシートを持つワークブックを作成しました。情報収集用のユーザーフォームを作成しました。コンボ ボックスの 1 つは、呼び出しが関係するスキームを示します。ユーザーフォームからの入力は、コンボボックスで選択されたスキームの名前に対応するワークブックのシートにログオンする必要があります。私はこれを仕事に近づけることができないようです。提案やアドバイスをいただければ幸いです。

私が持っているコードは次のとおりです。

Private Sub cmdClear_Click()
Call UserForm_Initialize
End Sub


Private Sub cmdClose_Click()
Unload Me
End Sub


Private Sub ComboBox1_Change()
Dim ShtName As String
ShtName = ComboBox1.List(ComboBox1.ListIndex)
End Sub

Private Sub CommandButton1_Click()
Call Add_Data
End Sub

Private Sub Add_Data()
Dim Worksheets As Range
Dim ws As Worksheet
Dim UserForm As Object
Dim iRow As Long


    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With

Set ws = this.ComboBox1.GetItemText(this.ComboBox1.SelectedItem)


'find first empty row in database
iRow = ShtName.Cells(Rows.Count, 1).End(x1up).Offset(1, 0).Row

'copy the data to the database
ws.Cells(iRow, 1) = Date
ws.Cells(iRow, 2) = Me.txtName.Value
ws.Cells(iRow, 3) = Me.txtNumber.Value
ws.Cells(iRow, 4) = ComboBox2.Value
ws.Cells(iRow, 5).Value = Me.txtQuery.Value

If optYes = True Then
        msgstr = "Yes"
    ElseIf optNo = True Then
        msgstr = "No"

End If

ws.Cells(iRow, 6).Value = msgstr



If chkMain = True Then
        msgstri = "Main"
    ElseIf chkExec = True Then
        msgstr = "Exec"
     Else
        msgstri = ""

End If

ws.Cells(iRow, 7).Value = msgstri
ws.Cells(iRow, 8).Value = Me.txtTime.Value




End Sub

Private Sub UserForm_Initialize()

ComboBox1.Clear
ComboBox1.AddItem ("Sheet2")
ComboBox1.AddItem ("Sheet3")
ComboBox1.AddItem ("Sheet4")
ComboBox1.AddItem ("Sheet5")
ComboBox1.AddItem ("Sheet6")
ComboBox1.AddItem ("Sheet7")
ComboBox1.AddItem ("Sheet8")
ComboBox1.AddItem ("Sheet9")
ComboBox1.AddItem ("Sheet10")
ComboBox1.AddItem ("Sheet11")
ComboBox1.AddItem ("Sheet12")

ComboBox2.Clear
ComboBox2.AddItem ("agent1")
ComboBox2.AddItem ("agent2")
ComboBox2.AddItem ("agent3")
ComboBox2.AddItem ("agent4")
ComboBox2.AddItem ("agent5")
ComboBox2.AddItem ("agent6")
ComboBox2.AddItem ("agent7")
ComboBox2.AddItem ("agent8")
ComboBox2.AddItem ("agent9")
ComboBox2.AddItem ("agent10")

txtNumber.Value = ""
txtName.Value = ""
txtQuery.Value = ""
txtTime.Value = ""

optYes = False
optNo = False
chkMain = False
chkExec = False

ComboBox1.SetFocus

End Sub
4

1 に答える 1

0

でエラーが発生するはずです

 Set ws = this.ComboBox1.GetItemText(this.ComboBox1.SelectedItem)

オブジェクトを文字列に設定しようとしています。使ってみて

 Set ws = Sheets(this.ComboBox1.GetItemText(this.ComboBox1.SelectedItem))

これにより、実際にその変数の ws オブジェクトが得られます。Sheets は、ブック内のワークシートのコレクションです。インデックス番号またはシートの名前で選択できます。

于 2012-11-05T01:18:17.003 に答える