ভিবিএতে ডেটা ফিল্ড হিসাবে কিউবফিল্ড / পাইভটফিল্ড যোগ করতে অক্ষম


0

আমি আমার কাজের জন্য একটি দীর্ঘ দীর্ঘ ম্যাক্রোতে কাজ করছি এবং আমি প্রায় শেষ করছি, তবে এটিই শেষ অংশ এবং আমি যাই করুক না কেন, আমি ঠিক করতে পারি না। এই পিভটটেবলে, মানগুলি বিভাগে সারি হিসাবে "মানগুলি" সহ কলামগুলি এবং অন্যান্য সমস্ত কিছু (অর্থাত্ সমস্ত মাস) থাকা দরকার। চারদিকে ঝাঁকুনির পরে, দেখে মনে হচ্ছে যে সমস্ত ক্ষেত্র পিভটফিল্ডের পরিবর্তে কিউবফিল্ড হিসাবে নিবন্ধিত হয়েছে। আমি যখন এটি চালিয়ে যাচ্ছি সাথে সাথে। ওরিয়েন্টেশন = এক্সএলডাটাফিল্ড, এটি একটি "রান-টাইম ত্রুটি 5 ... অবৈধ পদ্ধতি কল বা যুক্তি নিক্ষেপ করে।" আমারও নিশ্চিত করতে হবে যে সেই ডেটাফিল্ডগুলি গড় এবং একটি নির্দিষ্ট সংখ্যার ফর্ম্যাটে রয়েছে। আমি কিছুই করি না এবং কোনও গাইডেন্স / ফিক্স / ওয়ার্কআরউন্ড প্রশংসিত হবে! নীচে টিঙ্কারিংয়ের জন্য ম্যাক্রো এবং ফাইলটির ডাউনলোড লিংক রয়েছে।

Dim pvtTable As PivotTable
Dim cubField As CubeField
Dim i As Long
Dim cubName As String

Set pvtTable = ActiveSheet.PivotTables(1)
For Each cubField In pvtTable.CubeFields
    For i = 1 To pvtTable.CubeFields.Count
        With pvtTable.CubeFields(i)
            If .Name = "[effRent_perBed].[Manager]" Then
                .Orientation = xlColumnField
           Else:
                .Orientation = xlDataField
                'has to be averaged
                'has to have number format of ##0.00
            End If

        End With
    Next
Next

এটি এমন একটি সম্পাদন যা আমি ম্যাক্রো রেকর্ডারের ভিত্তিতে তৈরি করার চেষ্টা করেছি। এটি ক্ষেত্রটিকে মান ক্ষেত্রগুলিতে রাখে তবে এটিকে গড়ে তোলার কোনও উপায় নেই। এটি কেবলমাত্র সমস্ত মানকে "1" হিসাবে দেখায় (একটি চাক্ষুষের জন্য চিত্রটি পরীক্ষা করুন)

                If Name = "[effRent_perBed].[Manager]" Then
                    .Orientation = xlColumnField
                Else:
                    With ActiveSheet.PivotTables(1)
                        .AddDataField ActiveSheet.PivotTables(1) _
                        CubeFields(cubName), _
                        "Average of " & cubName
                    End With

                    With ActiveSheet.PivotTables(1).PivotFields(cubName)
                        .Caption = "Average of " & cubName
                        .Function = xlAverage
                    End With

আমি যখন ডেটাফিল্ডে কিছু যুক্ত করতে ম্যাক্রো রেকর্ডার ব্যবহার করি তখন আমি এটি পাই:

ActiveSheet.PivotTables("effRent_perBed_Pivot").CubeFields.GetMeasure _
    "[effRent_perBed].[Jan-16]", xlSum, "Sum of Jan-16"
ActiveSheet.PivotTables("effRent_perBed_Pivot").AddDataField ActiveSheet. _
    PivotTables("effRent_perBed_Pivot").CubeFields("[Measures].[Sum of Jan-16]"), _
    "Sum of Jan-16"
With ActiveSheet.PivotTables("effRent_perBed_Pivot").PivotFields( _
    "[Measures].[Sum of Jan-16]")
    .Caption = "Average of Jan-16"
    .Function = xlAverage
End With

