2012-01-26 16 views
68

मैं वीबीए के माध्यम से एक सेल में एक कथन कथन डालना चाहता हूं जिसमें डबल कोट्स शामिल हैं। मैं स्ट्रिंग डालने के साथ मुद्दों कर रहा हूँमैं वीबीए में एक स्ट्रिंग में डबल कोट्स कैसे डालूं?

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

दोहरे उद्धरण चिह्नों के कारण:

यहाँ मेरी कोड है। मैं डबल कोट्स कैसे संभाल सकता हूं?

+0

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

+0

@ जिमीमेना मुझे लगता है कि शायद यह सिर्फ उदाहरण कोड है।मैं एक संपादन सबमिट कर रहा हूं, भले ही – Farfromunique

उत्तर

103

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

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

* नोट:: CHAR() एक एक्सेल सेल सूत्र के रूप में प्रयोग किया जाता है, उदाहरण के लिए

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

कुछ लोगों CHR (34) का उपयोग करने के * चाहते एक सेल में "= CHAR (34)" लिखना, लेकिन वीबीए कोड के लिए आप सीएचआर() फ़ंक्शन का उपयोग करते हैं।

+11

मैं वैश्विक वैरिएबल बनाना पसंद करता हूं: पब्लिक कॉन्स vbDoubleQuote स्ट्रिंग के रूप में = "" "" 1 डबल कोट (") सार्वजनिक कॉन्स vbSingleQuote स्ट्रिंग के रूप में =" '' '1 सिंगल कोट का प्रतिनिधित्व करता है (') और इसका उपयोग इस प्रकार करते हुए: शैल "explorer.exe" और vbDoubleQuote और sPath & vbDoubleQuote, vbNormalFocus – gicalle

+0

@gicalle का उत्तर वास्तव में साफ है, यह' कितने सिंगल और डबल कोट्स 'के भ्रम को लेता है एक परिभाषा के लिए जहां इसे – rolinger

+0

दस्तावेज किया जा सकता है, मैं अपने सभी वीबीए परियोजनाओं में बहुत से वैश्विक परिभाषाओं का उपयोग करता हूं (जब मेरे पास वीबीए के अलावा कुछ और उपयोग करने में कोई विकल्प नहीं है !!) जो कैरिज रिटर्न जैसे दो सामान्य चीजों को परिभाषित करता है, डबल उद्धरण इत्यादि – rolls

1

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

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

TEXT function उद्धरण का उपयोग किए बिना एक खाली (या शून्य लंबाई) स्ट्रिंग पुन: पेश कर सकते हैं।

with Worksheets("Sheet1").Range("A2") 
    .formula = "=IF(Sheet1!A1=0, TEXT(,), Sheet1!A1)" 
    'also good for comparing to a zero-length string; e.g. IF(A1="", ... 
    .formula = "=IF(Sheet1!A1=TEXT(,), TEXT(,), Sheet1!A1)" 
end with 

मैं Range.Formula property बजाय Range.Value property स्पष्टता के लिए उपयोग किया है। टेक्स्ट के रूप में स्वरूपित सेल में सूत्र बनाने के लिए वॉल्यूम का उपयोग करना (उदा। @) परिणामस्वरूप एक सेल जिसमें पाठ-दिखने वाला-एक-फॉर्मूला होता है।

1

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

2

एक और काम के आसपास एक अस्थायी विकल्प के चरित्र के साथ एक स्ट्रिंग के निर्माण के लिए है। तो फिर तुम दोहरे उद्धरण के लिए प्रत्येक अस्थायी चरित्र बदलने के लिए 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 

यह वास्तव में केवल एक साधारण प्रोग्रामिंग चाल है, लेकिन यह आपके वीबीए कोड में सूत्र को बहुत आसान बनाता है।

0

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

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 मंचों 'Vault धारा पर पोस्ट किया जाता है।

संबंधित मुद्दे