No repetir codigo en un select case

TENGO UN CODIGO CON SELECT CASE QUE SE APLICA PARA 45 HOJAS DE EXCEL, NECESITO QUE NO SE REPITA TANTAS VECES, ESTE ES UNA PARTE DEL CODIGO PARA LOS PRIMERAS 3 HOJAS, AL
SELECCIONAR UN COMBOBOX SE ENVIA SEGUN SEA EL CASO
Select Case ComboBoxJuz.Value
Case "JUAN HERNANDEZ"
Worksheets("Hoja1").Activate
Range("A1").Select
NextRow = Application.WorksheetFunction.CountA(Range("A:A")) + 1
Cells(NextRow, 1) = ComboBoxNo
Cells(NextRow, 2) = TxtCausa
Cells(NextRow, 3) = TextBox2
Cells(NextRow, 4) = ComboBoxJuz
Cells(NextRow, 5) = TxtBla2
Cells(NextRow, 6) = ComboBoxTipo
Cells(NextRow, 7) = UCase(TxtIncul)
Cells(NextRow, 8) = ComboBoxDeli
Cells(NextRow, 9) = ComboBoxResp
Cells(NextRow, 10) = ComboBoxTra
Cells(NextRow, 11) = ComboBoxGru
Cells(NextRow, 12) = ComboBoxTipo2
Cells(NextRow, 13) = CDate(TextBox3.Text)
Sheets("Hoja1").Activate
Columns("I:I").Select
ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Add Key:=Range("I1").End(xlDown), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("BASEGENE").Sort
.SetRange Range("A1:M17")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
Case "PEDRO PEREZ"
Worksheets("Hoja2").Activate
Range("A1").Select
NextRow = Application.WorksheetFunction.CountA(Range("A:A")) + 1
Cells(NextRow, 1) = ComboBoxNo
Cells(NextRow, 2) = TxtCausa
Cells(NextRow, 3) = TextBox2
Cells(NextRow, 4) = ComboBoxJuz
Cells(NextRow, 5) = TxtBla2
Cells(NextRow, 6) = ComboBoxTipo
Cells(NextRow, 7) = UCase(TxtIncul)
Cells(NextRow, 8) = ComboBoxDeli
Cells(NextRow, 9) = ComboBoxResp
Cells(NextRow, 10) = ComboBoxTra
Cells(NextRow, 11) = ComboBoxGru
Cells(NextRow, 12) = ComboBoxTipo2
Cells(NextRow, 13) = CDate(TextBox3.Text)
Sheets("Hoja2").Activate
Columns("I:I").Select
ActiveWorkbook.Worksheets("Hoja2").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Hoja2").Sort.SortFields.Add Key:=Range("I1").End(xlDown), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("BASEGENE").Sort
.SetRange Range("A1:M17")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
Case "JOSE RAMIREZ"
Worksheets("hoja3").Activate
Range("A1").Select
NextRow = Application.WorksheetFunction.CountA(Range("A:A")) + 1
Cells(NextRow, 1) = ComboBoxNo
Cells(NextRow, 2) = TxtCausa
Cells(NextRow, 3) = TextBox2
Cells(NextRow, 4) = ComboBoxJuz
Cells(NextRow, 5) = TxtBla2
Cells(NextRow, 6) = ComboBoxTipo
Cells(NextRow, 7) = UCase(TxtIncul)
Cells(NextRow, 8) = ComboBoxDeli
Cells(NextRow, 9) = ComboBoxResp
Cells(NextRow, 10) = ComboBoxTra
Cells(NextRow, 11) = ComboBoxGru
Cells(NextRow, 12) = ComboBoxTipo2
Cells(NextRow, 13) = CDate(TextBox3.Text)
Sheets("Hoja3").Activate
Columns("I:I").Select
Application.CutCopyMode = False
ActiveWorkbook.Worksheets("Hoja3").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Hoja3").Sort.SortFields.Add Key:=Range("I1").End(xlDown), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("BASEGENE").Sort
.SetRange Range("A1:M5")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select

1 respuesta

Respuesta
1
Inicialmente veo que está muy largo el código; probá lo siguiente (tal vez se me cruzó alguna instrucción pero es mas que nada para que tomes la idea). La idea sería que en el case lo uses para ponerle en nombre de la hoja a moverse según el caso, y luego ejecutas un código "único"
Select Case ComboBoxJuz.Value
Case "JUAN HERNANDEZ"
  varHOJA = "Hoja1"
Case "PEDRO PEREZ"
  varHOJA = "Hoja2"
...
End Select 
Worksheets(varHoja).Activate
Range("A1").Select
NextRow = Application.WorksheetFunction.CountA(Range("A:A")) + 1
Cells(NextRow, 1) = ComboBoxNo
Cells(NextRow, 2) = TxtCausa
Cells(NextRow, 3) = TextBox2
Cells(NextRow, 4) = ComboBoxJuz
Cells(NextRow, 5) = TxtBla2
Cells(NextRow, 6) = ComboBoxTipo
Cells(NextRow, 7) = UCase(TxtIncul)
Cells(NextRow, 8) = ComboBoxDeli
Cells(NextRow, 9) = ComboBoxResp
Cells(NextRow, 10) = ComboBoxTra
Cells(NextRow, 11) = ComboBoxGru
Cells(NextRow, 12) = ComboBoxTipo2
Cells(NextRow, 13) = CDate(TextBox3.Text)
Sheets(varHoja).Activate
Columns("I:I").Select
ActiveWorkbook.Worksheets(varHoja).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(varHoja).Sort.SortFields.Add Key:=Range("I1").End
(xlDown), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("BASEGENE").Sort
.SetRange Range("A1:M17")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
Incluso creo que si en lugar de tener Hoja1, Hoja2, ... tienes a cada hoja que se llame igual a la persona (debe ser exacto), directamente podés eliminar el select case y hacer algo tipo
varHoja = ComboBoxJuz.Value

Saludos (y no olvides finalizar)
Gfellay
Muchas gracias por considerar mi pregunta; por otro lado el varHoja es una variable?
disculpa, pero se muy poco de macros, casi siempre utilizo la grabadora e investigo codigos en internet.
Correcto es una variable (deberías declararla antes usando Dim varHojas as String)
Saludos (y no olvides finalizar)
Gfellay

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas