Excel 2010 VBA Grafikni o'chiradi

Bo'sh vaqt ichida Excel VBA ilovasini qo'llab-quvvatlayman. Professional ishlab chiquvchi emas, balki muhandis ishlab chiqaraman.

Dasturning grafik qismlari Excel 2007-da muammosiz ishlamoqda. Mening kompaniyam Excel 2010-ga o'tishni davom ettirmoqda va ayni dasturda endi ish sahifalarida grafikalar bilan o'zaro aloqada muammolar mavjud.

Muammo shubhali grafik bilan. Ilova, qayta chalganda, quyidagi kod yordamida jadvalni jadvaldan o'chiradi. Men buni amalga oshirdim, shuning uchun yangi ma'lumotlar import qilinadigan bo'lsa/ishlov berilsa, oxirgi ma'lumotlarga ega bo'lmagan foydalanuvchi uchun grafik taqdim etiladigan vaqt yo'q.

        'select the histogram chart
        Sheets(sChartSheet).Select
        ActiveSheet.ChartObjects("Chart 15").Activate

        Call PBarCaption("Delete Existing Histogram Series")
        'remove any existing series
        For i = 1 To ActiveChart.SeriesCollection.Count
            ActiveChart.SeriesCollection(1).Delete
        Next i

keyinchalik yangi ma'lumotlarni yaratadi, chunki yangi ma'lumotlarni yig'ish tashqi ma'lumot faylidan olinadi:

    'add series for histogram
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).Values = "=HistogramData!$B$5:$B$29"
    ActiveChart.SeriesCollection(1).XValues = "=HistogramData!$A$5:$A$29"
    ActiveChart.SeriesCollection(1).charttype = xlColumnClustered

