मैं vba में एक स्ट्रिंग में दोहरे उद्धरण कैसे लगाऊं?


116

मैं vba के माध्यम से एक सेल में एक इफ स्टेटमेंट डालना चाहता हूं जिसमें डबल कोट्स शामिल हैं।

यहाँ मेरा कोड है:

Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!B1=0,"",Sheet1!B1)"

दोहरे उद्धरण चिह्नों के कारण मुझे स्ट्रिंग सम्मिलित करने में समस्या हो रही है। मैं दोहरे उद्धरण कैसे संभालूं?


प्रत्यक्ष उत्तर नहीं, लेकिन क्या आप उस स्ट्रिंग के बारे में निश्चित हैं? यह एक गोलाकार संदर्भ है और एक बराबर चिह्न के साथ शुरू नहीं होता है।
जिम्मीना

@JimmyPena मुझे लगता है कि यह शायद केवल उदाहरण कोड है। मैं एक संपादन प्रस्तुत कर रहा हूँ, परवाह किए बिना
Farfromunique

जवाबों:


182

मुझे लगता है कि उद्धरण को संभालने के लिए उद्धरणों को दोगुना करना सबसे आसान तरीका है।

Worksheets("Sheet1").Range("A1").Formula = "IF(Sheet1!A1=0,"""",Sheet1!A1)" 

कुछ लोग CHR (34) * का उपयोग करना पसंद करते हैं:

Worksheets("Sheet1").Range("A1").Formula = "IF(Sheet1!A1=0," & CHR(34) & CHR(34) & ",Sheet1!A1)" 

* नोट: CHAR () का उपयोग एक्सेल सेल फॉर्मूला के रूप में किया जाता है, जैसे सेल में "= CHAR (34)" लिखना, लेकिन VBA कोड के लिए आप CHR () फ़ंक्शन का उपयोग करते हैं।


28
मैं एक वैश्विक वैरिएबल बनाना पसंद करता हूं: Public Const vbDoubleQuote As String = "" "" 1 दोहरा उद्धरण दर्शाता है (") Public Const vbSingleQuote as String =" '' 1 एकल उद्धरण (') का प्रतिनिधित्व करता है और इसका उपयोग करना पसंद है: शेल " explorer.exe "और vbDoubleQuote & sPath & vbDoubleQuote, vbNormalFocus
gicalle

@gicalle का उत्तर वास्तव में साफ-सुथरा है, इसमें 'कितने सिंगल और डबल कोट्स' की
सारी उलझनें

1
मैं अपने सभी VBA प्रोजेक्ट्स में बहुत सारे ग्लोबल डिफाइनर्स का उपयोग करता हूं (जब मेरे पास V29 के अलावा किसी अन्य चीज़ का उपयोग करने में कोई विकल्प नहीं है) जो कि सभी सामान्य चीजों जैसे कि गाड़ी की वापसी, डबल कोट्स आदि को परिभाषित करता है
रोल

11

एक अन्य काम-के आसपास एक अस्थायी विकल्प चरित्र के साथ एक स्ट्रिंग का निर्माण करना है। फिर आप प्रत्येक अस्थायी वर्ण को दोहरे उद्धरण में बदलने के लिए REPLACE का उपयोग कर सकते हैं। मैं अस्थायी विकल्प के रूप में टिल्ड का उपयोग करता हूं।

यहां एक परियोजना से एक उदाहरण दिया गया है जिस पर मैं काम कर रहा हूं। यह बहुत ही जटिल सूत्र को ठीक करने के लिए एक छोटी सी उपयोगिता रूटीन है यदि / जब सेल गलती से चली जाती है। यह एक सेल में प्रवेश करने के लिए एक कठिन सूत्र है, लेकिन यह थोड़ी सी उपयोगिता इसे तुरंत ठीक कर देती है।

Sub RepairFormula()
Dim FormulaString As String

FormulaString = "=MID(CELL(~filename~,$A$1),FIND(~[~,CELL(~filename~,$A$1))+1,FIND(~]~, CELL(~filename~,$A$1))-FIND(~[~,CELL(~filename~,$A$1))-1)"
FormulaString = Replace(FormulaString, Chr(126), Chr(34)) 'this replaces every instance of the tilde with a double quote.
Range("WorkbookFileName").Formula = FormulaString

यह वास्तव में सिर्फ एक सरल प्रोग्रामिंग ट्रिक है, लेकिन यह आपके VBA कोड में सूत्र को बहुत आसान बनाता है।


8

दोहरे उद्धरणों के अंदर सभी दोहरे उद्धरण जो स्ट्रिंग को बढ़ाते हैं उन्हें दोगुना बदलना होगा। उदाहरण के रूप में मेरे पास json फ़ाइल स्ट्रिंग्स में से एक था: "वितरण": "मानक", Vba संपादक में मैंने इसे "" "वितरण" में बदल दिया: "" मानक "", और एरीथिग सही तरीके से काम करता है। यदि आपको बहुत सारे समान तार सम्मिलित करने हैं, तो मेरा प्रस्ताव पहले, उन सभी को "" के बीच डालें, फिर VBA संपादक के साथ "अंदर" को बदल दें। "यदि आप गलती करेंगे, तो VBA संपादक लाल रंग में यह रेखा दिखाता है और आप सही करेंगे।" यह गलती।


5

मैं tabSF के जवाब को पसंद करता हूं। अपने उत्तर के लिए समान लागू करना। यहाँ नीचे मेरा दृष्टिकोण है

Worksheets("Sheet1").Range("A1").Value = "=IF(Sheet1!A1=0," & CHR(34) & CHR(34) & ",Sheet1!A1)"

4

मैंने एक छोटी सी दिनचर्या लिखी है, जो एक सेल से क्लिपबोर्ड में फॉर्मूला की प्रतिलिपि बनाती है, जिसे विजुअल बेसिक एडिटर में आसानी से पेस्ट किया जा सकता है।

    Public Sub CopyExcelFormulaInVBAFormat()
        Dim strFormula As String
        Dim objDataObj As Object

        '\Check that single cell is selected!
       If Selection.Cells.Count > 1 Then
            MsgBox "Select single cell only!", vbCritical
            Exit Sub
        End If

        'Check if we are not on a blank cell!
       If Len(ActiveCell.Formula) = 0 Then
            MsgBox "No Formula To Copy!", vbCritical
            Exit Sub
        End If

        'Add quotes as required in VBE
       strFormula = Chr(34) & Replace(ActiveCell.Formula, Chr(34), Chr(34) & Chr(34)) & Chr(34)

        'This is ClsID of MSFORMS Data Object
       Set objDataObj = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        objDataObj.SetText strFormula, 1
        objDataObj.PutInClipboard
        MsgBox "VBA Format formula copied to Clipboard!", vbInformation

        Set objDataObj = Nothing

    End Sub

यह मूल रूप से Chandoo.org मंचों के वॉल्ट सेक्शन पर पोस्ट किया गया है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.