טבלאות באקסל

'חפרתי' באינטרנט רבות ולא מצאתי פתרון ל 2 משימות קטנות שאני מבקש.
1. אני רוצה לזהות שם טבלה פעילה, באמצעות VBA
2. להמיר טבלה דינמית לטווח (רגיל), באמצעות VBA

לגבי סעיף 1 - הקוד
קוד:
ActiveSheet.ListObjects(1).Name
מפנה לטבלה הראשונה שנוצרה
ואני מעוניין לבחור טבלה כלשהי בגיליון ולזהות את השם שאקסל נתן לה.
לגבי סעיף 2 - ניסיתי להקליט. הפעולה מתבצעת, אבל הפקודה לא נרשמת...

אודה לעוזרה
 

מיכאל אבידן

Member
מנהל
'חפרתי' באינטרנט רבות ולא מצאתי פתרון ל 2 משימות קטנות שאני מבקש.
1. אני רוצה לזהות שם טבלה פעילה, באמצעות VBA
2. להמיר טבלה דינמית לטווח (רגיל), באמצעות VBA

לגבי סעיף 1 - הקוד
קוד:
ActiveSheet.ListObjects(1).Name
מפנה לטבלה הראשונה שנוצרה
ואני מעוניין לבחור טבלה כלשהי בגיליון ולזהות את השם שאקסל נתן לה.
לגבי סעיף 2 - ניסיתי להקליט. הפעולה מתבצעת, אבל הפקודה לא נרשמת...

אודה לעוזרה

1.
קוד:
Sub Micky()
    On Error Resume Next
    MsgBox ActiveCell.ListObject.Name
End Sub


2. חפש ב"גוגל" אודות הפקודה: Unlist
 
בהמשך לאותו נושא, בינתיים אני ממשיך לנסות ומסתבך...
יש לי טבלה יחידה בגיליון ששמה Table1
החלפתי את שם הטבלה ל X , ואז הגדרתי אותו (את השם) כמשתנה ושווה ל Nt - באופן הבא :
קוד:
Dim Nt As ListObject
Set Nt = ActiveSheet.ListObjects(1)
MsgBox Nt
ולמרות זאת, הקוד הבא בשורה1 שבו רשום שם הטבלה שהגדרתי כ Nt - איננו עובד,
לעומת הקוד בשורה6 בו רשמתי את שם הטבלה X - שם הוא עובד פיקס :
קוד:
Range("Nt[[#Headers],[#Data]]").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Sheets("פ_ו").Range("B1:B36"), CopyToRange:=Range( _
        "K11:S11"), Unique:=False
    
    
 Range("X[[#Headers],[#Data]]").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Sheets("פ_ו").Range("B1:B36"), CopyToRange:=Range( _
        "K11:S11"), Unique:=False
אז מה ההבדל ??? X ו- Nt שווים, הלא כן ?
 

ziv98

Member
1. ה - Nt נמצא בתוך המרכאות, לכן הוא טקסט ולא משתנה (בדוק את תשובתי אליך מלפני מספר ימים, תראה איך השם משורשר)
2. ה - Nt קיבל את אובייקט הטבלה ולא את שם הטבלה. הוסף נקודה + name , כמו בדוגמה:
קוד:
 MsgBox ActiveCell.ListObject.Name
 

1.
קוד:
Sub Micky()
    On Error Resume Next
    MsgBox ActiveCell.ListObject.Name
End Sub


2. חפש ב"גוגל" אודות הפקודה: Unlist
תודה מיקי, על העזרה
1. ה - Nt נמצא בתוך המרכאות, לכן הוא טקסט ולא משתנה (בדוק את תשובתי אליך מלפני מספר ימים, תראה איך השם משורשר)
2. ה - Nt קיבל את אובייקט הטבלה ולא את שם הטבלה. הוסף נקודה + name , כמו בדוגמה:
קוד:
 MsgBox ActiveCell.ListObject.Name
תודה על ההסבר, הבנתי לגמרי את ההבדל בין Nt לבין X .
אפילו הצלחתי ליישם את מה שהצעת.
1. הנה כך זה עובד
קוד:
Dim Nt As ListObject
Set Nt = ActiveSheet.ListObjects(1)

Range(Nt & "[[#Headers],[#Data]]").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Sheets("פ_ו").Range("B1:B36"), CopyToRange:=Range( _
        "K11:S11"), Unique:=False
2. אבל את ההערה הזו לא ממש הבנתי..., כי אם הבנתי נכון ואתה מתכוון להגדרה זו
קוד:
Set Nt = ActiveSheet.ListObjects(1)
אז כשניסיתי להוסיף Name , דווקא אז הוא טוען שאובייקט אינו תומך בזה...
קוד:
Dim Nt As ListObject
Set Nt = ActiveSheet.ListObject(1).Name
בכל אופן, הוא זיהה את Nt כ 'שם הטבלה' למרות שלא רשום Name , יתרה מזו, גם ה MsgBox מחזיר את שם הטבלה.
אני קצת מבולבל מהעניין. האם תוכל לפרט יותר, בבקשה ?
 

ziv98

Member
אתה צריך קצת רקע על dim+set.
ב - dim הגדרת ש - NT הוא מסוג טבלה. ב - set הגדרת שהוא טבלה מסויימת. אם אתה רוצה להמשיך להשתמש ב - dim+set אז את שם הטבלה תקבל ע"י:
קוד:
Nt.Name
באופן אישי, ולמרות שזה יותר ארוך, אני לא אוהב להשאיר את הגדרת ברירת המחדל:
קוד:
Range(Nt & ...
מבלי להגדיר למה בדיוק ב - NT אני מתייחס.

כיוון שאתה בסופו של דבר צריך טקסט - אתה יכול להגדיר משתנה טקסט (בלי dim+set בכלל), בדיוק כמו בדוגמת ה - MSGBOX, ולהשתמש בו:
קוד:
table_name=ActiveCell.ListObject.Name
 
למעלה