提问人:Joshua Smith 提问时间:11/3/2023 最后编辑:Mayukh BhattacharyaJoshua Smith 更新时间:11/4/2023 访问量:73
有没有办法阻止 csv 重命名工作表
Is there a way to stop a csv from renaming the sheet
问:
该脚本的目标是删除最后一个填充行之后的每个空白行或空行。删除每个空白行的重点是将工作表导入第三方软件。如果我不删除空行,我会在第三方软件中得到一堆空白行。
我想做的是在工作表中运行宏,将其导入软件,然后只看到填充的行。
下面的脚本会这样做,直到我进入保存部分。在脚本中,有一个定义工作表部分,我应该在其中定义正在编辑的工作表的名称。该脚本运行并删除它应该删除的所有内容,但是当我到达最后保存它时,它会将工作表的名称从 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
答:
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 文件并导入该文件。如果导入了空白行,则这是第三方软件中的错误。
评论
Set ws = ActiveWorkbook.Sheets(1)