צביעת תא ע"פ ערך
-
שלום וברכה.
יש לי קובץ אקסל עם קוד למשיכת נתונים מאקסס, הקוד עובד כך שהוא 'קורא' את מספר התא ועפי"ז מייבא נתונים מאקסס.
הקוד הוא:Function GetName(mid As String) As String On Error GoTo Error_GetMit Dim MyConnection As ADODB.Connection Dim MyRecordset As ADODB.Recordset Dim MyQuery As String Dim path As String Set MyConnection = New ADODB.Connection Set MyRecordset = New ADODB.Recordset Set MyRecordset1 = New ADODB.Recordset MyConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & path MyConnection.Open MyConnectionString MyQuery = "select * from Table1 WHERE Number = '" & mid & "'" Set MyRecordset = MyConnection.Execute(MyQuery) If IsNull(MyRecordset.Fields(2).Value) Then GetMit = "Not Found" Else GetMit = MyRecordset.Fields(2).Value End If MyRecordset.Close Set MyRecordset = Nothing MyRecordset1.Close Set MyRecordset1 = Nothing MyConnection.Close Set MyConnection = Nothing Exit Function Error_GetMit: GetMit = "Error" MyRecordset.Close Set MyRecordset = Nothing MyRecordset1.Close Set MyRecordset1 = Nothing MyConnection.Close Set MyConnection = Nothing End Function
ובגיליון:
=GetName(DN23)
הקוד עובד מצוין.
אני רוצה עכשיו לעשות שבקוד ההוא (GetName) יהיה תנאי שאם הערך שווה ל"פלוני" לדוג' הוא יצבע את התא בצהוב.
יש איך לכתוב את זה בקוד (ולא בעיצוב מותנה)?
תודה רבה. -
@ארי תוכל לשנות את צבע הרקע בטווח מסויים על ידי המאפיין Interior.Color, לדוגמא:
Range("A1:B10").Interior.Color = RGB(100, 100, 0)
מסתמא אתה רוצה לשנות את רקע התא שבו הרצת את הנוסחא. למרות שהפתרון הכי קל זה בעיצוב מותנה, תוכל לעשות זאת גם בקוד, אך תצטרך שהפונקציה תזהה את התא הנוכחי, כך:
If ActiveCell.Value = "פלוני" Then ActiveCell.Interior.Color = RGB(100, 100, 0) End If
-
@odeddvir תודה.
אבל האמת היא שאני רוצה לכתוב את הנוסחה ע"פ עמודה אחרת בטבלה באקסס.
כך שאחרי:If IsNull(MyRecordset.Fields(9).Value) Then GetMit = "Not Found" Else GetMit = MyRecordset.Fields(9).Value End If
יהיה משהו כזה:
If MyRecordset.Fields(7).Value = "1234" Then ActiveCell.Interior.Color = RGB(100, 100, 0) End If
כך שהערך "1234" לא יופיע באקסל, אבל התא יופיע בצבע צהוב.
אבל זה לא עובד....
מה הבעיה?
תודה. -
@ארי אני מתקשה להבין את הקוד שלך. מה זה המשתנה GetMit, הוא אינו מוצהר בפונקציה.
וכן לא ברור מה הכוונה במשפט "זה לא עובד", האם אתה מצליח לקרוא את הערך שנמצא ב: MyRecordset.Fields(7).Value ? מה בכלל אמור השדה מספר 7 להכיל? מספר או מחרוזת?
נסה לשתף אותנו בכל התמונה, פשוט אין לי כוח וזמן לנחש במה מדובר. -
@odeddvir סליחה, GetMit זה בטעות חלק מקוד אחר, זה אמור להיות GetName.
אז ככה, הקוד:If MyRecordset.Fields(7).Value = "8980" Then ActiveCell.Interior.Color = vbYellow End If
לא עובד.
זאת אומרת הוא מצליח לקרוא את הנתון בעמודה 7 (מספר, דרך אגב), אבל נתקע בשורה שבה הוא אמור לשנות את הצבע, הוא לא מדאבג אלא מחזיר לי #VALUE.
אגב, אם אני עושה סתם דיבאג על הצבע של התא הוא מצליח לקרוא אותו, אבל לשנות הוא לא משנה.
מה יכולה להיות הבעיה? זה איזה באג בשורה הזו שהוא יכול רק לקרוא את הנתון של הצבע אבל לא לשנות אותו.
תודה רבה! -
@ארי תפתח חלון VBA ובחלונית Immediate תרשום את הפקודה:
ActiveCell.Interior.Color = vbYellow
האם הצבע של התא הנוכחי משתנה?
הוא לא מדאבג אלא מחזיר לי #VALUE.
נכון, כי לקחת לידיים את הטיפול בשגיאות בפונקציה.
תבטל את שורה מספר 2 (תהפוך להערה):' On Error GoTo Error_GetMit
ותראה איזו שגיאה מתקבלת.
-
@odeddvir אמר בצביעת תא ע"פ ערך:
האם הצבע של התא הנוכחי משתנה?
כן.
@odeddvir אמר בצביעת תא ע"פ ערך:
תבטל את שורה מספר 2 (תהפוך להערה):
זה עדיין מחזיר #VALUE.