1
매크로를 만들었습니다. 매크로는 특정 범위의 셀을 선택하면 기본적으로 실행됩니다. 여기 내 코드는 다음과 같습니다.Windows에서 매크로는 정상적으로 작동하지만 Mac에서는 작동하지 않습니다.
Private cellSelected As String
Private cellDData As String
Private cellEData As String
Private cellFData As String
Private cellGData As String
Private cellIData As String
Private cellD As String
Private cellE As String
Private cellF As String
Private cellG As String
Private cellI As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' [START] Transaction related to Location Master Form
If Not Intersect(Target, Range("B2:B300")) Is Nothing Then
cellSelected = Target.Address(0, 0)
Location_Master.loc_position = cellSelected
Location_Master.Show
End If
If Not Intersect(Target, Range("C2:C300")) Is Nothing Then
cellSelected = Target.Address(0, 0)
Location_Master.loc_position = cellSelected
Location_Master.Show
End If
' [END] Transaction related to Location Master Form
' [START] Transaction related to Data Master Form
If Not Intersect(Target, Range("D2:D300")) Is Nothing Then
cellSelected = Target.Address(0, 0)
cellE = Replace(cellSelected, "D", "E")
cellF = Replace(cellSelected, "D", "F")
cellG = Replace(cellSelected, "D", "G")
cellI = Replace(cellSelected, "D", "I")
cellDData = Range(cellSelected).Value
cellEData = Range(cellE).Value
cellFData = Range(cellF).Value
cellGData = Range(cellG).Value
cellIData = Range(cellI).Value
Data_Master.ppr_position = cellSelected
Data_Master.cellD_Data = cellDData
Data_Master.cellE_Data = cellEData
Data_Master.cellF_Data = cellFData
Data_Master.cellG_Data = cellGData
Data_Master.cellI_Data = cellIData
Data_Master.Show
End If
If Not Intersect(Target, Range("E2:E300")) Is Nothing Then
cellSelected = Target.Address(0, 0)
cellD = Replace(cellSelected, "E", "D")
cellF = Replace(cellSelected, "E", "F")
cellG = Replace(cellSelected, "E", "G")
cellI = Replace(cellSelected, "E", "I")
cellDData = Range(cellD).Value
cellEData = Range(cellSelected).Value
cellFData = Range(cellF).Value
cellGData = Range(cellG).Value
cellIData = Range(cellI).Value
Data_Master.ppr_position = cellSelected
Data_Master.cellD_Data = cellDData
Data_Master.cellE_Data = cellEData
Data_Master.cellF_Data = cellFData
Data_Master.cellG_Data = cellGData
Data_Master.cellI_Data = cellIData
Data_Master.Show
End If
If Not Intersect(Target, Range("F2:F300")) Is Nothing Then
cellSelected = Target.Address(0, 0)
cellD = Replace(cellSelected, "F", "D")
cellE = Replace(cellSelected, "F", "E")
cellG = Replace(cellSelected, "F", "G")
cellI = Replace(cellSelected, "F", "I")
cellDData = Range(cellD).Value
cellEData = Range(cellE).Value
cellFData = Range(cellSelected).Value
cellGData = Range(cellG).Value
cellIData = Range(cellI).Value
Data_Master.ppr_position = cellSelected
Data_Master.cellD_Data = cellDData
Data_Master.cellE_Data = cellEData
Data_Master.cellF_Data = cellFData
Data_Master.cellG_Data = cellGData
Data_Master.cellI_Data = cellIData
Data_Master.Show
End If
If Not Intersect(Target, Range("G2:G300")) Is Nothing Then
cellSelected = Target.Address(0, 0)
cellD = Replace(cellSelected, "G", "D")
cellE = Replace(cellSelected, "G", "E")
cellF = Replace(cellSelected, "G", "F")
cellI = Replace(cellSelected, "G", "I")
cellDData = Range(cellD).Value
cellEData = Range(cellE).Value
cellFData = Range(cellF).Value
cellGData = Range(cellSelected).Value
cellIData = Range(cellI).Value
Data_Master.ppr_position = cellSelected
Data_Master.cellD_Data = cellDData
Data_Master.cellE_Data = cellEData
Data_Master.cellF_Data = cellFData
Data_Master.cellG_Data = cellGData
Data_Master.cellI_Data = cellIData
Data_Master.Show
End If
If Not Intersect(Target, Range("I2:I300")) Is Nothing Then
cellSelected = Target.Address(0, 0)
cellD = Replace(cellSelected, "I", "D")
cellE = Replace(cellSelected, "I", "E")
cellF = Replace(cellSelected, "I", "F")
cellG = Replace(cellSelected, "I", "G")
cellDData = Range(cellD).Value
cellEData = Range(cellE).Value
cellFData = Range(cellF).Value
cellGData = Range(cellG).Value
cellIData = Range(cellSelected).Value
Data_Master.ppr_position = cellSelected
Data_Master.cellD_Data = cellDData
Data_Master.cellE_Data = cellEData
Data_Master.cellF_Data = cellFData
Data_Master.cellG_Data = cellGData
Data_Master.cellI_Data = cellIData
Data_Master.Show
End If
' [END] Transaction related to Data Master Form
End Sub
여기서는 선택한 셀 값을 전달합니다. 즉 C2, D5 등이 있고, 셀 데이터가있는 경우 해당 셀 데이터가 포함됩니다. 자,이 코드 조각, MS Office 2010에서
Public ppr_position As String
Public cellD_Data As String
Public cellE_Data As String
Public cellF_Data As String
Public cellG_Data As String
Public cellI_Data As String
Private cellLetter As String
Private cellD As String
Private cellE As String
Private cellF As String
Private cellG As String
Private cellI As String
Private Sub btnCancel_Click()
Unload Me ' Unloading the Data Master Form
End Sub
Private Sub btnSubmit_Click()
cellLetter = Left(ppr_position, 1) 'Getting Cell Letter where user just clicked
If (StrComp(cellLetter, "D") = 0) Then ' Paper Type was selected
cellE = Replace(ppr_position, "D", "E")
cellF = Replace(ppr_position, "D", "F")
cellG = Replace(ppr_position, "D", "G")
cellI = Replace(ppr_position, "D", "I")
' Applying Validation on data entered
If (Me.paper_type_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Paper Type", vbCritical
Exit Sub
ElseIf (Me.paper_source_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Paper Source", vbCritical
Exit Sub
ElseIf (Me.paper_quality_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Paper Quality", vbCritical
Exit Sub
ElseIf (Me.stock_status_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Stock Status", vbCritical
Exit Sub
ElseIf (Me.currency_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Currency", vbCritical
Exit Sub
End If
' Data gets entered to corresponding cell(s) on Validation Success
Range(ppr_position).Value = Me.paper_type_list
Range(cellE).Value = Me.paper_source_list
Range(cellF).Value = Me.paper_quality_list
Range(cellG).Value = Me.stock_status_list
Range(cellI).Value = Me.currency_list
ElseIf (StrComp(cellLetter, "E") = 0) Then ' Paper Source was selected
cellD = Replace(ppr_position, "E", "D")
cellF = Replace(ppr_position, "E", "F")
cellG = Replace(ppr_position, "E", "G")
cellI = Replace(ppr_position, "E", "I")
' Applying Validation on data entered
If (Me.paper_type_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Paper Type", vbCritical
Exit Sub
ElseIf (Me.paper_source_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Paper Source", vbCritical
Exit Sub
ElseIf (Me.paper_quality_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Paper Quality", vbCritical
Exit Sub
ElseIf (Me.stock_status_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Stock Status", vbCritical
Exit Sub
ElseIf (Me.currency_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Currency", vbCritical
Exit Sub
End If
' Data gets entered to corresponding cell(s) on Validation Success
Range(ppr_position).Value = Me.paper_source_list
Range(cellD).Value = Me.paper_type_list
Range(cellF).Value = Me.paper_quality_list
Range(cellG).Value = Me.stock_status_list
Range(cellI).Value = Me.currency_list
ElseIf (StrComp(cellLetter, "F") = 0) Then ' Paper Quality was selected
cellD = Replace(ppr_position, "F", "D")
cellE = Replace(ppr_position, "F", "E")
cellG = Replace(ppr_position, "F", "G")
cellI = Replace(ppr_position, "F", "I")
' Applying Validation on data entered
If (Me.paper_type_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Paper Type", vbCritical
Exit Sub
ElseIf (Me.paper_source_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Paper Source", vbCritical
Exit Sub
ElseIf (Me.paper_quality_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Paper Quality", vbCritical
Exit Sub
ElseIf (Me.stock_status_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Stock Status", vbCritical
Exit Sub
ElseIf (Me.currency_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Currency", vbCritical
Exit Sub
End If
' Data gets entered to corresponding cell(s) on Validation Success
Range(ppr_position).Value = Me.paper_quality_list
Range(cellD).Value = Me.paper_type_list
Range(cellE).Value = Me.paper_source_list
Range(cellG).Value = Me.stock_status_list
Range(cellI).Value = Me.currency_list
ElseIf (StrComp(cellLetter, "G") = 0) Then ' Stock Status was selected
cellD = Replace(ppr_position, "G", "D")
cellE = Replace(ppr_position, "G", "E")
cellF = Replace(ppr_position, "G", "F")
cellI = Replace(ppr_position, "G", "I")
' Applying Validation on data entered
If (Me.paper_type_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Paper Type", vbCritical
Exit Sub
ElseIf (Me.paper_source_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Paper Source", vbCritical
Exit Sub
ElseIf (Me.paper_quality_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Paper Quality", vbCritical
Exit Sub
ElseIf (Me.stock_status_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Stock Status", vbCritical
Exit Sub
ElseIf (Me.currency_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Currency", vbCritical
Exit Sub
End If
' Data gets entered to corresponding cell(s) on Validation Success
Range(ppr_position).Value = Me.stock_status_list
Range(cellD).Value = Me.paper_type_list
Range(cellE).Value = Me.paper_source_list
Range(cellF).Value = Me.paper_quality_list
Range(cellI).Value = Me.currency_list
ElseIf (StrComp(cellLetter, "I") = 0) Then ' Currency was selected
cellD = Replace(ppr_position, "I", "D")
cellE = Replace(ppr_position, "I", "E")
cellF = Replace(ppr_position, "I", "F")
cellG = Replace(ppr_position, "I", "G")
' Applying Validation on data entered
If (Me.paper_type_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Paper Type", vbCritical
Exit Sub
ElseIf (Me.paper_source_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Paper Source", vbCritical
Exit Sub
ElseIf (Me.paper_quality_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Paper Quality", vbCritical
Exit Sub
ElseIf (Me.stock_status_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Stock Status", vbCritical
Exit Sub
ElseIf (Me.currency_list.ListIndex = -1) Then
MsgBox "Kindly Select valid Currency", vbCritical
Exit Sub
End If
' Data gets entered to corresponding cell(s) on Validation Success
Range(ppr_position).Value = Me.currency_list
Range(cellD).Value = Me.paper_type_list
Range(cellE).Value = Me.paper_source_list
Range(cellF).Value = Me.paper_quality_list
Range(cellG).Value = Me.stock_status_list
End If
Unload Me ' Unloading the Data Master Form
End Sub
Private Sub paper_quality_list_Change()
End Sub
Private Sub paper_type_list_Change()
End Sub
Private Sub UserForm_Activate()
Me.paper_type_list.Value = cellD_Data
Me.paper_source_list.Value = cellE_Data
Me.paper_quality_list.Value = cellF_Data
Me.stock_status_list.Value = cellG_Data
Me.currency_list.Value = cellI_Data
End Sub
Private Sub UserForm_Initialize()
' Setting Paper Type Name Range to combo-box
For Each paperType In [Paper_Type]
Me.paper_type_list.AddItem paperType
Next paperType
' Setting Paper Source Name Range to combo-box
For Each paperSource In [Paper_Source]
Me.paper_source_list.AddItem paperSource
Next paperSource
' Setting Paper Quality Name Range to combo-box
For Each paperQuality In [Paper_Quality]
Me.paper_quality_list.AddItem paperQuality
Next paperQuality
' Setting Stock Status Name Range to combo-box
For Each stockStatus In [Stock_Status]
Me.stock_status_list.AddItem stockStatus
Next stockStatus
' Setting Currency Name Range to combo-box
For Each currencyName In [Currency]
Me.currency_list.AddItem currencyName
Next currencyName
End Sub
를 잘 작동하지만에 실패 :
For Each currencyName In [Currency]
, [환율]를 내 동적 이름 범위입니다. (Mac Office 2011 사용). 해결책을 제안하십시오.
'Location_Master'는 userform이라고 가정하고 VBE (도구 - 옵션 - 일반 탭)의 오류 옵션을 'Class in class 모듈'로 변경 한 다음 코드를 다시 시도하고 강조 표시된 내용을 확인하십시오. – Rory
코드를 디버깅하려고 했습니까? 오류 메시지가 나타 납니까? 좀 더 구체적으로 말씀해 주시겠습니까? –
@EugeneAstafiev 오류 메시지는 형식 불일치 오류 13이며 그 오류를 표시하는 줄은 Form의 변수에 값 (이 경우 cellSelected)을 보냈습니다. 여기서 두 데이터 유형은 모두 String입니다. –