الحصول على Excel لتحديث البيانات على الورقة من داخل VBA

StackOverflow https://stackoverflow.com/questions/154434

  •  03-07-2019
  •  | 
  •  

سؤال

كيف يمكنك الحصول على بيانات جدول البيانات في Excel لإعادة حساب نفسها من داخل VBA، دون الحاجة إلى تغيير قيمة الخلية؟

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

المحلول

الأسطر التالية ستفي بالغرض:

ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True  

يحرر: ال .Calculate() لن تعمل الطريقة لجميع الوظائف.لقد اختبرت ذلك على ورقة تحتوي على وظائف صفيف الوظيفة الإضافية.ورقة الإنتاج التي أستخدمها معقدة بدرجة كافية لدرجة أنني لا أرغب في اختبارها .CalculateFull() الطريقة، ولكنها قد تنجح.

نصائح أخرى

وهذا ينبغي أن تفعل خدعة ...

'recalculate all open workbooks
Application.Calculate

'recalculate a specific worksheet
Worksheets(1).Calculate

' recalculate a specific range
Worksheets(1).Columns(1).Calculate

في بعض الأحيان سيقوم Excel زوبعة، ويحتاج الى ركلة البداية الى تطبيق معادلة. وهذا يحدث في بعض الحالات عند استخدام الصيغ المخصصة.

تأكد من أن لديك النصي التالي

ActiveSheet.EnableCalculation = True

وإعادة تطبيق معادلة الاختيار.

Cells(RowA,ColB).Formula = Cells(RowA,ColB).Formula

ويمكن بعد ذلك أن يحلق هذا حسب الحاجة.

وكنت قد تحاول أيضا

Application.CalculateFull

أو

Application.CalculateFullRebuild

وإذا كنت لا تمانع في إعادة بناء كافة المصنفات المفتوحة، وليس مجرد ورقة العمل النشطة. (CalculateFullRebuild يعيد تبعيات كذلك.)

وكان لي مشكلة مع إيقاف صورة خلفية <م> (مشروع علامة مائية) في VBA. وكان بلدي التغيير لا يظهر (التي كان يؤديها مع أسلوب Sheets(1).PageSetup.CenterHeader = "") - لذلك أنا بحاجة إلى وسيلة لتحديث. النهج ActiveSheet.EnableCalculation لم جزئيا خدعة، ولكن لا تغطي الخلايا غير المستخدمة.

في نهاية وجدت ما كنت بحاجة ببطانة واحدة التي جعلت تختفي الصورة عندما لم يعد تعيين: -

وApplication.ScreenUpdating = True

وبعد تحديث اتصال البيانات، بعض من UDF لم تكن التنفيذ. باستخدام روتين، كنت أحاول أن recalcuate عمود واحد مع:

Sheets("mysheet").Columns("D").Calculate

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

Application.Calculation = xlManual
DoEvents
For Each mycell In Sheets("mysheet").Range("D9:D750").Cells
    mycell.Formula = mycell.Formula
Next
DoEvents
Application.Calculation = xlAutomatic
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top