ایجاد سوال
dark_mode
0 دوستدار 0 امتیاز منفی
39 visibility
موضوع: آفیس توسط:

با گذشت زمان، ایجاد و جمع آوری تعداد زیادی کتاب کار اکسل بسیار آسان است. فرض کنید که شما یک دسته کامل کتاب کار دارید که باید همان تغییر را در آنها ایجاد کنید. به عنوان مثال، ممکن است لازم باشد مقدار ذخیره شده در سلول A10 هر یک از کاربرگ های هر یک از کتاب های کاری را تغییر دهید.

اگر فقط چند کتاب کار برای تغییر داشتید، کار بسیار آسان است: هر کتاب کار را بارگیری کنید و به نوبه خود تغییر را در هر یک از آنها ایجاد کنید. اگر چند صد کتاب کار دارید که باید در آنها تغییر ایجاد شود، آن وقت این کار دشوارتر می شود.

اگر پیش‌بینی می‌کنید که فقط یک بار باید این کار را انجام دهید، ساده‌ترین راه حل این است که یک فایل متنی ایجاد کنید که حاوی مسیر و نام فایل هر یک از کتاب‌های کاری، یک کتاب کار در هر خط باشد. به عنوان مثال، ممکن است با فایلی مواجه شوید که دارای ورودی هایی مانند این باشد:

c:myfilesfirst workbook.xlsx
c:myfilessecond workbook.xlsx
c:myfiles	hird workbook.xlsx

فایل می تواند به تعداد خطوط لازم در خود داشته باشد. واقعا مهم نیست نکته مهم این است که هر خط یک مسیر و نام فایل معتبر باشد و هیچ خط خالی در فایل وجود نداشته باشد.

شما به راحتی می توانید چنین فایلی را با نمایش یک پنجره خط فرمان، پیمایش به دایرکتوری حاوی Workbook ها و صدور دستور زیر ایجاد کنید:

dir /b > myfilelist.txt

هر فایل در دایرکتوری به فایل myfilelist.txt ختم می شود. شما باید فایل متنی را در یک ویرایشگر متن بارگیری کنید و آن را بررسی کنید تا بتوانید ورودی های اضافی را حذف کنید. (به عنوان مثال، myfilelist.txt در فهرست قرار می گیرد.) همچنین باید نام مسیر را به ابتدای هر خط در فایل اضافه کنید.

پس از تکمیل فایل، می‌توانید اکسل را راه‌اندازی کنید و از یک ماکرو برای خواندن فایل متنی استفاده کنید، هر کتاب کار فهرست شده در فایل متنی را بارگیری کنید، هر کاربرگ آن کتاب کار را مرور کنید، تغییر مناسب را ایجاد کنید و کتاب کار را ذخیره کنید. ماکرو زیر این وظایف را به خوبی انجام می دهد.

Sub ChangeFiles1()
    Dim sFilename As String
    Dim wks As Worksheet

    Open "c:myfilesmyfilelist.txt" For Input As #1
    Do While Not EOF(1)
        Input #1, sFilename   Get workbook path and name
        Workbooks.Open sFilename

        With ActiveWorkbook
            For Each wks In .Worksheets
                 Specify the change to make
                wks.Range("A1").Value = "A1 Changed"
            Next
        End With

        ActiveWorkbook.Close SaveChanges:=True
    Loop
    Close #1
End Sub

در حالی که این رویکرد در صورتی که فقط یک دسته از فایل‌های کتاب کار را پردازش کنید عالی عمل می‌کند، اگر پیش‌بینی کنید که نیاز به ایجاد چنین تغییراتی در آینده داشته باشید، می‌توان آن را بسیار انعطاف‌پذیرتر کرد. البته بزرگترین دردسر این است که هر بار که می خواهید دسته ای از فایل ها را پردازش کنید، فایل myfilelist.txt را کنار هم قرار دهید. اگر ماکرو بتواند به سادگی از یک دایرکتوری استفاده کند و سپس هر کتاب کار را از آن دایرکتوری بارگیری کند، انعطاف پذیری اضافه می شود.

Sub ChangeFiles2()
    Dim MyPath As String
    Dim MyFile As String
    Dim dirName As String
    Dim wks As Worksheet

     Change directory path as desired
    dirName = "c:myfiles"

    MyPath = dirName & "*.xlsx"
    MyFile = Dir(MyPath)
    If MyFile > "" Then MyFile = dirName & MyFile

    Do While MyFile <> ""
        If Len(MyFile) = 0 Then Exit Do 

        Workbooks.Open MyFile

        With ActiveWorkbook
            For Each wks In .Worksheets
                 Specify the change to make
                wks.Range("A1").Value = "A1 Changed"
            Next
        End With

        ActiveWorkbook.Close SaveChanges:=True

        MyFile = Dir
        If MyFile > "" Then MyFile = dirName & MyFile
    Loop
End Sub 

این ماکرو از هر دایرکتوری که برای متغیر dirName مشخص می کنید استفاده می کند. هر فایل کتاب کار (که با پسوند Xlsx ختم می شود) بارگیری و پردازش می شود.

روش دیگر این است که ماکرو از کاربر بپرسد کدام دایرکتوری باید پردازش شود. برای انجام این کار می توانید از کادر محاوره ای استاندارد Excel File به روشی که در ماکرو زیر نشان داده شده است استفاده کنید.

Public Sub ChangeFiles3()
    Dim MyPath As String
    Dim MyFile As String
    Dim dirName As String

    With Application.FileDialog(msoFileDialogFolderPicker)
         Optional: set folder to start in
        .InitialFileName = "C:Excel"
        .Title = "Select the folder to process"
        If .Show = True Then
            dirName = .SelectedItems(1)
        End If
    End With

    MyPath = dirName & "*.xlsx"
    myFile = Dir(MyPath)
    If MyFile > "" Then MyFile = dirName & MyFile

    Do While MyFile <> ""
        If Len(MyFile) = 0 Then Exit Do 

        Workbooks.Open MyFile

        With ActiveWorkbook
            For Each wks In .Worksheets
                 Specify the change to make
                wks.Range("A1").Value = "A1 Changed"
            Next
        End With

        ActiveWorkbook.Close SaveChanges:=True

        MyFile = Dir
        If MyFile > "" Then MyFile = dirName & MyFile
    Loop
End Sub
اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

looks_5نام شما برای نمایش - اختیاری
حریم شخصی : آدرس ایمیل شما محفوظ میماند و برای استفاده های تجاری و تبلیغاتی به کار نمی رود
عدد چهار رقمی در تصویر را وارد کنید

برای جلوگیری از این تایید در آینده, لطفا وارد شده یا ثبت نام کنید.
اگر حساب گوگل دارید به راحتی وارید شوید

0 پاسخ وجود دارد

سوالات مشابه

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما
0 دوستدار 0 امتیاز منفی
0 پاسخ 33 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 34 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 38 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 31 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 33 visibility

24.3k سوال

9.6k پاسخ

614 دیدگاه

11.2k کاربر

234 نفر آنلاین
0 عضو و 234 مهمان در سایت حاضرند
بازدید امروز: 22277
بازدید دیروز: 17853
بازدید کل: 20334457
...