VBA'da bir dizeye nasıl çift tırnak koyarım?


116

Bir hücreye vba aracılığıyla çift tırnak içeren bir if ifadesi eklemek istiyorum.

İşte kodum:

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

Çift tırnak işaretleri nedeniyle dizeyi eklemeyle ilgili sorunlar yaşıyorum. Çift tırnak işaretlerini nasıl işlerim?


Doğrudan bir cevap değil, ama bu dizeden emin misin? Bu döngüsel bir referanstır ve eşittir işaretiyle başlamaz.
JimmyPena

@JimmyPena Sanırım bu muhtemelen sadece örnek kod. Ne olursa olsun bir düzenleme gönderiyorum
Farfromunique

Yanıtlar:


182

En kolay yolun, bir teklifi ele almak için teklifleri ikiye katlamak olduğunu düşünüyorum.

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

Bazı insanlar CHR (34) * kullanmayı sever:

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

* Not: CHAR (), Excel hücre formülü olarak kullanılır, örneğin bir hücreye "= CHAR (34)" yazılır, ancak VBA kodu için CHR () işlevini kullanırsınız.


28
Global bir değişken oluşturmayı tercih ediyorum: Public Const vbDoubleQuote As String = "" "" '1 çift tırnağı temsil eder (") Public Const vbSingleQuote As String ="' "'1 tek alıntıyı (') temsil eder ve şu şekilde kullanır: Shell" explorer.exe "& vbDoubleQuote & sPath & vbDoubleQuote, vbNormalFocus
gicalle

@gicalle'ın cevabı gerçekten düzgün, 'kaç tane tek ve çift alıntı' konusundaki tüm kafa karışıklığını, belgelenebileceği tek bir tanıma
taşıyor

1
Küresel satırbaşı gibi tüm ortak şeyleri tanımlayan tüm benim VBA projelerinde tanımlayıp (VBA dışında bir şey kullanarak bir seçenek yok olduğunda !!), çift tırnak vb bir sürü kullanmak
rulo

11

Başka bir çözüm, geçici bir ikame karakterle bir dizge oluşturmaktır. Sonra, her geçici karakteri çift tırnağa değiştirmek için DEĞİŞTİR'i kullanabilirsiniz. Geçici ikame karakter olarak tilde kullanıyorum.

İşte üzerinde çalıştığım bir projeden bir örnek. Bu, hücre kazara üzerine basıldığında çok karmaşık bir formülü onarmak için küçük bir yardımcı programdır. Bir hücreye girmek zor bir formüldür, ancak bu küçük yardımcı program onu ​​anında düzeltir.

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

Bu gerçekten basit bir programlama numarasıdır, ancak formülü VBA kodunuza girmeyi oldukça kolaylaştırır.


8

Dizeyi çevreleyen çift tırnak içindeki tüm çift tırnak iki katına çıkarılmalıdır. Örneğin, json dosya dizilerinden birine sahiptim: "teslimat": "Standart", Vba Editöründe onu "" "teslim" ":" "Standart" "" olarak değiştirdim ve her şey doğru çalışıyor. Çok sayıda benzer dizgi eklemeniz gerekiyorsa, önce teklifim hepsini "" arasına ekleyin, ardından VBA editörü ile "inside" "" yerine koyun. Hata yaparsanız VBA editörü bu satırı kırmızı olarak gösterir ve düzeltirsiniz bu hata.


5

TabSF'nin cevabını tercih ederim. aynı şeyi cevabınıza uygulamak. aşağıda benim yaklaşımım

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

4

Formülü hücreden panoya kopyalayan ve Visual Basic Editor'da kolayca yapıştırılabilen küçük bir rutin yazdım.

    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

İlk olarak Chandoo.org forumlarının Vault Bölümünde yayınlanmıştır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.