簡體   English   中英

在 Excel 文件宏的 Visual Basic 代碼中取出額外的管道

[英]Taking out extra pipes in Visual Basic code for excel file macro

我創建了一個 excel 文件,其中包含一個可以執行多項操作的宏。 在圖像中,您可以看到如何制作 excel 文件的外觀。 用戶將在第 12 行和第 13 行輸入他們的數據。宏將運行並創建一個使用管道分隔符的記事本文件。 如您所見,它在文本的第一行創建了額外的管道 - 這就是我想要擺脫的。

Excel文件截圖

電流輸出

需要的輸出

    Sub NewPipeFile()

    Dim IntialName As String
    Dim sFileSaveName As Variant
    IntialName = "Sample Output"
    sFileSaveName = Application.GetSaveAsFilename(InitialFileName:=InitialName, fileFilter:="Excel Files (*.xlsm), *.xlsm")

    If sFileSaveName <> False Then
        ActiveWorkbook.SaveAs sFileSaveName
    End If

    'Deletes instructions
    Rows("1:11").Select
    Range("A11").Activate
    Selection.Delete Shift:=xlUp

    'Deletes bottom 85 rows so end up with no blank lines
    Rows("14:14").Select
    ActiveWindow.SmallScroll Down:=90
    Rows("14:100").Select
    Selection.Delete Shift:=xlUp

    'Deletes comments, makes text black, etc
    Selection.Font.Bold = False
    With Selection.Font
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
    End With
    Selection.ClearComments



Const myDelim As String = "|"
Dim ws As Worksheet
Set ws = ActiveSheet
Dim r As Long, c As Long, i As Long, j As Long
r = ws.Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
c = ws.Cells.Find(What:="*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Dim myPath As String
myPath = ThisWorkbook.Path & "\"
Dim myFile As String
myFile = myPath & Format(Now(), "yyyy-mm-dd--hh-mm-ss") & "PipeFile.txt"
Dim obj As Object
Set obj = CreateObject("ADODB.Stream")
obj.Type = 2
obj.Charset = "unicode"
obj.Open
Dim v() As Variant
ReDim v(1 To c)
For i = 1 To r
For j = 1 To c
v(j) = ws.Cells(i, j).Text
Next
obj.WriteText Join(v, myDelim), 1
Next
obj.SaveToFile myFile, 2
Dim Npad
Npad = Shell("C:\WINDOWS\notepad.exe " & myFile, 1)
End Sub

像這樣循環:

For i = 1 To r
  c = ws.Cells(r,ws.columns.count).end(xlToLeft).column
  Dim v as Variant
  v = ws.Range(ws.Cells(r,1),ws.Cells(r,c)).Value
  objWriteText Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose(v)), myDelim), 1
Next

我在這里使用轉置,因為列列表是相對較少的列(因此不會影響速度)。 我使用它兩次,因為它是基於列的。 所以第一個轉置是讓它基於行,第二個是使它成為 1D,因為范圍默認為 2D 數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM