我是vb和excel的完全虚拟,试图将我在这里找到的2个宏组合成1,但显然做了一些非常错误的事情,现在我被卡住了..首先我只是使用了这个宏(将其保存为personal.xlsb,以便能够在任何工作簿中使用)
Sub CSVFile()
Dim SrcRg As Range
Dim CurrRow As Range
Dim CurrCell As Range
Dim CurrTextStr As String
Dim ListSep As String
Dim FName As Variant
FName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")
ListSep = ";"
If Selection.Cells.Count > 1 Then
Set SrcRg = Selection
Else
Set SrcRg = ActiveSheet.UsedRange
End If
Open FName For Output As #1
For Each CurrRow In SrcRg.Rows
CurrTextStr = ìî
For Each CurrCell In CurrRow.Cells
CurrTextStr = CurrTextStr & """" & GetUTF8String(CurrCell.Value) & """" & ListSep
Next
While Right(CurrTextStr, 1) = ListSep
CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
Wend
Print #1, CurrTextStr
Next
Close #1
End Sub
加上GetUTF8String函数代码。现在工作正常。然后我想到为什么不只是尝试我的有限(这是一个严重的轻描淡写)vb理解,添加以下代码并将CSVFile子更改为一个函数,然后我从下面的子调用,输出文件名为一个参数(代替FName = Application.GetSaveAsFilename)。我想是的,这段代码会自动保存所有工作表,现在让我们确保在保存每张工作表之前运行编码和分隔符/机箱设置功能。这似乎不对,但我认为嘿为什么不试试..
Public Sub SaveAllSheetsAsCSV()
On Error GoTo Heaven
' each sheet reference
Dim Sheet As Worksheet
' path to output to
Dim OutputPath As String
' name of each csv
Dim OutputFile As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False
' Save the file in current director
OutputPath = ThisWorkbook.Path
If OutputPath <> "" Then
Application.Calculation = xlCalculationManual
' save for each sheet
For Each Sheet In Sheets
OutputFile = OutputPath & Application.PathSeparator & Sheet.Name & ".csv"
' make a copy to create a new book with this sheet
' otherwise you will always only get the first sheet
Sheet.Copy
' this copy will now become active
CSVFile(OutputFile)
ActiveWorkbook.SaveAs Filename:=OutputFile, FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close
Next
Application.Calculation = xlCalculationAutomatic
End If
Finally:
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True
Exit Sub
Heaven:
MsgBox "Couldn't save all sheets to CSV." & vbCrLf & _
"Source: " & Err.Source & " " & vbCrLf & _
"Number: " & Err.Number & " " & vbCrLf & _
"Description: " & Err.Description & " " & vbCrLf
GoTo Finally
End Sub
保存,并且我已经设法实现了一些非常不同的东西。在打开任何工作簿时,该宏运行并从该特定工作簿中打开我的工作表作为csv文件(不保存它们)。现在我就像爱丽丝梦游仙境。为什么它在文件打开时运行?这是不可取的,所以我回到宏代码并将其更改回csvfile sub。嗯,这没有帮助,不知道我在那里做了什么,肯定是编辑相同的宏...所以我删除了宏,模块,我无法想象现在的东西在哪里,但它仍在运行+我得到这个警告,宏已停用。无法摆脱它!现在小伙子们,我很抱歉从我身边完全缺乏专业性,这对于一个客户来说应该是一个小小的好处,而不会浪费大量的时间学习vb,因为我的老板不喜欢那样......我我当然对如何在设置分隔符和外壳后自动保存纸张的目标感兴趣。在这一刻,我对如何摆脱那个宏以及隐藏的地方非常感兴趣。我做了什么?!感谢您的耐心等待!
答案 0 :(得分:1)
我认为问题在于行
OutputPath = ThisWorkbook.Path
因为您是从存储在XLSTART文件夹中的personal.xlsb运行它,所以它在同一位置创建了CSV文件。当Excel启动时,它将尝试加载它在该位置找到的任何文件。
只需找到您的XLSTART文件夹并删除您在那里找到的所有CSV文件。
尝试使用
OutputPath = ActiveWorkbook.Path
XLSTART文件夹位置(取决于您的系统)可能类似于:
C:\Users\YOURNAME\AppData\Roaming\Microsoft\Excel\XLSTART