কোনও সেল মানের উপর ভিত্তি করে অটোহাইড / একাধিক পত্রক দেখান?


1

আমার নীচের ভিবিএ রয়েছে এবং এটি দুর্দান্ত কাজ করে। এটি স্বয়ংক্রিয়ভাবে / আড়াল করে বা স্বয়ংক্রিয়ভাবে / পুরোপুরি দেখায়।

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Target, Range("'Client Info'!D20")) Is Nothing Then
    If Range("'Client Info'!D20").Value > 0 And Not IsEmpty(Range("'Client Info'!D20")) Then
        Sheets("PLSHEET1").Visible = xlSheetVisible
    Else
        Sheets("PLSHEET1").Visible = xlSheetHidden
    End If End If End Sub

আমি এখন যা করার চেষ্টা করছি তা হ'ল ডি 20 অটো / হাইডে সেল মান বা একই সাথে আরও দুটি অতিরিক্ত শিট দেখান।

নীচে আমি যা চেষ্টা করছি এবং সমস্যায় পড়ছি।

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("'Client Info'!D20")) Is Nothing Then
    If Range("'Client Info'!D20").Value > 0 And Not IsEmpty(Range("'Client Info'!D20")) Then
        Sheets(Array("PULLSHEET1", "PULLSHEET2", "PULLSHEET3")).Visible = xlSheetVisible
    Else
        Sheets(Array("PULLSHEET1", "PULLSHEET2", "PULLSHEET3")).Visible = xlSheetHidden
    End If
End If
End Sub

1
যদি প্রথম উদাহরণটি পুরোপুরি সঠিকভাবে কাজ করে এবং অ্যারে সমস্যা দেয় তবে আপনি কেন অ্যারের পরিবর্তে একই কোডের তিনটি লাইন লিখবেন না? এছাড়াও শিটের নামগুলি আপনার দ্বিতীয় উদাহরণে আলাদা, তবে আমার ধারণা, এটি সমস্যা নয়।

Sheets(Array)নির্মাণ বিদ্যমান নেই। অ্যাপ্লিকেশন আপনার উদ্ভাবিত বাক্য গঠন বুঝতে পারে না।
আকিনা

আমার অভিজ্ঞতা বলছে যে একটি একক কমান্ড লাইন ব্যবহার করা WKSts এর কয়েকটি লুকিয়ে রাখতে পারে না। আপনি যে প্রথম পদ্ধতিটি ব্যবহার করছেন তা হ'ল উপায়গুলির মধ্যে একটি। অন্য আমি পরামর্শ দিতে পারি সক্রিয় শীট এক এক করে আড়াল করা তবে একক কমান্ড হ'ল না, অ্যাক্টিভশিট Vভিজিবল = এক্সএলশিটভেরিহিডেন
রাজেশ এস

# ক্লকসবাস , আমি আপনাকে WBK কোডটি ডাব্লুবিকে থেকে শীট 3 এবং শীট 5 বা টগল কম্যান্ড বোতামের মাধ্যমে কোনও সংমিশ্রণের মতো কিছু শিট লুকিয়ে / আনইড করার পরামর্শ দিতে পারি। কেবল মন্তব্যের মাধ্যমে নিশ্চিত করুন।
রাজেশ এস

উত্তর:


0

Sheetsসংগ্রহটি শুধুমাত্র এটা ডিফল্ট (জন্য একটি সূচক যুক্তি গ্রহণ করে Item) পদ্ধতি। আপনি এটিতে কোনও অ্যারে পাস করতে পারবেন না। আপনাকে অ্যারেতে আইটেমগুলি লুপ করতে হবে এবং সেগুলি একে একে ব্যবহার করতে হবে।

নিম্নলিখিতটি কীভাবে এটি করবে তা দেখায়:

'============================================================================================
' Module     : <in the "Client Info" sheet module>
' Version    : 0.1.0
' Part       : 1 of 1
' References : N/A
' Source     : https://superuser.com/a/1328507/763880
'============================================================================================
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Target, Range("'Client Info'!D20")) Is Nothing Then
    Dim enumVisibility As Excel.XlSheetVisibility
    If Range("'Client Info'!D20").Value > 0 Then
      enumVisibility = xlSheetVisible
    Else
      enumVisibility = xlSheetHidden
    End If
    Dim varSheetName As Variant
    For Each varSheetName In Array("PULLSHEET1", "PULLSHEET2", "PULLSHEET3")
      Sheets(varSheetName).Visible = enumVisibility
    Next varSheetName
  End If
End Sub

দ্রষ্টব্য যে আমি অপ্রয়োজনীয় অপসারণ করেছি And Not IsEmpty(Range("'Client Info'!D20"))

আপনি এটি দেখতেও পারেন যে আমি প্রয়োজনীয় দৃশ্যমানতা সঞ্চয় করতে ভেরিয়েবল ব্যবহার করেছি এবং এর প্রকৃত সেটিংসটি Ifবিবৃতি দেওয়ার পরে স্থানান্তরিত করেছি । এইভাবে, দুটি পরিবর্তে কেবল একটি লুপ ব্যবহার করা দরকার।

যদি শিটের নামগুলিতে সমস্ত সংখ্যার প্রত্যয় সহ একটি বেস নাম থাকে, তবে আরও ভাল লুপটি হবে:

Dim lngSheetNumber As Long
For lngSheetNumber = 1 To 3
  Sheets("PULLSHEET" & lngSheetNumber).Visible = enumVisibility
Next lngSheetNumber

সবাইকে ধন্যবাদ. সমস্যা সমাধান. বিটিডাব্লু, রবিন্টিসট। বেস নাম এবং প্রত্যয় সংখ্যা সহ লুপের সাথে দুর্দান্ত ধারণা।
ক্লকসবাস

ধন্যবাদ @ ক্লকসবাস আপনি যদি অজানা থাকেন তবে সুপারউসারকে ধন্যবাদ বলার প্রস্তাবিত উপায় হ'ল আপনার প্রশ্নের সর্বাধিক সহায়ক উত্তরটি "গ্রহণ" করা (উত্তরের উপরের বামদিকে ধূসর টিক ক্লিক করে) এবং আপনি যখন 15 খ্যাতি অর্জন করেন, সমস্ত দরকারী / ভাল উত্তর upvote (স্বীকৃত উত্তর সহ)। নোট করুন যে কোনও উত্তর গ্রহণ করা আপনাকে +2 জন প্রতিবেদনের পুরষ্কারও দেয়। টেকিং ট্যুর কেমন এই সাইটের কাজ করে ভালো ধারণা দিতে হবে। উত্তর গ্রহণের বিষয়ে আরও বিশদ এখানে পাওয়া যাবে
রবিন্টিসটি

@klocksbass ওহ, আপনার জন্য আরেকটি দরকারী পরামর্শ - আপনি যখন কোনও প্রশ্নে কোড পোস্ট করেন, কোডটি নির্বাচন করুন এবং তারপরে {}আইকনটি (প্রশ্ন বাক্সের শীর্ষে) ক্লিক করুন বা Ctrl + K টিপুন। এটি কোডটিকে একটি ব্লক হিসাবে ফর্ম্যাট করবে।
রবিন্টিসট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.