如何使用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