Vba 执行搜索和替换时在Excel中的单元格中保留数据类型

Vba 执行搜索和替换时在Excel中的单元格中保留数据类型,vba,excel,excel-2010,type-conversion,Vba,Excel,Excel 2010,Type Conversion,webquery成功地将目录中的所有图像名称拉入excel 通过vba使用Replace替换“_lg.jpg”和“.jpg”,这在整个导入范围内都能正常工作 但是,在图像为“2496-6-4_lg.jpg”的情况下,删除“_lg.jpg”会导致excel将新值解释为日期6/3/2496,即使我首先将单元格格式化为文本 我在QueryTables.Add(Connection:=代码的一部分)中尝试了任意数量的设置更改 好像 .PreserveFormatting=True .WebFormat

webquery成功地将目录中的所有图像名称拉入excel

通过vba使用Replace替换“_lg.jpg”和“.jpg”,这在整个导入范围内都能正常工作

但是,在图像为“2496-6-4_lg.jpg”的情况下,删除“_lg.jpg”会导致excel将新值解释为日期6/3/2496,即使我首先将单元格格式化为文本

我在QueryTables.Add(Connection:=代码的一部分)中尝试了任意数量的设置更改 好像

.PreserveFormatting=True
.WebFormatting=xlWebFormattingNone
.WebDisableDateRecognition=True

可能会影响最终结果,但更改其中任何一个都不会禁止图像名称转换为删除扩展名时的日期

此外,我使用

For Each cell In Range("E2:E" & lastPhoto)
        cell.Select
        ActiveCell = ActiveCell.FormulaR1C1
        Next cell
因为每个单元格都已经被格式化为文本,所以这会强制他们使用文本格式,但是这些已经转换为日期的单元格并没有得到这样的帮助

所有这些都是对db查询输出的文本进行比较,以查找缺少的图像名称

除了这些被误解的日期,一切都很顺利

预先设定一个使徒并不是一个好的解决方案,因为它可能会破坏用于比较的vlookups

是否有一种方法可以执行搜索替换并将结果值保留为文本,而在删除扩展之前,它们显然是文本


图像名称是如何被引入的

With ActiveSheet.QueryTables.Add(Connection:= _
    "URL;http://images.mysite.com/" & mfr, Destination:=Range("$E$2"))
    .Name = mfr
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .WebSelectionType = xlAllTables
    .WebFormatting = xlWebFormattingNone
    .WebPreFormattedTextToColumns = True
    .WebConsecutiveDelimitersAsOne = True
    .WebSingleBlockTextImport = False
    .WebDisableDateRecognition = True
    .WebDisableRedirections = False
    .Refresh BackgroundQuery:=False
End With
---进一步资料 在替换之前,我将范围格式化为文本

Selection.NumberFormat = "@"
Selection.Replace What:="_lg.jpg", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
似乎
ReplaceFormat:=False
应该做我想做的事情,但它没有


如果将范围的格式设置为
Selection.NumberFormat=“”@“
,则会在
选择之前修复日期问题并中断其余的问题。NumberFormat
尝试添加
Selection.Value=“””“&Selection.Value
”-这与使用
“@”进行格式设置不同

@PortlandRunner刚刚添加了这一点,谢谢如果您在单元格值处进行控制,那么通常可以在字符串的开头追加“'”(单元格(1,1)=“'”&somestring)。在这种情况下,使用querytables然后将列预格式化为文本通常会解决此问题。@pathDongle添加了更多关于我尝试使用带前缀的撇号的内容。我不想在检查日期时重复太多,因为每个报告的图像数通常为25-50K。您的代码似乎归结为以下示例:
Sub test():Sheet1.Range(“A1”).Value=“2496-6-4”:Sheet1.Range(“A1”).Value=“””和“2496-6-4”:End Sub
-如果列A:A被格式化为文本,则第一行将作为字符串而不是日期输出。第二行将始终输出字符串。为了清楚起见,您必须先将列格式化为文本,然后才能输出数据。对此进行了相当多的处理,但为所选范围设置此项不起作用。可以尝试通过每个细胞的gh,尽管你似乎不能一次为整个范围加上撇号