मैं वीबीए प्रोग्रामिंग के लिए नया हूं और मुझे एक्सेल मैक्रो के साथ एक समस्या है जो तालिकाओं को प्रारूपित करती है।

Sub l___API_ENG()


'------------------------------Insert Formula--------------------------------------

       
    Range("F2").Select
    ActiveCell.SpecialCells(xlLastCell).Select
    Selection.End(xlToLeft).Select
    
    ActiveCell.Offset(1, 6).Select
    ActiveCell.FormulaR1C1 = "x"
    ActiveCell.Offset(0, -1).Select
    ActiveCell.FormulaR1C1 = "x"
    ActiveCell.Offset(0, -1).Select
    ActiveCell.FormulaR1C1 = "I"
    
    Selection.AutoFilter
    ActiveCell.CurrentRegion.AutoFilter Field:=5, Criteria1:="I"
    
    Range("G4").Select
    ActiveCell.FormulaR1C1 = "=RC[-1]+R[-2]C-R[-1]C"
    Range("G4").Select
    Selection.Copy
    Range(Selection, Selection.End(xlToRight)).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    
    Selection.Copy
    Range(Selection, Selection.End(xlDown)).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveCell.SpecialCells(xlLastCell).Select
    Range(Selection, Selection.End(xlToLeft)).Select
    Selection.ClearContents
    
    ActiveCell.CurrentRegion.AutoFilter Field:=5
   

'------------------------------Lock Column--------------------------------------
    Range("F2").Select
    ActiveWindow.FreezePanes = True
    
'------------------------------Choose all cells from F2 down and right--------------------------------------
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    
    
'------------------------------Set conditional format for the weekend - grey filling--------------------------------------

    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=OR(WEEKDAY(F$1;2)=7;WEEKDAY(F$1;2)=6)"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.249946592608417
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    
  '------------------------------Set conditional format for Arrivals - blue filling--------------------------------------
    
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=AND(F2>0;$E2=""A"")"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 15773696
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    
 '------------------------------Set conditional format for shortage - red filling--------------------------------------
 
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=AND(F2<0;$E2=""I"")"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .Color = -16383844
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13551615
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    
  '------------------------------Clear PN from rows P and I--------------------------------------
    

    
   '------------------------------Set underline--------------------------------------
    

    ActiveCell.CurrentRegion.AutoFilter Field:=5, Criteria1:="I"
    ActiveCell.CurrentRegion.Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    
    
    ActiveCell.CurrentRegion.AutoFilter Field:=5
    
    Cells.Select
    Cells.EntireColumn.AutoFit
    
    Range("F2").Select
End Sub

समस्या यह है कि इसे सप्ताहांत की कोशिकाओं को ग्रे रंग में रंगना चाहिए और जब मेरे पास क्षेत्रीय दिनांक प्रारूप 21.07.22 के रूप में सेट होता है तो यह काम करता है, लेकिन एक अन्य मामले में जैसे कि 21/07/22 या यहां तक ​​​​कि 21 जुलाई 2022 यह ऐसा नहीं करता है। विंडोज़ सेटिंग्स में दिनांक स्वरूप स्विच करके, मुझे पता चला कि जब मैं 25.10.21 प्रारूप से स्विच करता हूं तो छाया क्षेत्र गायब हो जाता है। क्या एक्सेल को विंडोज़ क्षेत्रीय सेटिंग्स का उपयोग करने से रोकने का कोई तरीका है?

और क्या सशर्त प्रारूप में AND और WEEKDAY को बदलने के लिए कोई फ़ंक्शन है, इसलिए मैक्रो उन उपयोगकर्ताओं के लिए कार्यात्मक होगा जो विभिन्न सिस्टम भाषाओं का उपयोग करते हैं?

तालिका इस तरह दिखनी चाहिए

Table

0
Freemasoid 25 अक्टूबर 2021, 14:40

1 उत्तर

सबसे बढ़िया उत्तर

आपके स्क्रीनशॉट की जांच करने पर, ऐसा प्रतीत होता है कि जिन तारीखों का आप परीक्षण कर रहे हैं, वे तालिका के कॉलम हेडर हैं।

ऐसा होने पर, वे "वास्तविक तिथियां" नहीं हैं, बल्कि वे टेक्स्ट स्ट्रिंग हैं जो तिथियों के रूप में दिखाई देती हैं।

