如何使用VBA在Excelmacros中用//replace单引号

我在表2中有一个string,并且string以“'”单引号开头,我想用//replace单引号,我通过excelmacros写了下面的代码,但是输出以'以及/ /然后是string

Sub Conversion() Dim qtpval, selval qtpval = "'" selval = "//" 'qtpval = Sheets("Variables").Range("A2") 'qtpval = Left(qtpval, Len(qtpval) - 1) 'MsgBox qtpval 'selval = Sheets("Variables").Range("B2") 'MsgBox selval MoveCode qtpval, selval 'readvariables End Sub Function MoveCode(qtpval, selval) Dim lRowCount As Long Application.ActiveSheet.UsedRange lRowCount = Worksheets("QTP Code").UsedRange.Rows.Count 'MsgBox lRowCount Dim i Dim j j = 1 For i = 1 To lRowCount tempvar = Sheets("QTP Code").Range("A" & i) chngval = Replace(tempvar, qtpval, selval) 'If InStr(tempvar, "'") Then 'MsgBox "pass" 'Sheets(3).Range("A" & j).Value = "//" & tempvar Sheets(3).Range("A" & j).Value = chngval j = j + 1 'End If Next i End Function 'Function readvariables() 'Dim varRowCount As Long 'Application.ActiveSheet.UsedRange 'varRowCount = Worksheets("Variables").UsedRange.Rows.Count 'MsgBox varRowCount 'End Function 

问题是单引号是PreFixCharacter不出现在单元格中,但只是控制格式。 例如,如果你input:

 'A 

在一个单元格中,你会得到:

在这里输入图像说明

报价出现在公式栏中,但不在单元格中。 事实上,如果你检查A1的长度,它将只有1

由于单引号不是真的存在,所以Replace()不能删除它。 请考虑:

 Sub DontQuoteMe() Dim s As String, r As Range Set r = Range("A1") s = r.Value MsgBox Len(s) & vbCrLf & s If r.PrefixCharacter = "'" Then r.Value = "//" & r.Value End If End Sub 

这会

  • 使用PreFixCharacter定位单元格
  • 预先附加斜杠
  • 删除PreFixCharacter

编辑#1:

这个macros将循环遍历单元格并修复那些具有PreFixCharacter的元素:

 Sub QuoteKleaner() Dim s As String, r As Range Dim rBig As Range Set rBig = ActiveSheet.UsedRange.Cells.SpecialCells(xlCellTypeConstants) For Each r In rBig If r.PrefixCharacter = "'" Then r.Value = "//" & r.Value End If Next r End Sub