Error when running VLookup
I've written a program which looks up a value which the user inputs together with the different option the user choose, I have to lookup this input value at different columns worksheets and return the values accordingly. Everything works fine until I add in the VLookup line. I get a RunTime Error 9 Subscript Out of RangeI've tried using a For Next loop instead of the VLookup but it gave an error too. Hopefully I've explained myself clearly.
Here's the code:
Code:
Private Sub UserForm_Initialize()
SingleACText.Text = 230
ThreeACText.Text = 400
CaSCText.Text = "Table"
CaOLText.Text = "Table"
CgText.Text = "Table"
CiText.Text = 0.5
' Call SetBackColor(DataTable.TabIndex(0), vbLightOrange)
' Call SetBackColor(DataTable.TabIndex(1), vbSkyBlue)
' Call SetBackColor(DataTable.TabIndex(2), vbYellow)
' Call SetBackColor(DataTable.TabIndex(3), vbGold)
DataTable.ViewOnlyMode = True
DataTable.Cells.Clear
Worksheets("Ca").Range("A1:D19").Copy
DataTable.Range("A1:D19").Paste
DataTable.Selection.EntireColumn.AutoFit
DataTable.Range("B7").Select
DataTable.ActiveWindow.FreezePanes = True
DataTable.Range("A1").Select
End Sub
Private Sub Tables_Change()
Dim n As Integer
DataTable.ViewOnlyMode = True
n = Tables.SelectedItem.Index
' Call SetBackColor(MultiPage1.Pages(0), vbYellow) 'Yellow.
' Call SetBackColor(MultiPage1.Pages(1), RGB(255, 0, 0)) 'Red.
' Call SetBackColor(MultiPage2.Pages(0), vbGreen) 'Green.
' Call SetBackColor(MultiPage2.Pages(1), vbMagenta) 'Purple.
Select Case n
Case 0
DataTable.Cells.Clear
Worksheets("Ca").Range("A1:D19").Copy
DataTable.Range("A1:D19").Paste
DataTable.Selection.EntireColumn.AutoFit
DataTable.Range("B7").Select
DataTable.ActiveWindow.FreezePanes = True
DataTable.Range("A1").Select
Case 1
DataTable.Cells.Clear
Worksheets("Ca").Range("E1:H19").Copy
DataTable.Range("A1:D19").Paste
DataTable.Selection.EntireColumn.AutoFit
DataTable.Range("B7").Select
DataTable.ActiveWindow.FreezePanes = True
DataTable.Range("A1").Select
Case 2
DataTable.Cells.Clear
Worksheets("Cg").Range("A1:I24").Copy
DataTable.Range("A1:I24").Paste
DataTable.Selection.EntireColumn.AutoFit
DataTable.Range("B7").Select
DataTable.ActiveWindow.FreezePanes = True
DataTable.Range("A1").Select
Case 3
DataTable.Cells.Clear
Worksheets("ISO-AWG").Range("A1:C36").Copy
DataTable.Range("A1:C36").Paste
DataTable.Selection.EntireColumn.AutoFit
DataTable.Range("6:6").Select
DataTable.ActiveWindow.FreezePanes = True
DataTable.Range("A1").Select
End Select
End Sub
Private Sub ReturnCableLengthText_Change()
ReturnCableLengthSpin.Value = Val(ReturnCableLengthText.Text)
End Sub
Private Sub ReturnCableLengthSpin_Change()
ReturnCableLengthText.Text = ReturnCableLengthSpin.Value
End Sub
Private Sub LoadCurrentText_Change()
LoadCurrentSpin.Value = Val(LoadCurrentText.Text)
End Sub
Private Sub LoadCurrentSpin_Change()
LoadCurrentText.Text = LoadCurrentSpin.Value
End Sub
Private Sub OverloadCurrentText_Change()
OverloadCurrentSpin.Value = Val(OverloadCurrentText.Text)
End Sub
Private Sub OverloadCurrentSpin_Change()
OverloadCurrentText.Text = OverloadCurrentSpin.Value
End Sub
Private Sub CgText_Change()
CgSpin.Value = Val(CgText.Text) * 100
End Sub
Private Sub CgSpin_Change()
CgText.Text = CgSpin.Value * 0.01
End Sub
Private Sub CiText_Change()
CiSpin.Value = Val(CiText.Text) * 100
End Sub
Private Sub CiSpin_Change()
CiText.Text = CiSpin.Value * 0.01
End Sub
Private Sub Armoured_Change()
Select Case Armoured.Value
Case True: SingleCore.Enabled = False
Case False: SingleCore.Enabled = True
End Select
End Sub
Private Sub NonMagneticArmour_Change()
Select Case NonMagneticArmour.Value
Case True: MultiCore.Enabled = False
Case False: MultiCore.Enabled = True
End Select
End Sub
'Private Sub SingleCore_Change()
' Select Case SingleCore.Value
' Case True: Armoured.Enabled = False
' Case False: Armoured.Enabled = True
' End Select
'End Sub
'Private Sub MultiCore_Change()
' Select Case MultiCore.Value
' Case True: NonMagneticArmour.Enabled = False
' Case False: NonMagneticArmour.Enabled = True
' End Select
'End Sub
Private Sub TwoCoresCables_Change()
Select Case TwoCoresCables.Value
Case True: ThreeAC.Enabled = False
Case False: ThreeAC.Enabled = True
End Select
End Sub
Private Sub ThreeFourCoresCables_Change()
Select Case ThreeFourCoresCables.Value
Case True: DC.Enabled = False
SingleAC.Enabled = False
Case False: DC.Enabled = True
SingleAC.Enabled = True
End Select
End Sub
'Private Sub DC_Change()
' Select Case DC.Value
' Case True: OneTrefoil.Enabled = False
' ElevenTrefoil.Enabled = False
' TwelveTrefoil.Enabled = False
' Case False: OneTrefoil.Enabled = True
' ElevenTrefoil.Enabled = True
' TwelveTrefoil.Enabled = True
' End Select
'End Sub
'Private Sub DC_Change()
' Select Case DC.Value
' Case True: ThreeFourCoresCables.Enabled = False
' Case False: ThreeFourCoresCables.Enabled = True
' End Select
'End Sub
'Private Sub SingleAC_Change()
' Select Case SingleAC.Value
' Case True: ThreeFourCoresCables.Enabled = False
' Case False: ThreeFourCoresCables.Enabled = True
' End Select
'End Sub
'Private Sub ThreeAC_Change()
' Select Case ThreeAC.Value
' Case True: TwoCoresCables.Enabled = Fasle
' Case False: Two CoresCables.Enabled = True
' End Select
'End Sub
Private Sub Method1_Change()
Select Case Method1.Value
Case True: Select Case ThreeAC.Value
Case True: OneTrefoil.Enabled = True
Case False: OneTrefoil.Enabled = False
End Select
Case False: OneTrefoil.Enabled = False
End Select
End Sub
Private Sub Method11_Change()
Select Case Method11.Value
Case True: Select Case ThreeAC.Value
Case True: ElevenTrefoil.Enabled = True
Case False: ElevenTrefoil.Enabled = False
End Select
Case False: ElevenTrefoil.Enabled = False
End Select
End Sub
Private Sub Method12_Change()
Select Case Method12.Value
Case True: Select Case ThreeAC.Value
Case True: TwelveTrefoil.Enabled = True
Case False: TwelveTrefoil.Enabled = False
End Select
Horizontal.Enabled = True
Vertical.Enabled = True
Case False: TwelveTrefoil.Enabled = False
Horizontal.Enabled = False
Vertical.Enabled = False
End Select
End Sub
Private Sub TwelveTrefoil_Change()
Select Case TwelveTrefoil.Value
Case True: Horizontal.Enabled = False
Vertical.Enabled = False
Case False: Horizontal.Enabled = True
Vertical.Enabled = True
End Select
End Sub
Private Sub Horizontal_Change()
Select Case Horizontal.Value
Case True: TwelveTrefoil.Enabled = False
Case False: TwelveTrefoil.Enabled = True
End Select
End Sub
Private Sub Vertical_Change()
Select Case Vertical.Value
Case True: TwelveTrefoil.Enabled = False
Case False: TwelveTrefoil.Enabled = True
End Select
End Sub
Private Sub OKButton_Click()
Dim Msg As String
Dim Ct As Single
' Dim WorksheetName As String
' Dim WorksheetNumber As Integer
'Display Messages
If Aluminium Then Msg = Msg & Aluminium.Caption
If Copper Then Msg = Msg & Copper.Caption
If PVC Then Msg = Msg & " " & PVC.Caption
If PVC Then WorksheetName = "DataPVC"
'If Rubber Then Msg = Msg & vbNewLine & Rubber.Caption
If Thermosetting Then Msg = Msg & " " & Thermosetting.Caption
If Thermosetting Then WorksheetName = "DataThermo"
If Armoured Then Msg = Msg & vbNewLine & Armoured.Caption
If Armoured Then WorksheetNumber = "3"
If NonArmoured Then Msg = Msg & vbNewLine & NonArmoured.Caption
If NonArmoured Then WorksheetNumber = "1"
If NonMagneticArmour Then Msg = Msg & vbNewLine & NonMagneticArmour.Caption
If NonMagneticArmour Then WorksheetNumber = "3"
If Method1 Then Msg = Msg & " " & Method1.Caption
If Method3 Then Msg = Msg & " " & Method3.Caption
If Method4 Then Msg = Msg & " " & Method4.Caption
If Method11 Then Msg = Msg & " " & Method11.Caption
If Method12 Then Msg = Msg & " " & Method12.Caption
If Method13 Then Msg = Msg & " " & Method13.Caption
If OneTrefoil Then Msg = Msg & " " & OneTrefoil.Caption
If ElevenTrefoil Then Msg = Msg & " " & ElevenTrefoil.Caption
If TwelveTrefoil Then Msg = Msg & " " & TwelveTrefoil.Caption
If Horizontal Then Msg = Msg & " " & Horizontal.Caption
If Vertical Then Msg = Msg & " " & Vertical.Caption
If MultiCore Then WorksheetNumber = WorksheetNumber + 1
If SingleCore Then WorksheetNumber = WorksheetNumber + 0
WorksheetName = WorksheetName & WorksheetNumber
If TwoCoresCables Then
Select Case MultiCore.Value
Case True: Msg = Msg & vbNewLine & "2 Core - " & MultiCore.Caption & " Cables"
Case False: Select Case SingleCore.Value
Case True: Msg = Msg & vbNewLine & "2 " & SingleCore.Caption & " Cables"
Case False: Msg = Msg
End Select
End Select
End If
If ThreeFourCoresCables Then
Select Case MultiCore.Value
Case True: Msg = Msg & vbNewLine & "3/4 Core - " & MultiCore.Caption & " Cables"
Case False: Select Case SingleCore.Value
Case True: Msg = Msg & vbNewLine & "3/4 " & SingleCore.Caption & " Cables"
Case False: Msg = Msg
End Select
End Select
End If
If DC Then Msg = Msg & vbNewLine & DC.Caption & " " & DCText.Text & "V"
If SingleAC Then Msg = Msg & vbNewLine & SingleAC.Caption & " " & SingleACText.Text & "V"
If ThreeAC Then Msg = Msg & vbNewLine & ThreeAC.Caption & " " & ThreeACText.Text & "V"
Msg = Msg & vbNewLine
If ReturnCableLengthText.Text = Empty Then ReturnCableLengthText.Text = "0"
Msg = Msg & vbNewLine & "Return Cable Length: " & ReturnCableLengthText.Text & " m"
If LoadCurrentText.Text = Empty Then LoadCurrentText.Text = "0"
Msg = Msg & vbNewLine & "Load Current: " & LoadCurrentText.Text & " A"
If OverloadCurrentText.Text = Empty Then OverloadCurrentText.Text = "0"
Msg = Msg & vbNewLine & "Overload Current: " & OverloadCurrentText.Text & " A"
Msg = Msg & vbNewLine
If CaSCText.Text = Empty Then CaSCText.Text = "0"
Msg = Msg & vbNewLine & "CaSC: " & CaSCText.Text
If CaOLText.Text = Empty Then CaOLText.Text = "0"
Msg = Msg & vbNewLine & "CaOL: " & CaOLText.Text
If CgText.Text = Empty Then CgText.Text = "0"
Msg = Msg & vbNewLine & "Cg: " & CgText.Text
'CiText.Text preset to 0.5
Msg = Msg & vbNewLine & "Ci: " & CiText.Text
If MCB Then Ct = 1
If SemiEnclosedFuse Then Ct = 0.725
Msg = Msg & vbNewLine & "Ct: " & Ct
'Reference Data Calculation
' Dim Row As Integer
Dim Column As Integer
Dim Multiplier As Integer
Dim i As Integer
Dim CurrentCarryingCapacity As Variant
Dim VoltageDrop As Integer
If TwoCoresCables Then Column = 2
If ThreeFourCoresCables Then Column = 38
If DC Then Column = Column + 0
If DC Then Multiplier = 1
If SingleAC Then Column = Column + 8
If SingleAC Then Multiplier = 4
If ThreeAC Then Column = Column + 0
If ThreeAC Then Multiplier = 4
If Method1 Then Column = Column + Multiplier * 0
If Method3 Then Column = Column + Multiplier * 1
If Method4 Then Column = Column + Multiplier * 2
If Method11 Then Column = Column + Multiplier * 3
If Method12Horizontal Then Column = Column + Multiplier * 4
If Method12Vertical Then Column = Column + Multiplier * 5
If Method13 Then Column = Column + Multiplier * 6
If OneTrefoil Then Column = Column + Multiplier * 7
If ElevenTrefoil Then Column = Column + Multiplier * 8
If TwelveTrefoil Then Column = Column + Multiplier * 9
If DC Then VoltageDrop = 9
If DC Then ReturnColumn = VoltageDrop - Column + 1
If SingleAC Then VoltageDrop = Column + 3
If ThreeAC Then VoltageDrop = Column + 3
Msg = Msg & vbNewLine & VoltageDrop
If Aluminium Then
CurrentCarryingCapacity = WorksheetFunction.VLookup(LoadCurrentText.Text, Worksheets("WorksheetName").Range(Cells(10, Column), Cells(26, VoltageDrop)), ReturnColumn, False)
End If
If Copper Then
CurrentCarryingCapacity = WorksheetFunction.VLookup(LoadCurrentText.Text, Worksheets("WorksheetName").Range(Cells(28, Column), Cells(49, VoltageDrop)), ReturnColumn)
End If
Msg = Msg & vbNewLine & Column
Msg = Msg & vbNewLine & i
Msg = Msg & vbNewLine & VoltageDrop
Msg = Msg & vbNewLine & WorksheetName
Msg = Msg & vbNewLine & CurrentCarryingCapacity
Display9.Text = Msg
Display9.MultiLine = True
End Sub
Private Sub CancelButton_Click()
Unload CableSizingSelection
End Sub