تفضل
Sub ToggleColumns()
Dim action As String
Dim colsInput As String
Dim colArray() As String
Dim colItem As Variant
Dim answer As VbMsgBoxResult
Dim invalidInput As Boolean
' مربع حوار لتحديد الإجراء (إخفاء أو إظهار)
answer = MsgBox("هل تريد إخفاء الأعمدة؟" & vbCrLf & vbCrLf & "اضغط 'Yes' للإخفاء، 'No' للإظهار.", vbYesNoCancel + vbQuestion, "تحديد الإجراء")
If answer = vbCancel Then
Exit Sub ' الخروج إذا ضغط المستخدم على "Cancel"
ElseIf answer = vbYes Then
action = "إخفاء"
Else
action = "إظهار"
End If
' مربع إدخال لطلب الأعمدة من المستخدم
colsInput = InputBox("الرجاء إدخال الأعمدة التي تريد " & action & "ها." & vbCrLf & vbCrLf & "أمثلة:" & vbCrLf & "عمود واحد: B" & vbCrLf & "أعمدة متجاورة: B:D" & vbCrLf & "أعمدة متفرقة: B,D,F", "تحديد الأعمدة")
' الخروج إذا كان الإدخال فارغًا
If colsInput = "" Then Exit Sub
' إزالة أي مسافات زائدة وتقسيم الإدخال عند الفاصلة
colArray = Split(Replace(colsInput, " ", ""), ",")
invalidInput = False
On Error Resume Next ' تجاهل الأخطاء مؤقتًا للتحقق من صحة الإدخال
' المرور على كل عنصر أدخله المستخدم
For Each colItem In colArray
If colItem <> "" Then
' التحقق من أن كل جزء من الإدخال يمثل نطاقًا صالحًا
If Columns(colItem).Count = 0 Then
invalidInput = True
Exit For
End If
End If
Next colItem
On Error GoTo 0 ' إعادة تفعيل معالجة الأخطاء
' إذا كان هناك إدخال غير صالح، أظهر رسالة خطأ
If invalidInput Then
MsgBox "الإدخال '" & colItem & "' غير صالح. الرجاء التأكد من إدخال أسماء أعمدة صحيحة.", vbCritical, "خطأ في الإدخال"
Exit Sub
End If
' تنفيذ الإجراء على كل عمود أو نطاق
For Each colItem In colArray
If colItem <> "" Then
If action = "إخفاء" Then
Columns(colItem).Hidden = True
Else
Columns(colItem).Hidden = False
End If
End If
Next colItem
MsgBox "تم " & action & " الأعمدة بنجاح!", vbInformation, "اكتمل الإجراء"
End Sub