VBAを使用して従業員コース記録をソートする。私は従業員クラスを持っており、条件を満たしている人を特定しようとしています。私はコードを踏んで、BlsHasIssue()
での私の状態テストを除いて、すべてうまく動作します。関連コード:VBA - Excelクラス機能 - ロジック
'''''''''''''
'clsEmployee'
'''''''''''''
Option Explicit
Private empID As String
Private name As String
Private hasBLSComp As Boolean
Private hasBLSAssignment As Boolean
Public Property Let id(value As String)
empID = value
End Property
Property Get id() As String
id = empID
End Property
Public Property Let setName(value As String)
name = value
End Property
Public Property Get getName() As String
getName = name
End Property
Public Sub addResusRecord(value As String) 'accepts name of course
Select Case value
Case "BLS Assignment":
hasBLSAssignment = True
Case "BLS Competency":
hasBLSComp = True
End Select
End Sub
Public Function BlsHasIssue() As Boolean
If hasBLSComp And Not hasBLSAssignment Then
BlsHasIssue = True
Else
BlsHasIssue = False
End If
End Function
''''''''
'Module'
''''''''
Option Explicit
Const STUDENT_NAME_COL As Integer = 3
Const USER_ID_COL As Integer = 4
Const COURSE_NAME_COL As Integer = 5
Public Function Contains(col As Collection, key As Variant) As Boolean
Dim obj As Variant
On Error GoTo err
Contains = True
IsObject (col(key))
Exit Function
err:
Contains = False
End Function
Sub ResusCardAudit()
Dim row As Long
Dim currEmpID As String
Dim employees As New Collection
Dim emp As Object
For row = 2 To 5 'change to be last row of data
'Check to see if user exists in collection
currEmpID = Cells(row, USER_ID_COL).value
If Not Contains(employees, currEmpID) Then
'create User and add it to collection
Set emp = New clsEmployee
emp.id = currEmpID
emp.setName = Cells(row, STUDENT_NAME_COL)
emp.addResusRecord Cells(row, COURSE_NAME_COL)
employees.Add emp, currEmpID
Else
employees.Item(currEmpID).addResusRecord Cells(row, COURSE_NAME_COL)
End If
Next row
'cycle through all employees and determine if any have a comp but not an assignment
Set emp = New clsEmployee
row = 2
For Each emp In employees
If emp.BlsHasIssue Then
row = row + 1
End If
Next emp
'if they do, add their details to a new sheet named "Results"
End Sub
私は問題がemp.BlsHasIssue
をテストする場合、論理エラーのようですhasBLSAssignment.
適切hasBLSComp
を設定するコードを残しています。ここで私をもたらしたテストは、hasBLSComp
がTrueでhasBLSAssignment
がFalseの場合 - >BlsHasIssue()
の結果がFalseになったときです。
注:hasBLSAssignment
はTrue、hasBLSComp
はFalseであっても構いません。
思考?
あなたの 'BlsHasIssue'関数にエラーがありますか?あなたの 'ResusCardAudit'サブルーチンは現時点では何もしていません(空のコレクションを繰り返すことは少し意味がありません)ので、おそらく**あなたの関数は呼び出されていないので機能していないと思うかもしれません。 **あなたがそのコレクションに何かを持っているなら、それがどのように設定されているかを私たちに示すことが考えられるかもしれません。 (必ずしもすべてのコードではなく、問題を再現できるほど十分です。) – YowE3K
ここに表示されるロジックは良いです。だから問題は他の場所にあるはずです。 –
私はもっとコードを追加します –