Bagaimana cara menempatkan tanda kutip ganda dalam string di vba?

116

Saya ingin memasukkan pernyataan if ke dalam sel melalui vba yang menyertakan tanda kutip ganda.

Ini kode saya:

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

Karena tanda kutip ganda, saya mengalami masalah dengan memasukkan string. Bagaimana cara menangani tanda kutip ganda?

pengguna793468
sumber
Bukan jawaban langsung, tetapi apakah Anda yakin tentang string itu? Ini adalah referensi melingkar dan tidak dimulai dengan tanda sama dengan.
JimmyPena
@JimmyPena Saya pikir itu mungkin hanya contoh kode. Saya mengirimkan suntingan, terlepas
Farfromunique

Jawaban:

182

Saya menemukan cara termudah adalah dengan menggandakan kutipan untuk menangani kutipan.

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

Beberapa orang suka menggunakan CHR (34) *:

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

* Catatan: CHAR () digunakan sebagai rumus sel Excel, misalnya menulis "= CHAR (34)" dalam sel, tetapi untuk kode VBA Anda menggunakan fungsi CHR ().

Brain2000
sumber
28
Saya lebih suka membuat variabel global: Public Const vbDoubleQuote As String = "" "" 'mewakili 1 tanda kutip ganda (") Public Const vbSingleQuote As String ="' "'mewakili 1 petik tunggal (') dan menggunakannya seperti: Shell" explorer.exe "& vbDoubleQuote & sPath & vbDoubleQuote, vbNormalFocus
gicalle
Jawaban @gicalle benar-benar rapi, menghilangkan semua kebingungan 'berapa banyak tanda kutip tunggal dan ganda' ke satu definisi yang dapat didokumentasikan
rolinger
1
Saya menggunakan banyak definisi global di semua proyek VBA saya (ketika saya tidak punya pilihan dalam menggunakan sesuatu selain VBA !!) yang mendefinisikan semua hal umum seperti carriage return, tanda kutip ganda, dll.
gulungan
11

Solusi lain adalah membuat string dengan karakter pengganti sementara. Kemudian Anda dapat menggunakan REPLACE untuk mengubah setiap karakter temp menjadi tanda kutip ganda. Saya menggunakan tilde sebagai karakter pengganti sementara.

Berikut adalah contoh dari proyek yang sedang saya kerjakan. Ini adalah utilitas rutin kecil untuk memperbaiki formula yang sangat rumit jika / saat sel terinjak secara tidak sengaja. Ini adalah rumus yang sulit untuk dimasukkan ke dalam sel, tetapi utilitas kecil ini memperbaikinya secara instan.

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

Ini benar-benar hanya trik pemrograman sederhana, tetapi ini membuat memasukkan rumus dalam kode VBA Anda cukup mudah.

D Zeller
sumber
8

Semua tanda kutip ganda di dalam tanda kutip ganda yang mengelilingi string harus diubah menjadi dua kali lipat. Sebagai contoh saya memiliki salah satu string file json: "delivery": "Standard", Di Vba Editor saya mengubahnya menjadi "" "delivery" ":" "Standard" "," dan semuanya bekerja dengan benar. Jika Anda harus memasukkan banyak string serupa, proposal saya terlebih dahulu, masukkan semuanya di antara "", lalu dengan editor VBA ganti "inside into" ". Jika Anda melakukan kesalahan, editor VBA menunjukkan baris ini dengan warna merah dan Anda akan memperbaikinya kesalahan ini.

Sharunas Bielskis
sumber
5

Saya lebih suka jawaban tabSF. menerapkan hal yang sama untuk jawaban Anda. di sini di bawah ini adalah pendekatan saya

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

Saya telah menulis rutinitas kecil yang menyalin rumus dari sel ke clipboard yang dapat dengan mudah ditempelkan di Editor Visual Basic.

    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

Ini awalnya diposting di Bagian Vault forum Chandoo.org .

shrivallabha.redij
sumber