2012-01-26 46 views
68

Çift tırnak içeren bir hücre içinde bir if deyimi vba aracılığıyla eklemek istiyorum. Ben dize ekleme ile sorunlar yaşıyorumVba'da bir dizeye çift tırnak nasıl yazarım?

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

nedeniyle çift tırnak için:

İşte benim kodudur. Çift tırnakları nasıl ele alabilirim?

+0

Doğrudan bir yanıt değil, ancak bu dizeden emin misiniz? Dairesel bir referans ve eşittir işareti ile başlamıyor. – JimmyPena

+0

@JimmyPena Bence bu muhtemelen sadece örnek kod.Bir düzenleme gönderiyorum, – Farfromunique

cevap

103

Fiyat teklifini işlemek için teklifleri ikiye katlamanın en kolay yolunu buluyorum.

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

* Not: CHAR() bir Excel hücre formülü olarak kullanılan, örneğin

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

Bazıları * CHR (34) kullanmak gibi Bir hücrede "= CHAR (34)" yazarken, VBA kodu için CHR() işlevini kullanırsınız.

+11

Olmadan bağımsız bir global değişken oluşturmayı tercih ediyorum: Public Const vbDoubleQuote As String = "" "" '1 çift alıntıyı temsil eder (") Public Const vbSingleQuote As String ="' "'1 tek alıntıyı temsil eder (') ve şöyle kullanmaktan: – gicalle

+0

@gicalle Shell 'explorer.exe' & vbDoubleQuote & Späth & vbDoubleQuote, vbNormalFocus' ın cevabı, bu kaç tek ve çift tırnak 'tüm karışıklığı gerçekten düzgün alır – rolinger

+0

belgelendirilebileceği bir tanıma dışarı çıkıyorum VBA projelerinde (VBA'dan başka bir şey kullanma seçeneğim olmadığında!) çok sayıda global tanım kullanıyorum. tırnak vb – rolls

1

TabSF'nin cevabını tercih ederim. aynısını cevabınıza uygular. Burada aşağıda yaklaşımım

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

TEXT function tırnak kullanmadan boş (veya sıfır uzunluk) dize üretebilir olduğunu.

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 

ben Range.Formula property yerine Range.Value property netlik için kullanmak ettik. Metin olarak biçimlendirilmiş bir hücreye (örneğin, @) bir formül koymak için .Value kullanılması, metne benzeyen bir metin içeren bir hücreye neden olabilir.

1

Dizginin etrafında çift tırnak içinde bulunan çift tırnakların tümü iki katına değiştirilmelidir. Örneğin, json dosya dizelerinden birine sahiptim: "teslimat": "Standart", Vba Düzenleyicisi'nde "" "teslim" "olarak değiştirdim:" "Standart" ", ve her şey doğru çalışıyor. Benzer dizeleri çok eklemek zorundaysanız, önce teklifim, hepsini "" arasına ekleyin, sonra VBA düzenleyicisi ile "içeriye" değiştirin. Eğer hata yaparsanız, VBA editörü bu satırı kırmızı olarak gösterir ve Bu hata. Başka-etrafında çalışma geçici yedek karakteri ile bir dize oluşturmaktır

2

. Sonra çift tırnak her geçici karakterini değiştirmek için dEĞİŞTİRİN kullanabilirsiniz. Ben geçici yedek karakteri olarak tilde kullanın.

İşte üzerinde çalıştığım bir projeden bir örnek. Bu, hücrenin yanlışlıkla kazandığında çok karmaşık bir formülü onarmak için küçük bir yardımcı programdır. Hücreye girmek zor bir formüldür, ancak bu küçük yardımcı program 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 VBA kodunuzdaki formülü girmeyi oldukça kolaylaştırır.

0

Bir Visual Basic Düzenleyicisi'nde kolayca yapıştırabileceğiniz bir hücreden panoya formülünü kopyalayan küçük bir yordam 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 

Başlangıçta Chandoo.org forumların Vault Bölüm yayınlanmaktadır.

İlgili konular