এটি আমি যে ফাইলটিতে কাজ করছি তার একটি অনুলিপি। এটি কাঁচা পিভট টেবিল এবং তারপরে সমাপ্ত পণ্যটি দেখায়। আমাকে 3 টি শীটের জন্য এটি করতে হবে, তাই আমাকে প্রতিটি চক্রের মধ্যে চক্র করতে হবে। https://drive.google.com/uc?export=download&id=1NLGg8DVEMHnB2Ad7NAKWySevq8naqFjr

এটি অন্যান্য ফোরামেও পোস্ট করা হয়েছে (যত তাড়াতাড়ি সম্ভব আমার এটির পক্ষে আরও বেশি নজর পাওয়া দরকার) https://www.excelforum.com/excel-programming-vba-macros/1222588-unable-to-add-cubefield- pivotfield হিসাবে একটি-ডেটা-ক্ষেত্র-ইন-vba.html # post4856940

https://www.mrexcel.com/forum/excel-questions/1046038-unable-add-cubefield-pivotfield-data-field-vba.html

https://www.ozgrid.com/forum/node/1200403


আমি আপনাকে হ্রাস করেছি কারণ আপনি এটি একাধিক ফোরামে পোস্ট করেছেন। হ্যাঁ, আপনি এটিকে নির্দেশ করেছেন, তবে এখনও এটি সত্যিই গ্রহণযোগ্য নয় যে বেশিরভাগ লোকেরা আপনার প্রশ্নের উত্তর দিতে বিরক্ত করবেন না। কেন? কারণ আপনি যত তাড়াতাড়ি সম্ভব এটির উপর নজর পেতে চাইতে পারেন, যদি একাধিক লোকের দ্বারা এটি একাধিক জায়গায় উত্তর পেয়ে যায় তবে আপনি সেই কয়েকটি চোখের সময় নষ্ট করবেন। শুধুমাত্র একটি ফোরাম চয়ন করুন। কেন এটি একটি সমস্যা তা দয়া করে দয়া করে Excelguru.ca/content.php?184 পড়ুন ।
jeffreyweir

আপনার প্রশ্নের হিসাবে, ম্যাক্রো রেকর্ডারটি জ্বালিয়ে ফেলা, ম্যানুয়ালি একটি কোডের ওরিয়েন্টেশন পরিবর্তন করা, রেকর্ডারটি থামানো এবং ম্যাক্রো রেকর্ডারটি কোন কোডটি ছড়িয়ে দিয়েছে তা দেখুন this এটি সম্ভবত আপনার প্রয়োজনীয় সিনট্যাক্সটি দেবে। আপনি যদি এখনও হারিয়ে যান তবে আপনার মূল প্রশ্নটিতে সেই কোডটি পোস্ট করুন।
jeffreyweir

@ জেফ্রেউইয়ার এটি আমার প্রথমবারের পোস্টিং, আমি জানতাম না যে ক্রস-পোস্টিং একটি বড় বারণ ছিল। আমি রেকর্ডার এবং একাধিকবার ব্যবহার করার চেষ্টা করেছি এবং যখন সেই কোডটি প্রতিলিপি এবং স্কেল করার চেষ্টা করেছি, এটি কখনই সঠিকভাবে কাজ করে না।
অ্যান্ড্রু স্টাহল

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

সবেমাত্র আপডেট করেছেন!
অ্যান্ড্রু স্টাহল

উত্তর:


0

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

কেউ আমাকে কেবল রাবার হাঁসের সমস্যার সমাধান / ব্লগ পোস্টের দিকে ইঙ্গিত করেছিলেন এবং আমি আপনাকেও এটি দেখিয়ে দেব, কারণ এটি প্রাসঙ্গিক সবকিছু জানলে লোকেরা উত্তর দিতে সহায়তা করে।

Https://msdn.microsoft.com/en-us/vba/excel-vba/articles/pivottable-adddatafield-method-excel এ বলা হয়েছে যে .dddatafield এর বাক্য গঠনটি ফাংশনটির সাথে অ্যাডডাটাফিল্ড (ক্ষেত্র, ক্যাপশন, ফাংশন) রয়েছে ঐচ্ছিক।

সুতরাং আপনি এই চেষ্টা করে কি ঘটবে?

