Hallo liebe Community,
Ich möchte gerne ein Makro, welches von einem ehemaligen Mitarbeiter in Excel verfasst wurde, in ein AutoIt Programm einbauen.
Hier erstmal das Makro
Spoiler anzeigen
Dim Bereich As Object, Zeile As Object, Zelle As Object
Dim strTemp As String
Dim strDateiname As String
Dim strTrennzeichen As String
Dim strMappenpfad As String
strMappenpfad = ActiveWorkbook.FullName
strMappenpfad = Replace(strMappenpfad, ".xls", ".csv")
strDateiname = InputBox("Wie soll die CSV-Datei heißen (inkl. Pfad)?", "CSV-Export", strMappenpfad)
If strDateiname = "" Then Exit Sub
strTrennzeichen = InputBox("Welches Trennzeichen soll verwendet werden?", "CSV-Export", ",")
If strTrennzeichen = "" Then Exit Sub
Set Bereich = ActiveSheet.UsedRange
Open strDateiname For Output As #1
For Each Zeile In Bereich.Rows
For Each Zelle In Zeile.Cells
If InStr(1, Zelle.Text, strTrennzeichen) > 0 Then
'Zellen, die ein Trennzeichen beinhalten in Anführungsstriche setzen
strTemp = strTemp & """" & CStr(Zelle.Text) & """" & strTrennzeichen
Else
strTemp = strTemp & CStr(Zelle.Text) & strTrennzeichen
End If
Next
If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1)
Print #1, strTemp
strTemp = ""
Next
Close #1
Set Bereich = Nothing
MsgBox "Datei wurde exportiert nach" & vbCrLf & strDateiname
End Sub
Alles anzeigen
DIe Exceldatei, die wir mit diesem Makro umwandeln, wird an einen Auftraggeber gesendet und dort verarbeitet.
Normalerweise würde ich jetzt testen, ob es klappt, aber das geht eben nicht, weil ich nicht weiß wie die datei verarbeitet wird.
Hier der Code, den ich bis jetzt übersetzen konnte, aber nun komme ich nicht mehr weiter, da ich die Befehle nicht kenne
Spoiler anzeigen
Dim $strTemp = ""
[/autoit] [autoit][/autoit] [autoit]$strMappenpfad = $oExcel.ActiveWorkBook.FullName
$strMappenpfad = StringReplace($strMappenpfad, ".xls", ".csv")
$strDateiname = InputBox("CSV-Export", "Wie soll die CSV-Datei heißen (inkl. Pfad)?", $strMappenpfad)
If $strDateiname = "" Then Return SetError(1, 0, 0)
$strTrennzeichen = InputBox("CSV-Export", "Welches Trennzeichen soll verwendet werden?", ",")
If $strTrennzeichen = "" Then Return SetError(2, 0, 0)
$Bereich = _ExcelSheetUsedRangeGet($oExcel, $vSheet)
Open strDateiname For Output As #1
[/autoit] [autoit][/autoit] [autoit]For $i = 1 To $Bereich[3]
For $k = 1 To $Bereich[2]
$Inhalt = _ExcelReadCell($oExcel, $i, $k)
If StringInStr($Inhalt, $strTrennzeichen) > 0 Then ; Zellen, die ein Trennzeichen beinhalten in Anführungsstriche setzen
_ExcelWriteCell($oExcel, '"'&$Inhalt&'"'&$strTrennzeichen, $i, $k)
Else
_ExcelWriteCell($oExcel, $Inhalt&$strTrennzeichen, $i, $k)
EndIf
Next
For Each Zeile In Bereich.Rows
For Each Zelle In Zeile.Cells
If InStr(1, Zelle.Text, strTrennzeichen) > 0 Then
'Zellen, die ein Trennzeichen beinhalten in Anführungsstriche setzen
strTemp = strTemp & """" & CStr(Zelle.Text) & """" & strTrennzeichen
Else
strTemp = strTemp & CStr(Zelle.Text) & strTrennzeichen
End If
Next
If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1)
Print #1, strTemp
strTemp = ""
Next
Close #1
Set Bereich = Nothing
MsgBox "Datei wurde exportiert nach" & vbCrLf & strDateiname
End Sub
;===============================================================================
;
; Description: Return the last cell of the used range in the specified worksheet.
; Syntax: $array = _ExcelSheetUsedRangeGet($oExcel, $vSheet)
; Parameter(s): $oExcel - An Excel object opened by a preceding call to _ExcelBookOpen() or _ExcelBookNew()
; $vSheet - The sheet name or number to be checked.
; Requirement(s): None
; Return Value(s): On Success - Returns an array of used range values:
; $array[0] - The last cell used, in A1 format (if 0 is returned, worksheet is blank)
; $array[1] - The last cell used, in R1C1 format
; $array[2] - The last column used, as an integer
; $array[3] - The last row used, as an integer
; On Failure - Returns 0 (as non-array numeric value) and sets @error on errors:
; @error=1 - Specified object does not exist
; @error=2 - Invalid sheet number
; @error=3 - Invalid sheet name
; Author(s): DaLiMan, MRDev, SEO <locodarwin at yahoo dot com>
; Note(s): Upon return, $array[0] will equal numeric value 0 if the worksheet is blank
;
;===============================================================================
Func _ExcelSheetUsedRangeGet($oExcel, $vSheet)
Local $aSendBack[4], $sTemp, $aSheetList, $fFound = 0
If NOT IsObj($oExcel) Then Return SetError(1, 0, 0)
If IsNumber($vSheet) Then
If $oExcel.ActiveWorkbook.Sheets.Count < $vSheet Then Return SetError(2, 0, 0)
Else
$aSheetList = _ExcelSheetList($oExcel)
For $xx = 1 To $aSheetList[0]
If $aSheetList[$xx] = $vSheet Then $fFound = 1
Next
If NOT $fFound Then Return SetError(3, 0, 0)
EndIf
$oExcel.ActiveWorkbook.Sheets($vSheet).Select
$aSendBack[0] = $oExcel.Application.Selection.SpecialCells($xlCellTypeLastCell).Address
$aSendBack[1] = $oExcel.Application.Selection.SpecialCells($xlCellTypeLastCell).Address(True, True, $xlR1C1)
$aSendBack[0] = StringReplace($aSendBack[0], "$", "")
$sTemp = StringRegExp($aSendBack[1], "[RZ]([^CS]*)[CS](.*)",3)
$aSendBack[2] = Number($sTemp[1])
$aSendBack[3] = Number($sTemp[0])
If $aSendBack[0] = "A1" And $oExcel.Activesheet.Range($aSendBack[0]).Value = "" Then $aSendBack[0] = 0
Return $aSendBack
EndFunc ;==>_ExcelSheetUsedRangeGet
Ich würde mich über eine Eingebung freuen