Pertanyaan saya, scriptnya jalan khan? Hanya saja masih salah proses, begitu khan? Kalau memang jalan, mungkin bisa dicoba dengan menambahkan perintah:
DoEvents
pada beberapa bagian script, contohnya:
... '+-- Hide beberapa kolom sekaligus! If InStr(1, "GANJIL|GENAP", UCase$([E21])) > 0 Then With Sheet5 '+-- Kolom semester! .Columns("A:BR").Hidden = False .Columns("B:AI").Hidden = (UCase$([E21]) = "GENAP") .Columns("AJ:BQ").Hidden = (UCase$([E21]) = "GANJIL") DoEvents '+-- Kolom per kelas per semester! If (UCase$([E21]) = "GANJIL") Then '+-- Kelas < 3, Semeter Ganjil .Range("H:H, L:M, X:X, AB:AC").EntireColumn.Hidden = (lIdx < 3) .Range("P:P, AF:AF").EntireColumn.Hidden = (lIdx < 7) DoEvents Else '+-- Kelas < 3, Semeter Genap. .Range("AP:AP, AT:AU, BF:BF, BJ:BK").EntireColumn.Hidden = (lIdx < 3) .Range("AX:AX, BN:BN").EntireColumn.Hidden = (lIdx < 7) DoEvents End If .Activate .Range(IIf(UCase$([E21]) = "GANJIL", "C10", "AK10")).Activate DoEvents End With End If ...
Selain itu, ada beberapa opsi yang bisa dilakukan:
[1]. Cara untuk menampilkan informasinya dialihkan dari macro menggunakan formula. Memang kurang menyenangkan jadinya karena beberapa kolom akan terlihat kosong.
[2]. Dibuatkan 3 sheet berbeda untuk masing-masing tingkat. Misalkan untuk kelas 1 dan 2, sheet NilaiA. Untuk kelas 3 sampai 6 dibuat sheet NilaiB dan untuk kelas 7 sampai 9 dibuat sheet NilaiC. Jika ada perubahan, kemungkinan prosesnya dapat berupa:
— Sheet terpilih ditampilkan, yang lain disembunyikan. Atau,
— Dibuat 1 sheet master (misalkan sheet Nilai). Saat ada proses pergantian kelas, salin dan timpa data dari sheet terkait ke sheet master.
[3]. Susun ulang ... ;)
Itu saran saya saat ini. Kalau mau bisa saya bantu melalui remote (misalkan pake Team Viewer) ...