excel - 拆分列不适用于按钮

标签 excel vba

为了工作,我必须从美国农业部的报告中提取各种信息。我创建了一个子程序,它将我需要的信息从文本文件中提取到工作表“USDA Weekly”中。我使用记录器创建了另一个子,它使用文本到列来拆分信息(通过固定宽度)。进行拆分的子是唯一以任何方式更改“USDA 周刊”表上信息的子。所有其他潜艇都从此工作表中提取信息。

我在另一个工作表(在同一个工作簿中)上有一个按钮,它运行我为我必须做的报告创建的所有子项,包括提到的两个子项。现在,当我运行 sub 来拆分信息时,它可以完美运行,但是当我单击按钮运行包括拆分器在内的所有 sub 时,它不起作用。

我已经在调试器中一步一步地运行了很多次,试图弄清楚为什么会发生这种情况而没有运气。我很困惑为什么当按钮被点击时 sub 不起作用,但在它自己运行时起作用。任何关于为什么这不起作用的提示都值得赞赏。

编辑:澄清这如何不起作用。拆分子通过按钮运行时,根本不拆分列,如下图。没有错误,或任何弹出。

enter image description here

编辑 编辑:根据 Mathieu Guindon (implicit) 的建议,我修改了 formatUSDAWeekly 以使用 with 语句来避免隐式引用。

Sub formatUSDAWeekly()
'this sub pulls information from strictly within the workbook

Dim wb As Workbook
Dim ws As Worksheet

Set wb = ThisWorkbook 'sets wb to the workbook that contains the code (i.e. this workbook)

Set ws = wb.Sheets("USDA Weekly")

With ws

    .Range("A:A").TextToColumns Destination:=.Range("A:A"), DataType:=xlFixedWidth, _
        FieldInfo:=Array(Array(0, 1), Array(39, 1), Array(50, 1), Array(52, 1), Array(61, 1), _
        Array(73, 1)), TrailingMinusNumbers:=True

End With

End Sub

这是按钮的子
Sub start()

Call pullFrom610
Call formatUSDAWeekly
Call formatWIWorkbook
Call formatOSWorkbook

End Sub

这是提取信息的子
Sub pullFrom610()
'this code was taken from Seamus Abshere
'on SO:https://stackoverflow.com/questions/158633/how-can-i-send-an-http-post-request-to-a-server-from-excel-using-vba

Dim wb As Workbook
Dim ws As Worksheet

Set wb = ThisWorkbook
Set ws = wb.Sheets("USDA Weekly")

ws.Columns("A:F").ClearContents 'clears the previous information

With ws.QueryTables.Add(Connection:="URL;https://www.ams.usda.gov/mnreports/lm_pk610.txt", Destination:=ws.Range("A1"))

    .RefreshStyle = xlOverwriteCells
    .SaveData = True
    .Refresh

End With

End Sub

这是使用文本到列拆分信息的子
Sub formatUSDAWeekly()
'this sub pulls information from strictly within the workbook

Dim wb As Workbook
Dim ws As Worksheet

Set wb = ThisWorkbook 'sets wb to the workbook that contains the code (i.e. this workbook)

Set ws = wb.Sheets("USDA Weekly")

ws.Range("A:A").TextToColumns Destination:=Range("A:A"), DataType:=xlFixedWidth, _
        FieldInfo:=Array(Array(0, 1), Array(39, 1), Array(50, 1), Array(52, 1), Array(61, 1), _
        Array(73, 1)), TrailingMinusNumbers:=True

End Sub

最佳答案

虽然 Active Sheet 隐式引用可能存在问题(应该更正这些问题),但最有可能的问题是查询未在 formatUSDAWeekly 之前完成。正在被调用。

这个问题有多种可能的解决方案,包括:

  • 禁用 Background Refresh .BackgroundQuery = False
  • 使用 DoEvents在查询之后,但这并不总是有效
  • 使用 .RefreshAllpullFrom610 之后有一个空白查询名称类似于 zzzzzz所以它最后运行(查询按字母顺序刷新)
  • 关于excel - 拆分列不适用于按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57695285/

    相关文章:

    vba - Excel vba : global variables are assigned when workbook is opened; get erased if an error occurs

    java - 需要替代 java Robot 类以在 Linux 服务器中使用

    vba - 我的代码似乎停止执行而没有错误

    excel - 获取传递给网站表单的数据

    excel - 检查范围是否是整行

    excel - 对具有字符和数字的键进行排序

    vba - 在 Excel 2003 vba 中插入新行非常慢

    excel - EntireRow.Delete 性能问题

    vba - Excel vba日期过滤器并复制到新工作表

    excel - 将三个变量添加到脚本字典问题VBA