If Name = "[effRent_perBed].[Manager]" Then
    .Orientation = xlColumnField
 Else:
    With ActiveSheet.PivotTables(1)
        .AddDataField ActiveSheet.PivotTables(1) _
            CubeFields(cubName), _
            "Average of " & cubName, _
            xlAverage
    End With
End if

আপনার আসল কোড ব্লকটিতে কিছু সমস্যা আছে। আপনি কেন উভয়ই কিউব ফিল্ড সংগ্রহের মাধ্যমে পুনরাবৃত্তি করছেন এবং কিউব ফিল্ডগুলির একটি গণনা দিয়ে পুনরাবৃত্তি করছেন তা আমি বুঝতে পারি না। অর্থাত্ এই বিট:

For Each cubField In pvtTable.CubeFields
    For i = 1 To pvtTable.CubeFields.Count

এটি কি কিউবফিল্ডসকাউন্টের বর্গক্ষেত্রের দ্বারা সমস্ত কি পুনরাবৃত্তি করতে যাচ্ছে না? আপনি যে খনন করতে সক্ষম হবেন i = 1 এর জন্য pvtTable.CubeFields.Cont বিট এবং সরাসরি কিউফিল্ড রেফারেন্সটি সরাসরি ব্যবহার করুন।

আমি মনে করি যে আপনার কোডটি এক্সএলভ্যারেজে সংক্ষিপ্তকরণ সেট করতে ব্যর্থ হওয়ার কারণ হ'ল একবার আপনি যদি ডেটা অঞ্চলে কোনও ক্ষেত্র যুক্ত করেন, নামটি কার্যকরভাবে পরিবর্তিত হয়। আপনি যদি ডেটাফিল্ডটি ঠিক জায়গায় রেখে যান এবং এই কোডটি চালান তবে আপনি এটি দেখতে পারেন:

Sub Macro1()
'
' Macro1 Macro
'
Dim pvtTable As PivotTable
Dim cubField As CubeField
Dim i As Long
Dim cubName As String

Set pvtTable = ActiveSheet.PivotTables(1)
For Each cubField In pvtTable.CubeFields
    Debug.Print cubField.Name
Next

End Sub

এটি সমস্ত ক্ষেত্রের নামগুলি তাত্ক্ষণিক উইন্ডোতে মুদ্রণ করবে (ধরে নিলে আপনি এটি উন্মুক্ত করেছেন) যে সময়ে আপনি দেখতে পাবেন যে আপনি যখন [এফআরেন্ট_পারবিড] এর ফলাফল পাবেন। [পরিচালক], এটি ডেটাফিল্ড নয়। ডেটাফিল্ড এমন কিছু হবে [পরিমাপের] মতো [[এফআরেন্ট_পারবিডের গড়]

এবং এজন্যই আপনার কোডটি ব্যর্থ হয়েছে: আপনি এখনও আগ্রহের ক্ষেত্রটিকে উল্লেখ করছেন যেন এটি এখনও কিউবফিল্ড। কিন্তু যেই আপনি চেষ্টা এটা DataFields এলাকায় এটি যোগ, একটি নতুন DataField নির্মিত পায়, এবং যে এক আপনার জন্য অ্যাগ্রিগেশন পরিবর্তন করার প্রয়োজন ছিল।

আমি যদিও উপরে বলেছি, আপনি ডেটাফিল্ড তৈরি করার সময় আপনি এটি করতে পারেন।


শেষ অংশটি অনেক অর্থবোধ করে। এক পর্যায়ে আমি স্থানীয় উইন্ডোতে নামগুলি যাচাই করছিলাম এবং লক্ষ্য করেছি যে সমস্ত ক্ষেত্রের পরে এটি "[পরিমাপ]" বলেছে [ । এই মুহুর্তে আমাকে কীভাবে এই গতিশীলটিকে একটি লুপে কাজ করতে হয় তা বুঝতে হবে যাতে আমি একাধিক ক্ষেত্র যুক্ত করতে পারি U দুর্ভাগ্যক্রমে আমার কম্পিউটারের হার্ড ড্রাইভটি মারা গেছে তাই আমি যা পারব তা উদ্ধারের চেষ্টা করছি। আপনার সমস্ত সাহায্যের জন্য আবার ধন্যবাদ @ জেফরিওয়াইয়ার!
অ্যান্ড্রু স্টাহল

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