2010 yil bilan bog'liq masala VBA kodi ishga tushirilganda, jadvalning aniqlangan seriyasiz mavjud bo'lishiga qaramasdan, bar-grafik "yo'qolgan" (o'chirilgan).

"Yo'qotilgan" grafik, bazaviy kodning yakuniy ijro etilishi avtomatik ravishda bir nechta jadvallarni tuzadigan va ularni PowerPoint-ga ko'chiradigan VBA kodining boshqa qismi orqali amalga oshiriladi.

Jadvallar ketma-ketligi qo'lda bajarilganda, u muammosiz ishlaydi. Avtomatik ravishda ishga tushganda, ikkinchi chating seksiyasini yaratishda, grafika o'chirilmoqda.

Men Excel 2007 dan 2010 versiyasiga chartingdagi o'zgarishlardan xabardor bo'lib, yordam bera olaman deb umid qilaman.

Rahmat,

Len

3
Grafika aslida o'chirib tashlanganini tasdiqlay olasizmi yoki grafika ko'rinmay qoladimi? Joriy varaq uchun ChartObjects to'plamining uzunligi aslida pasayib ketadimi? Excel 2003 dan Excel 2007 grafigi manipulyatsiya kodiga ega bo'lgan ishchi kitoblarni yangilaganimizda, biz kodimiz vaqti-vaqti bilan jadvallarning ko'rinishidan yo'qolishiga olib kelishi mumkinligini aniqladik, ammo ular hali fonda edi. Agar ular hali ham mavjud bo'lsa, bu g'alati bo'lishi mumkin, lekin agar siz Boshqaruv paneliga borib, to'xtab, keyin "Chop etishtiruvchi" deb nomlangan xizmatni boshlasangiz, ular yana paydo bo'lishi mumkin.
qo'shib qo'ydi muallif Michael Kingsmill, manba
Ushbu savolga eng yaxshi yechim topilgan kodni yozish va Excel 2003 versiyasidan har qanday yashirin "korruptsiya" ni olib tashlash uchun barcha jadvallarni noldan yangi 2010 grafigi sifatida qayta yaratishdir.
qo'shib qo'ydi muallif Michael Kingsmill, manba
Maykl, rahmat. Umid qilamanki, kelgusi haftada bu haqda qaytib kelish uchun vaqt kerak bo'ladi. Grafika obyekti 2010 yil bilan so'l ro'yxatga olish paytida ta'siriga uchrasa, men buni qila olaman va to'liq tekshiruvga ega bo'lish uchun har safar grafikni o'chirib tashlay va har safar noldan qayta hosil qilaman. Men dastlab 2007 yil versiyasiga ko'chib o'tishda buni qilmoqchi bo'ldim, lekin grafik obyekti o'zgardi va ob'ekt modeli so'lga yozib qo'yilmasa, bu juda oz edi. Men bu yerga biror joyga borganimda yangilanishni jo'nataman.
qo'shib qo'ydi muallif NitroLen, manba

2 javoblar

Siz kodingizni qayta ishlashga yordam berishingiz mumkin, shuning uchun faollashtirilmaydi/tanlanmaydi va "faol" ob'ektga qarab o'zgartirilmaydi: agar boshqa kod siz kutmaganda boshqa bir obyektni yoqsa ...

Dim cht As Chart

Set cht = ActiveWorkbook.Sheets(sChartSheet).ChartObjects("Chart 15").Chart
Do While cht.SeriesCollection.Count > 0
    cht.SeriesCollection(1).Delete
Loop

With cht.SeriesCollection
    .NewSeries
    With .Item(1)
        .Values = "=HistogramData!$B$5:$B$29"
        .XValues = "=HistogramData!$A$5:$A$29"
        .ChartType = xlColumnClustered
    End With
End With
2
qo'shib qo'ydi
Bu, albatta, yaxshiroq loyihalashdir, masalan, yashirin varaqlarda jadvallarni tanlash, masalan, ish vaqti istisnosiga chek qo'yadi, shuning uchun ishchi varag'i obyektlarini hech qachon tanlamaslik kerak. Bunga qo'shimcha ravishda, ekranni yangilashni o'chirmasdan, bu ekranni juda ko'p titrashiga yordam beradi. Biroq, bu sizning muammoingizni hal qilish uchun juda ko'p ish qilmaydi.
qo'shib qo'ydi muallif Michael Kingsmill, manba
Eng yaxshi amaliyot. Men buni qilaman. Tanlangan ob'ektlarni to'g'ridan-to'g'ri ishlaydigan ishlarni kamaytirishga harakat qilaman, lekin u ishlayotgan bo'lsa, ekranni yangilash o'chirilgan, shuning uchun boshqa vazifalarga o'tildi!
qo'shib qo'ydi muallif NitroLen, manba

Grafikdagi barcha o'zaro ta'sirlarni "tanlash" o'rniga ishlatish uchun o'zgartirdim. Yaxshi dasturlash.

Afsuski, bu muammoni hal qilmadi.

Chop etish biriktirgichiga tegishli izohlar foydalidir va bu muammo displeyda va printerda qanday grafikalar paydo bo'lishiga ta'sir qilish bilan bog'liq.

Arizalar

Tashkilotimdagi ko'pgina foydalanuvchilar turli printerlarga ega bo'lgani uchun va MS Office-ning standart drayveri ishlamayotganda restulsni yaxshilamasa, boshqa echim topilgan bo'lishi kerak edi.

PowerPointga ishchi varag'i nusxa ko'chirish uchun VBA kodidan foydalanganda muammo yuzaga keldi. Print sifatida nusxalash, bitmat yordamida:

rSlideArea.CopyPicture (2)  

Ekran bitmapi sifatida nusxa ko'chirish uchun o'zgartirildi:

rSlideArea.CopyPicture Appearance:=xlScreen, Format:=xlBitmap

Qizig'i shundaki, bitmap formatlashtirilgan PowerPoint fayllari bilan ishlash osonroq va ular kichikroq edi.

Natijada, PowerPoint'dagi rasmlar ekranni formatlash bilan "yoqimli" emas, ammo dastur endi Excel v2010 da ishlaydi, bu esa darhol ustuvor bo'lgan.

Yordam berganlarning barchasiga rahmat.

0
qo'shib qo'ydi