有没有办法阻止 csv 重命名工作表

Is there a way to stop a csv from renaming the sheet

提问人:Joshua Smith 提问时间:11/3/2023 最后编辑:Mayukh BhattacharyaJoshua Smith 更新时间:11/4/2023 访问量:73

问:

该脚本的目标是删除最后一个填充行之后的每个空白行或空行。删除每个空白行的重点是将工作表导入第三方软件。如果我不删除空行,我会在第三方软件中得到一堆空白行。

我想做的是在工作表中运行宏,将其导入软件,然后只看到填充的行。

下面的脚本会这样做,直到我进入保存部分。在脚本中,有一个定义工作表部分,我应该在其中定义正在编辑的工作表的名称。该脚本运行并删除它应该删除的所有内容,但是当我到达最后保存它时,它会将工作表的名称从 Sheet1 更改为实际文件的名称。

理想情况下,工作表名称将保持 Sheet1,这样我就不必修改定义工作表部分。

第一个问题是,我是否遗漏了一些简单的东西?我尝试添加代码,将代码中的 Sheet 名称动态更改为实际文件名。 第二个问题,有没有更好的方法来做我没有看到的所有这些事情?

Sub DeleteEmptyRowsAfterLastPopulatedRow()
Dim lastRow As Long
Dim ws As Worksheet
Dim i As Long
Dim activeSheetName As String
activeSheetName = ActiveSheet.Name

' Define the worksheet
Set ws = ThisWorkbook.Sheets(activeSheetName)

' Find the last populated row
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

' Loop through rows after the last populated row and delete empty rows
For i = lastRow + 1 To ws.UsedRange.Rows.Count
    If WorksheetFunction.CountA(ws.Rows(i)) = 0 Then
        ws.Rows(i).Delete
        i = i - 1 ' Adjust the counter since a row has been deleted
    End If
Next i
Excel VBA CSV

评论

0赞 taller 11/3/2023
您是否错过了 OP 中的部分代码?没有任何代码可以更改工作表名称。
4赞 Tim Williams 11/3/2023
CSV 文件只是纯文本文件,Excel 可以将其作为工作表查看。CSV 文件始终显示与源文件同名的工作表。没有办法改变这一点:CSV 文件不存储实际数据以外的任何信息。
0赞 Joshua Smith 11/3/2023
右。您是否知道一种编写代码的方法,该代码说:“更改定义工作表部分以镜像文件名更改为的任何内容。
0赞 CDP1802 11/4/2023
CSV 文件只有 1 个工作表,因此如果在 Excel 中打开它们,则可以将工作表引用定义为 。这是你想要的吗?Set ws = ActiveWorkbook.Sheets(1)

答:

0赞 user10186832 11/3/2023 #1

至少对我来说,这段代码可以满足 OP 的要求。

需要打开旧文本导入选项,以避免表格格式并保留 Sheet1 名称。这里有很多来自宏记录器的帮助。

Sub Macro3()
' the legacy text import option is required for this to work
' https://superuser.com/questions/1574847/how-to-import-external-csv-text-file-without-table-formatting
    Dim lastRow As LongLong
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\Users\david\Desktop\Export_Aug Nov 2023.csv", Destination:=Range("$A$1"))
        .Name = "Export_Aug Nov 2023"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    Dim ws As Worksheet
    Dim activeSheetName As String
    activeSheetName = ActiveSheet.Name
    ' Define the worksheet
    Set ws = ThisWorkbook.Sheets(activeSheetName)
    ' Find the last populated row
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    Range("A" & lastRow + 1).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
    Range("A1").Select
    ActiveWorkbook.Save
End Sub

此查询使用的连接存在问题。每次运行代码时,都会创建一个新连接。整理和删除连接的代码如下 -

ActiveWorkbook.Connections(“2023 年 11 月 Export_Aug 日”)。删除

如果上述代码运行两次,则会发生错误,表示连接已被删除。但是,UI 仍显示连接,无法通过 UI 删除连接。Subscript out of range

如果工作簿已关闭并重新打开,则 UI 不会显示连接。

评论

0赞 Joshua Smith 11/3/2023
我认为我们使用上述代码走在正确的轨道上,但我确实遇到了错误......Excel 找不到要刷新此外部数据范围的文本文件......当我调试时,突出显示了以下内容......刷新 BackgroundQuery:=False
0赞 Joshua Smith 11/3/2023
我可以手动做我想做的事。这意味着我可以打开工作表,突出显示行,删除行,另存为csv,并在没有空白的情况下将工作表带入。但是当我尝试运行任何删除空白行的脚本时,它会与每个空白行一起导入。
0赞 user10186832 11/4/2023
@JoshuaSmith我无法重现空白行问题,因为我没有您的第三方软件。我认为问题在于第三方软件在没有空白行的地方看到空白行。作为测试,手动创建一个包含少量行的 CSV 文件并导入该文件。如果导入了空白行,则这是第三方软件中的错误。