سؤال

لذلك أنا أعمل على إنشاء مستند لبعض الأشخاص حيث يتم تعيين كل مجموعة ، منها ثلاثة ، لون خط لإدخالهم في المستند. لقد كتبت برنامج نصي VBA يحتوي على قائمة بجميع المعنيين ويمكنهم تحديد الشخص المسجل إلى الكمبيوتر والمجموعة التي يتواجدون معها. ومع ذلك ، أنا غير قادر على الحصول على لون الخط لوضع نفسه. قمت بتسجيل برنامج نصي VBA حيث قمت بتعيين لون الخط لترى كيف تعمل الكلمة ، ولكن الكود الناتج عن Selection.Font.Color = wdColorRed لن تغير في الواقع لون الخط المحدد عند إضافته إلى البرنامج النصي VBA الخاص بي. فيما يلي مثال على الرمز الذي أستخدمه:

Private Sub Document_Open()

Dim Users As New Scripting.Dictionary
Dim UserID As String
Dim category As String

UserID = GetUserName 'Currently using the example at
                     'http://support.microsoft.com/kb/161394 as a function

'---Add Members of Group 1---
Users.Add "person1", "group1"
Users.Add "person2", "group1"

'---Add Members of Group 2---
Users.Add "person3", "group2"
Users.Add "person4", "group2"
Users.Add "person5", "group2"

'---Add Members of Group 3---
Users.Add "person6", "group3"
Users.Add "person7", "group3"

For Each user In Users.Keys
    If user = UserID Then
        If Users.Item(user) = "group1" Then
            Selection.Font.Color = wdColorRed
        ElseIf Users.Item(user) = "group2" Then
            Selection.Font.Color = wdColorGreen
        ElseIf Users.Item(user) = "group3" Then
            Selection.Font.Color = wdColorBlue
        Else
            Selection.Font.Color = wdColorBlack
        End If
    End If
Next

End Sub
هل كانت مفيدة؟

المحلول

AFAIK ، لا يمكنك تعيين لون الخط الافتراضي لمستخدم معين. حتى لو تمكنت ، على سبيل المثال ، قم بتعيينها على الأزرق وانتقلت إلى جملة باللون الأحمر ، وإذا كتبت أي شيء ، فلن ترى نصًا أزرق ولكن نص أحمر. لأن الموضع الذي يكون فيه المؤشر سيختار اللون الأصلي الذي تم استخدامه لتلوين هذه الجملة.

لتعيين لون محدد للمستخدم ، سيكون عليك إما إلى أي منهما

  1. Identify a range and set the color for it. ولكن كما ذكرت أعلاه ، إذا كان المستخدم ينتقل إلى نطاق مختلف ، فلن ينطبق إعداد الألوان الجديد هناك.

  2. Set it for the entire document. إذا قمت بتعيينه للمستند بأكمله ، فسيتغير لون المستند بأكمله وأنا متأكد من أن هذا ليس ما تريده.

نصائح أخرى

قواعد حلقة محتملة Application.WindowSelectionChange Event. لذلك تحتاج إلى الاحتفاظ بالخطوات التالية:

1. خلق وحدة الفئة
2. اسم وحدة الفئة الخاصة بك App
3. أتعامل مع الرمز التالي إلى App Class Module:

    Public WithEvents WRD As Application

    Private Sub WRD_WindowSelectionChange(ByVal Sel As Selection)
        'here you should place solution from your Document_Open sub
        'which defines color based on user name or...
        'you could place it somewhere else but pass color value 
        'here as a parameter

        'for test I just assumed that color should be blue
        Sel.Font.Color = wdColorBlue
    End Sub

4. في الوحدة النمطية القياسية أضف متغيرًا عامًا:

    Public tmpApp As New App

5. Sub في الوحدة النمطية القياسية ، أو إضافة رمز إلى الخاص بك Document_Open Event, ، والتي ستهيئة صفنا:

Sub Document_Open_new()

    Set tmpApp.WRD = Application

    'we need to change selection once to trigger full
    'scope of solution
    'if we omit the code below new color will not work
    'if user add new text at the beginning of the document
    'right after it was opened
    Dim tmpSel As Range
    Set tmpSel = Selection.Range
    ActiveDocument.Bookmarks("\EndOfDoc").Select
    tmpSel.Select
End Sub

6. قم بتشغيل SUB أعلاه مرة واحدة أو فتح المستند إذا تمت إضافة الرمز إلى Document_open event.

---تعديل--- (بعد بعض التعليقات من sid أدناه)

هناك بعض المضايقات لاستخدام الحل المقترح. ومع ذلك ، يمكن حل معظمهم عن طريق إضافة البعض If statements داخل WindowSelectionChange event. التحقق من موقع Sel range المعلمة والنص حولها والآخرون يسمحون بدقة ما إذا كان ينبغي تطبيق لون جديد أم لا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top