تغییر رنگ 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 = True) Then
    ActiveSheet
    .ListObjects("Table13").Range.AutoFilter Field:=5, Criteria1:=Array("ÇÌÇÑå ÏÇÏå ÔÏå", "ÂãÇÏå ÝÑæÔ", "ÑÒÑæ ÔÏå", "ÝÑæÎÊå ÔÏå"), Operator:=xlFilterValues
    ElseIf (ejare = True And nashode = True And shode = True) Then
    ActiveSheet
    .ListObjects("Table13").Range.AutoFilter Field:=5, Criteria1:=Array("ÇÌÇÑå ÏÇÏå ÔÏå", "ÂãÇÏå ÝÑæÔ", "ÝÑæÎÊå ÔÏå"), Operator:=xlFilterValues
    ElseIf (ejare = True And shode = True And rezerv = True) Then
    ActiveSheet
    .ListObjects("Table13").Range.AutoFilter Field:=5, Criteria1:=Array("ÇÌÇÑå ÏÇÏå ÔÏå", "ÑÒÑæ ÔÏå", "ÝÑæÎÊå ÔÏå"), Operator:=xlFilterValues
    ElseIf (ejare = True And nashode = True) Then
    ActiveSheet
    .ListObjects("Table13").Range.AutoFilter Field:=5, Criteria1:=Array("ÇÌÇÑå ÏÇÏå ÔÏå", "ÂãÇÏå ÝÑæÔ"), Operator:=xlFilterValues
    ElseIf (ejare = True And shode = True) Then
    ActiveSheet
    .ListObjects("Table13").Range.AutoFilter Field:=5, Criteria1:=Array("ÇÌÇÑå ÏÇÏå ÔÏå", "ÝÑæÎÊå ÔÏå"), Operator:=xlFilterValues
    ElseIf (ejare = True And rezerv = True) Then
    ActiveSheet
    .ListObjects("Table13").Range.AutoFilter Field:=5, Criteria1:=Array("ÇÌÇÑå ÏÇÏå ÔÏå", "ÑÒÑæ ÔÏå"), Operator:=xlFilterValues
    ElseIf ejare = True Then
    Range
    ("e1").AutoFilter Field:=5, Criteria1:="ÇÌÇÑå ÏÇÏå ÔÏå"
    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 i = 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(255, 0, 0), msoFalse

        End Sub
        Private Sub ShowHideShapes(shapeName As String, foreColor As Long, showHide As MsoTriState)

        Dim thisShape As Shape

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

        End Sub 

        کامنت

        چند لحظه..