تغییر رنگ Shape بر اساس Cell value

Collapse
این تاپیک قفل است.
X
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • a.dal65

    • 2011/04/29
    • 384
    • 67.00

    [حل شده] تغییر رنگ Shape بر اساس Cell value

    با سلام خدمت اساتید
    بنده نقشه یه طبقه رو دارم که توش مغازه هام مشخص شده .
    و یه جدول دارم که اطلاعات اون مغازه ها رو توش زدم.(مثل متراژ ، شماره مغازه و ...)
    من روی هر مغازه یه Shape دایره شکل ایجاد کردم که با توجه به وضعیت مغازه میخوام رنگ اون دایره عوض بشه.
    یعنی مثلا اگه تو جدول مغازه شماره 1 فروخته شد رنگ دایره بشه قرمز . اگه رزور بود بشه آبی و ....
    (یعنی با توجه به Cell Value ، رنگ دایره تغییر کنه)
    برای این کار از این کد استفاده کردم که چند تا اشکال داره
    کد PHP:
        Select Case Range("e2").Value
            
    Case "رزرو شده"ActiveSheet.Shapes("Oval1").Fill.ForeColor.RGB vbBlue
            
    Case "فروخته شده"ActiveSheet.Shapes("Oval1").Fill.ForeColor.RGB vbRed
            
    Case "آماده فروش"ActiveSheet.Shapes("Oval1").Fill.ForeColor.RGB vbGreen
            
    Case "اجاره داده شده"ActiveSheet.Shapes("Oval1").Fill.ForeColor.RGB vbYellow
        End Select 
    اول اینکه وقتی از فیلتر استفاده میکنم رنگ ها همه جابجا میشه
    دوم اینکه من حدود 150 تا مغازه دارم اگه بخوام برای هر سلول همین کد رو تکرار کنم خیلی زمانبر و چر خطا میشه.
    امکانش هست از یه حلقه استفاده کنم تا کد ها کمتر بشه ؟

    و یه سوال دیگه دارم
    من برای فیلتر کردن جدولم از چند تا چک باکس استفاده کردم . تا کاربر مثلا تیک رزور شده ها و اماده فروش ها رو انتخاب کنه و این دو توی جدول فیلتر بشن و روی نقشه هم همون مغازه ها رنگی بشن . الان فقط یکی رو فیلتر میکنه
    فایل های پیوست شده
  • misammisam
    مدير تالار حسابداری و اکسل

    • 2014/04/04
    • 892
    • 64.00

    #2
    سلام برای فیلتر باید همه حالتهارو تعریف کنید مثلا برای قسمت اجاره داده شده اینطوری بنویسید ، بقیه قسمتها به عهده خودتون
    کد PHP:
    Private Sub ejare_Click()
    If (
    ejare True And nashode True And shode True And rezerv TrueThen
    ActiveSheet
    .ListObjects("Table13").Range.AutoFilter Field:=5Criteria1:=Array("ÇÌÇÑå ÏÇÏå ÔÏå""ÂãÇÏå ÝÑæÔ""ÑÒÑæ ÔÏå""ÝÑæÎÊå ÔÏå"), Operator:=xlFilterValues
    ElseIf (ejare True And nashode True And shode TrueThen
    ActiveSheet
    .ListObjects("Table13").Range.AutoFilter Field:=5Criteria1:=Array("ÇÌÇÑå ÏÇÏå ÔÏå""ÂãÇÏå ÝÑæÔ""ÝÑæÎÊå ÔÏå"), Operator:=xlFilterValues
    ElseIf (ejare True And shode True And rezerv TrueThen
    ActiveSheet
    .ListObjects("Table13").Range.AutoFilter Field:=5Criteria1:=Array("ÇÌÇÑå ÏÇÏå ÔÏå""ÑÒÑæ ÔÏå""ÝÑæÎÊå ÔÏå"), Operator:=xlFilterValues
    ElseIf (ejare True And nashode TrueThen
    ActiveSheet
    .ListObjects("Table13").Range.AutoFilter Field:=5Criteria1:=Array("ÇÌÇÑå ÏÇÏå ÔÏå""ÂãÇÏå ÝÑæÔ"), Operator:=xlFilterValues
    ElseIf (ejare True And shode TrueThen
    ActiveSheet
    .ListObjects("Table13").Range.AutoFilter Field:=5Criteria1:=Array("ÇÌÇÑå ÏÇÏå ÔÏå""ÝÑæÎÊå ÔÏå"), Operator:=xlFilterValues
    ElseIf (ejare True And rezerv TrueThen
    ActiveSheet
    .ListObjects("Table13").Range.AutoFilter Field:=5Criteria1:=Array("ÇÌÇÑå ÏÇÏå ÔÏå""ÑÒÑæ ÔÏå"), Operator:=xlFilterValues
    ElseIf ejare True Then
    Range
    ("e1").AutoFilter Field:=5Criteria1:="ÇÌÇÑå ÏÇÏå ÔÏå"
    Else
    Range("e1").AutoFilter Field:=5
    End 
    If
    End Sub 
    فقط دقت کنید تو فایل پیوست چون بقیه حالتهای سه تا دکمه دیگه تعریف نشده باید حتکا آخرین دکمه ای که کالید میکنید ، اجاره داده شده باشه ، اگه همه دکمه ها رو تعریف کنید این مشکلم از بین میره .
    فایل های پیوست شده
    [CENTER][SIGPIC][/SIGPIC]
    [/CENTER]
    [CENTER][FONT=Tahoma][FONT=Tahoma][FONT=Tahoma][FONT=Tahoma][FONT=Tahoma][INDENT]
    [CENTER][SIZE=3][URL="https://affstat.adro.co/click/adf04053-f8a6-439a-9ac4-e6a7e6f4b455"][B]اينجا كليك نكنيا ![/B][/URL][/SIZE]
    [/CENTER]
    [/INDENT]

    [/FONT][/FONT][/FONT][/FONT][/FONT]
    [/CENTER]

    کامنت

    • a.dal65

      • 2011/04/29
      • 384
      • 67.00

      #3
      ممنون دوست عزیز همونجوری که گفتید درست کردم.
      برای قسمتی از مشکل اولم یه سرچ زدم و به این رسیدم :
      کد PHP:

            Dim i 
      As Long
            
      For 1 To ActiveSheet.Shapes.Count
            ActiveSheet
      .Shapes.Range(Array("Oval " i)).Visible Not ActiveSheet.Shapes.Range(Array("Oval " i)).Visible
            Next i
        
      [RIGHT][/RIGHT
      با کد بالا تمام
      Shape های که با اسم oval شروع میشه رو مخفی و شو میکنه
      حالا هر کاری کردم که چک کنه مثلا shape های که fill color شون قرمز باشه رو hide کنه نتونستم
      (یعنی میخوام تمام oval های که رنگشون قرمز هستن رو مخفی کنم)
      ActiveSheet.Shapes.Range(Array("Oval " & i)).Visible.Fill.ForeColor.RGB(vbRed) = True
      ممنون میشم کسی کمک کنه
      فایل های پیوست شده

      کامنت

      • a.dal65

        • 2011/04/29
        • 384
        • 67.00

        #4
        کد PHP:
        Public Sub HideRedOvals()

        ShowHideShapes "Oval "RGB(25500), msoFalse

        End Sub
        Private Sub ShowHideShapes(shapeName As StringforeColor As LongshowHide As MsoTriState)

        Dim thisShape As Shape

        For Each thisShape In ActiveSheet.Shapes
            
        If StrComp(Left$(thisShape.NameLen(shapeName)), shapeNamevbTextCompare) = 0 _
            
        And thisShape.Fill.foreColor foreColor Then
                thisShape
        .Visible showHide
            End 
        If
        Next

        End Sub 

        کامنت

        چند لحظه..