जब आपकी क्षेत्रीय सेटिंग्स सर्वांगसम होती हैं, तो एक्सेल उन्हें तिथियों के रूप में व्याख्या कर सकता है, जब सेटिंग्स सर्वांगसम नहीं होती हैं, एक्सेल नहीं कर सकता।

इसलिए आपको इन डॉट से अलग DMY तारीख स्ट्रिंग्स को "वास्तविक" तिथियों में बदलने के लिए अपने Formula1 तर्क को संशोधित करना होगा।

आप अपने वीबीए प्रोजेक्ट में रूपांतरण करने के लिए यूडीएफ जोड़कर और फिर Formula1 के भीतर इसका उपयोग करके ऐसा कर सकते हैं।

यूडीएफ

Option Explicit
Function dateFromString(strDate) As Date
    Const dtSep As String = "."
    Dim dtParts
    Dim y As Long, m As Long, d As Long
    Dim I As Long
    
dtParts = Split(strDate, dtSep)
    y = dtParts(2)
    m = dtParts(1)
    d = dtParts(0)

dateFromString = DateSerial(y, m, d)
        
End Function

फिर आप इसे फॉर्मूला 1 में कुछ इस तरह इस्तेमाल करेंगे:

FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=AND(LEN($F1)>0;WEEKDAY(datefromstring($F1);2)>5)"

जहां तक ​​आपके अन्य प्रश्न के लिए, सशर्त स्वरूपण Formula1 (और Formula2) तर्कों के लिए अंतरराष्ट्रीय स्तर पर मान्य सूत्रों का उपयोग करने के बारे में, आप एक्सेल मैक्रो, रन-टाइम के दौरान अंतरराष्ट्रीय स्तर पर मान्य फॉर्मूला सम्मिलित करना

विशेष रूप से वीबीए के लिए एक नवागंतुक के रूप में, उन बुरी आदतों से बाहर निकलने का प्रयास करें जिन्हें वीबीए मैक्रो रिकॉर्डर प्रोत्साहित करता है।

आपको उन सभी चयनों, चयनों, सक्रिय सेल आदि से छुटकारा पाना चाहिए। कृपया पढ़ें Excel VBA में Select का उपयोग करने से कैसे बचें

साथ ही, हमेशा अपने वेरिएबल घोषित करना एक अच्छा अभ्यास है (हालाँकि आप अपने कोड पर एक नज़र में किसी का उपयोग नहीं करते हैं)। वीबीए जीयूआई में, आप इसे Tools/Options/Editor/Code Settings और Require Variable Declaration चुनकर लागू कर सकते हैं। यह प्रत्येक सम्मिलित मॉड्यूल के शीर्ष पर OPTION EXPLICIT रखेगा (और आप इस विकल्प को चुनने से पहले बनाए गए मॉड्यूल में इसे मैन्युअल रूप से जोड़ सकते हैं)। यह टाइपो, गलत प्रकार के वेरिएबल आदि को पकड़ने में बेहद उपयोगी होगा।

0
Ron Rosenfeld 26 अक्टूबर 2021, 04:01
आपकी मदद के लिए बहुत बहुत शुक्रिया। मैं इस मैक्रो का लेखक नहीं हूं, लेकिन मैं इसे बेहतर बनाने की कोशिश कर रहा हूं। भले ही मैं पाइथन और सी # जानता हूं, मुझे वीबीए निराशाजनक लगता है। क्या आप किसी भी तरह से, VBA सीखने के लिए कुछ अच्छे संसाधनों के बारे में नहीं जानते हैं? उदाहरण के लिए सोलोलर्न की तरह।
 – 
Freemasoid
28 अक्टूबर 2021, 00:17
मुझे नहीं लगता कि मैं यह पूछने के लिए सही व्यक्ति हूं। लंबे समय से कोडिंग और कंप्यूटर में दिलचस्पी होने के कारण मैंने इसे अपने दम पर सीखा। मैंने करके सीखा; अध्ययन; और उन मंचों पर जाना जहां मेरे योगदान की आलोचना की गई थी। वैसे, यदि मेरे उत्तर ने आपके प्रश्न को संतुष्ट किया है, तो मैं इसकी सराहना करता हूं यदि आप इसे स्वीकृत के रूप में चिह्नित करते हैं। देखें जब कोई मेरे प्रश्न का उत्तर देता है तो मुझे क्या करना चाहिए
 – 
Ron Rosenfeld
28 अक्टूबर 2021, 02:23