简体   繁体   English

使用 VBA 从 Excel 导出 CSV 并导入到 Visual Planning 中

[英]Export CSV from Excel with VBA and import into Visual Planning

Im totally new to VBA and a little lost here.我对 VBA 完全陌生,在这里有点迷失。 I have an Excel file with the holidays of my colleagues.我有一个包含同事假期的 Excel 文件。 There is a cell for every day of the year, where they need to put in an "X".一年中的每一天都有一个单元格,他们需要在其中输入“X”。 I need to write a macro with VBA to export a CSV file, which exports their personnel number and the start- and enddate of their vacation.我需要用 VBA 编写一个宏来导出一个 CSV 文件,该文件导出他们的人员编号以及他们假期的开始和结束日期。 I also need a logic to skip weekends.我还需要一个逻辑来跳过周末。 I need the CSV File to import it to Visual Planning.我需要将 CSV 文件导入到 Visual Planning 中。 It should be a table, with personnel number, start date and end date as columns How can i do that?它应该是一个表格,以人员编号、开始日期和结束日期为列我该怎么做? Can you help me please?你能帮我吗?

这是excel文件的一部分

Sub Makro1()

' '

Dim wb As Workbook
Dim ws As Worksheet
Set wb = ActiveWorkbook
Set ws = Worksheets("2021")

Dim ersteZeile As Integer
Dim letzteZeile As Integer

Dim c As Range
Dim datumRow As Integer
Dim d As Range

datumRow = 4


ersteZeile = 5
letzteZeile = ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row

anfangsRange = "I" & ersteZeile
endrange = "NI" & letzteZeile

For Each c In ws.Range("I5:NI71")
    If Not c.Value = "" Then
        Cells(4, c.Column).Copy Destination:=Sheets("CSV").Column("BEGDA")
    End If
Next c

End Sub结束子

This is the code i got so far, but I need to copy the "X"es dynamically into my CSV Sheet.这是我到目前为止得到的代码,但我需要将“X”动态复制到我的 CSV 表中。

Please, try the next code.请尝试下一个代码。 It builds a string respecting the CSV creation rule and put it in a file at the end.它构建一个遵守 CSV 创建规则的字符串,并将其放在最后的文件中。 The file name will be importEmployee.csv and it will be found on the workbooks keeping this code path.文件名将是importEmployee.csv ,它将在保留此代码路径的工作簿中找到。 You can change the path in whatever you need (at the end code part):您可以根据需要更改路径(在最后的代码部分):

Sub ExportCSVHolidayDays()
 Dim sh As Worksheet, lastRow As Long, lastCol As Long, arrPn, arrH, arrInt
 Dim i As Long, j As Long, strCSV As String, startD As String, endD As String
 Dim lngSt As Long, lngEnd As Long, arrI
 
 Set sh = ActiveSheet
 lastRow = sh.Range("A" & rows.count).End(xlUp).row
 lastCol = sh.cells(4, Columns.count).End(xlToLeft).Column
 
 arrPn = sh.Range("A5:A" & lastRow).Value
 arrH = sh.Range("H4", sh.cells(lastRow, lastCol)).Value
 
 For i = 1 To UBound(arrPn)
    arrInt = Application.Index(arrH, i + 1, 0)       'extract a row slice of arrH
    arrI = Split(StrReverse(Join(arrInt, ",")), ",") 'reverse the slice array
    
     lngSt = WorksheetFunction.Match("X", arrInt, 0) 'first "X" position
    startD = arrH(1, lngSt): ' start date (from arrH first row)
     lngEnd = UBound(arrI) - WorksheetFunction.Match("X", arrI, 0) + 2 'last "X" pos
    endD = arrH(1, lngEnd):  ' end date (from arrH first row)
    
    If strCSV = "" Then
        'write the first row of the CSV string - first employee
        strCSV = arrPn(i, 1) & "," & startD & "," & endD & vbCrLf
    Else
        'next employee first line
        strCSV = strCSV & arrPn(i, 1) & "," & startD & "," & endD & vbCrLf
    End If
        startD = "": endD = ""                            'reinitialize the variables
        For j = lngSt To lngEnd + 1
            If UCase(arrInt(j)) = "X" And startD = "" Then startD = arrH(1, j)          'new start date
            If arrInt(j) = "" And endD = "" And startD <> "" Then endD = arrH(1, j - 1) 'new end date
            
            If endD <> "" Then
                'write the sequence inside the total start and end date
                strCSV = strCSV & arrPn(i, 1) & "," & startD & "," & endD & vbCrLf
            End If
            If arrInt(j) = "" Then startD = "": endD = "" 'reinitialize the variables
        Next
 Next
 'write the CSV file from string (strCSV):
 Dim expPath As String
 expPath = ThisWorkbook.Path & "\importEmployee.csv"
 Open expPath For Output As #1
    Print #1, strCSV
 Close #1
 MsgBox "Ready..." & vbCrLf & _
        "Here you can find he CSV exported file: " & expPath & ".", _
                            vbInformation, "Finishing confirmation"
End Sub

Please, send some feedback after testing it.请在测试后发送一些反馈。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM