আপনি কীভাবে ভাগ করা এক্সেল ফাইলগুলির দুর্নীতি প্রতিরোধ করবেন?


2

আমার কাছে 10 বা তার বেশি ভাগ করা ম্যাক্রো সক্ষম এক্সেল ফাইল রয়েছে যা প্রায় 30-50 জন ব্যবহারকারী প্রতিদিন একাধিকবার পরিবর্তন করে। সময়ের সাথে সাথে ফাইলগুলি বগল হয়ে যায় এবং এক্সেল চিন্তাভাবনা থেকে স্ফীত হয়ে পড়েছে ব্যবহারকারীরা এখনও না থাকলেও সেগুলি তাদের ব্যবহার করছেন। যদি আমি মাঝে মাঝে ফাইলগুলি ভাগ না করে এবং পুনরায় ভাগ না করি তবে তারা শেষ পর্যন্ত দুর্নীতিগ্রস্থ হয়ে যায়।

আমার প্রশ্ন হ'ল এটি রোধ করার সর্বোত্তম উপায় কী?

আমার আসল ধারণাটি ছিল ম্যাক্রো লিখুন যা সমস্ত ফাইল আন-শেয়ার করে এবং তারপরে জাঙ্ক থেকে মুক্তি পেতে পুনরায় ভাগ করে নিয়েছিল। এটির নীচের দিকটি এটি হ'ল এটি সমস্ত বর্তমান ব্যবহারকারীদের আউট করে দেবে তাই আমি তার বিরুদ্ধে সিদ্ধান্ত নিয়েছি।

কিছুক্ষণ চিন্তা করার পরে আমি একটি সম্ভাব্য সমাধান নিয়ে এসেছি। দয়া করে আমার উত্তরের সমালোচনা করুন এবং আমাকে এটির উন্নতি করতে সহায়তা করুন বা আপনার আরও ভাল সমাধান থাকলে দয়া করে আমাকে জানান।


কীভাবে ভাগ করে নেওয়া হচ্ছে? কেন শেয়ারপয়েন্ট ব্যবহার করবেন এবং ব্যবহারকারীর চেক ইন করুন এবং ডক্সটি চেক আউট করুন?
রায়স্টাফেরিয়ান

এটি পর্যালোচনা ট্যাবের অধীনে ওয়ার্কবুক শেয়ার করুন বিকল্পটি ব্যবহার করে ভাগ করা হয়েছে। যদি আমরা শেয়ার পয়েন্টে ফাইলটি খোলার জন্য এক্সেল ব্যবহার করি তবে এটি ফাইলটিকে একটি ব্যবহারকারীর কাছে লক করে রাখার কারণে আমরা এই বৈশিষ্ট্যটি ব্যবহার করতে পারছি না।
ম্যাথু লোজোয়া

উত্তর:


3

আমার সমাধানের জন্য আমি একটি ম্যাক্রো তৈরি করেছি যা সমস্ত কাস্টম ভিউ সাফ করে এবং তুলনামূলকভাবে যে কতক্ষণ ব্যবহারকারী নিষ্ক্রিয় ছিলেন এবং তারপরে সময়সীমার বাইরে থাকলে তাদের লাথি মেরে ফেলে। ফাইলগুলি খোলার সময় আমি ক্লিন_আপ চালায়।

Sub Clean_Up()
    'Clean up Extra Data to prevent file from being sluggish
    Dim cv As CustomView

    For Each cv In ActiveWorkbook.CustomViews
        cv.Delete
    Next cv
    SharedUserCheck
End Sub

Sub SharedUserCheck()
    'Remove old users to speed up shared workbook
    Dim TimeStart As Date
    Dim TimeLimit As Date
    Dim SharedDuration As Date
    Dim Users As Variant
    Dim UserCount As Integer

    'Set time limit here in "HH:MM:SS"
    TimeLimit = TimeValue("02:00:00")
    Users = ActiveWorkbook.UserStatus

    For UserCount = UBound(Users) To 1 Step -1
        TimeStart = Users(UserCount, 2)
        SharedDuration = Now - TimeStart
        If SharedDuration > TimeLimit Then
            'MsgBox (Users(UserCount, 1) & " has been inactive for " & Application.Text(SharedDuration, "[hh]:mm") & " and will now be removed from the workbook.")
            ThisWorkbook.RemoveUser (UserCount)
        End If
    Next
End Sub

আপডেট: 9/1/15 সুতরাং কোনও সমস্যা ছাড়াই এক সপ্তাহ বা তার বেশি সময় হয়ে গেছে আমি লক্ষ্য করেছি যে ফাইলগুলির মধ্যে কিছুটা বড় হতে শুরু করেছে।

আমি বিশ্বাস করি এটি 30 দিনের পরিবর্তিত ইতিহাস রাখার কারণেই এটি ঘটেছে। ফাইলের আকার কম রাখতে আমি এটিকে 1 দিনের মধ্যে কমিয়েছি।

ভাগ করা ব্যবহারকারী তালিকায় আর কোনও অতিরিক্ত ব্যবহারকারী নেই এবং ফাইলগুলি দুর্দান্ত কাজ করছে।

আপডেট: 9/17/15 ফাইলগুলি একই আকারে অবশিষ্ট রয়েছে ব্যবহারকারীরা কোনও কার্যকারিতা হ্রাস লক্ষ্য করেনি। ব্লাট পরিষ্কার করতে আমার ফাইলগুলির কোনও কাজ করতে হয়নি। এটি সমস্যাগুলি স্থির করেছে বলে মনে হচ্ছে।

আপডেট: 3/27/17 উপরের মূল উত্তরটি ভাল কাজ করেছে যতক্ষণ না আমরা সত্যই এই ওয়ার্কবুকগুলিকে ঠেলাতে শুরু করি। আমাদের এখন প্রায় 150 জন ব্যবহারকারী প্রতি সপ্তাহে এই ওয়ার্কবুকগুলিতে কয়েক হাজার পরিবর্তন করে চলেছে এ সময়টিতে আমাদের আবার সমস্যা শুরু হয়েছিল।

সুতরাং আমি সাপ্তাহিক ওয়ার্কবুকগুলি আনশারে অতিরিক্ত কোড যুক্ত করেছি এবং তারপরে রবিবার প্রথমবারের মতো খোলার পরে ওয়ার্কবুকটি পুনরায় ভাগ করুন। এটি অন্য যে কোনও সমস্যার কারণে কার্যপত্রিকাটি দুর্নীতিগ্রস্থ হওয়ার কারণ হতে পারে care

আমি প্রায় এক বছর আগে চূড়ান্ত অংশ যুক্ত করেছি এবং যেহেতু আমাদের মোটেই সমস্যা হয়নি। এটি ব্যাখ্যা করার জন্য মন্তব্য সহ আমার কোডের চূড়ান্ত অংশ। কেবল এটি একটি মডিউলে যুক্ত করুন এবং ওয়ার্কবুক_অ্যাপেন ইভেন্টে রবিবারের রক্ষণাবেক্ষণের রুটিনটি কল করুন:

Public Sub RemoveOtherUsers()
    'Remove all other users to prevent access violation
    Dim Users As Variant
    Dim UserCount As Integer

    Users = ThisWorkbook.UserStatus
    For UserCount = UBound(Users) To 1 Step -1
        If Users(UserCount, 1) <> Application.UserName Then
            ThisWorkbook.RemoveUser (UserCount)
        End If
    Next
End Sub

Public Sub SundayMaintenance()
    Application.ScreenUpdating = False
    'On every Sunday the first time the sheet is opened clear out extra data and extra sheets
    If (WeekdayName(Weekday(Date)) = "Sunday") And (Sheets(1).Cells(3, "AG").Value < Date) Then

        'Disconnect other users as a precaution
        RemoveOtherUsers

        Application.DisplayAlerts = False

        'Unshare to clear extra data out    
        ThisWorkbook.UnprotectSharing ("Whatever Password")

        Application.DisplayAlerts = True

        'Set Change History to 1 day to prevent build up of junk in the file
        With ThisWorkbook
            If .KeepChangeHistory Then
                .ChangeHistoryDuration = 1
            End If
        End With

        'Store Last Date Unshared and Cleared to prevent multiple unshare events on sunday. 
        Sheets(1).Cells(3, "AG").Value = Date

        'Delete all extra sheets that were added by mistake and have the word sheet in them
        For Each WS In ThisWorkbook.Worksheets
            If UCase(WS.Name) Like "Sheet" & "*" Then
                Application.DisplayAlerts = False
                WS.Delete
                Application.DisplayAlerts = True
            End If
        Next

        'Reshare
        Application.DisplayAlerts = False
        ThisWorkbook.ProtectSharing Filename:=ThisWorkbook.FullName, SharingPassword:="Whatever Password"
        Application.DisplayAlerts = True

    End If
    Application.ScreenUpdating = True
End Sub

আপডেট: 7/23/18 আমি এই উত্তরে স্মার্কিংম্যানের ছোট পরিবর্তন যুক্ত করেছি। আমরা এখনও আমাদের ভাগ করা ওয়ার্কবুকগুলিতে এই কোডটি চালাচ্ছি এবং সেগুলি ক্রাশ হয় না এবং প্রত্যাশার মতো চলছে। আমরা সর্বশেষতম শেয়ারপয়েন্ট সংস্করণও চালিয়েছি যা এখনও ভাগ করা ওয়ার্কবুকের বৈশিষ্ট্যগুলির সাথে ধরা দেয়নি।


1
আপনার উদাহরণে একটি সূক্ষ্ম বাগ আছে। আপনি যখন কোনও ব্যবহারকারীকে সরান তখন অ্যারের আকার পরিবর্তন হয় যাতে আপনার ব্যবহারকারীদের 'পিছনের দিকে' স্ক্যান করা উচিত: ইউজারকাউন্ট = ইউবাউন্ড (ব্যবহারকারী) এর জন্য 1 পদক্ষেপ -1
স্মার্কিংম্যান

বাহ, এটি অবশ্যই এক্সেলের সীমাবদ্ধতা বা এই বিষয়ে অ্যাক্সেসকে চাপ দিচ্ছে। এটা আপনার জন্য কাজ করে শুনে খুব খুশি। আমরা কয়েকটি ওয়ার্কবুক ভাগ করে নেওয়ার বিষয়টি সন্ধান করছি, তবে এ সম্পর্কে বেশিরভাগ প্রতিবেদনগুলি ইতিবাচক নয় not বেশিরভাগ লোকেরা কেবল ভাগ করে নেওয়া "ভাঙ্গা" বলে থাকেন তবে মাইক্রোসফ্ট যদি এর মধ্যে এমন কিছু রাখে (সম্ভবত কোনও ব্যবহারকারীকে তারা জিজ্ঞাসা করে যে তারা কাজ চালিয়ে যেতে চায় এবং যদি উত্তর না দেওয়া হয় তবে চলতে থাকে), সম্ভবত এটি সম্ভবত একটি কার্যকর বৈশিষ্ট্য হতে পারে!
গ্লেনফ্রিম আইওয়া 15

হ্যাঁ এটি আসলে বেশ ভালভাবে কাজ করছে এখন আমাদের সংস্থা শেয়ারপয়েন্টে স্যুইচ করতে চলেছে তবে শেয়ারপয়েন্টের বৈশিষ্ট্যগুলিও এক্সেলের মধ্যে ভাগ করে নেওয়ার সাথে তুলনা করে না তাই আমরা আমার সমাধানটির সাথে
ম্যাথু লোজোয়া

@ স্মার্কিংম্যান আমি উত্তরটি সংশোধন করে যুক্ত করেছি কিছুক্ষণ আগে যা করার তাগিদ দিয়েছিলাম তবে আমি মনে করি আমি কেবল ভুলে গেছি।
ম্যাথু লোজোয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.