Vba 文本到列

Vba 文本到列,vba,excel,formatting,Vba,Excel,Formatting,我的Excel文件有一个SQL连接,它运行一个存储过程并输出三列,每列都是时间格式的。输出为“hh:mm:ss”格式,Excel不会将其作为时间。我发现,如果手动使用带有默认设置的“文本到列”工具,Excel会将“0:03:05”转换为“12:03:05 AM”。我使用VB代码将文本复制到列中,但只有当它是Sub中唯一的代码时,它才起作用。目前,此功能有效= Sub textToColumns() Sheets("Main Data").Visible = True Sheets(

我的Excel文件有一个SQL连接,它运行一个存储过程并输出三列,每列都是时间格式的。输出为“hh:mm:ss”格式,Excel不会将其作为时间。我发现,如果手动使用带有默认设置的“文本到列”工具,Excel会将“0:03:05”转换为“12:03:05 AM”。我使用VB代码将文本复制到列中,但只有当它是Sub中唯一的代码时,它才起作用。目前,此功能有效=

 Sub textToColumns()
 Sheets("Main Data").Visible = True
     Sheets("Main Data").Select 
         Sheets("Main Data").Select
     Columns("Z:Z").Select
     Selection.textToColumns Destination:=Range("Z:Z"), _
    DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
    :=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, _
    Other:=False, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
 Sheets("Main Data").Visible = False   
 End Sub
但这并不等于

 Sub textToColumns()
 ActiveWorkbook.RefreshConnections
 Sheets("Main Data").Visible = True
     Sheets("Main Data").Select 
         Sheets("Main Data").Select
     Columns("Z:Z").Select
     Selection.textToColumns Destination:=Range("Z:Z"), _
    DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
    :=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, _
    Other:=False, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
 Sheets("Main Data").Visible = False   
 End Sub
唯一的区别是
ActiveWorkbook.RefreshConnections

我尝试将刷新和文本列拆分为两个单独的子项,然后调用这两个子项,但都不起作用


值得注意的是,我根本没有收到任何错误消息。

如果您手动运行刷新,请在第一个子系统工作后立即运行它?@ScottHoltzman Yes。我可以单独运行“刷新”子模块和“文本到列”子模块,两者都可以正常工作。当我将这两个值相互滚动时,文本到列的过程不会发生。@pnuts我试过以5、30和60秒为增量。我认为问题不在于表格刷新所需的时间(<2秒)。运行代码时没有打开其他工作簿,对吗?@ScottHoltzman正确。如果手动运行刷新,则在其工作后立即运行第一个子系统?@ScottHoltzman是。我可以单独运行“刷新”子模块和“文本到列”子模块,两者都可以正常工作。当我将这两个值相互滚动时,文本到列的过程不会发生。@pnuts我试过以5、30和60秒为增量。我认为问题不在于刷新表所需的时间(<2秒)。运行代码时没有打开其他工作簿,对吗?@ScottHoltzman正确。