Ненужная конкатенация значений и ошибки типа в Excel VBA - PullRequest
0 голосов
/ 02 октября 2019

Мой код VBA берет файл .txt из определенного программного вывода (программное обеспечение Carlson Survey) и выполняет некоторые вычисления, а затем преобразует его в файл .CSV. У меня конкретно возникают проблемы с компонентом вычисления, когда один из моих столбцов текстового файла (выведенный в Excel с использованием разделителей запятых) не выполняет вычисления, о которых я говорю, и, по-видимому, объединяет себя (удаляет все после десятичной точки),Я предполагаю, что, поскольку я беру эти значения в массив (который должен был быть задан как строка, или я получаю ошибки типа), который устанавливается как строка, это вызывает конкатенацию после десятичной точки. Я в недоумении относительно того, почему вычисления, похоже, не выполняются, поскольку программа, похоже, работает нормально.

И скрипт VBA для быстрого ознакомления (конкретный раздел с проблемой - это раздел «Выполнить преобразование данных»:

Private Sub Workbook_Open()
Sheets("Sheet1").Cells.ClearContents
'---------------------------------------------------------------------------------------
'Choose and open the .TXT file for conversion
Dim answer As Integer
answer = MsgBox("Do you want to process a .TXT file for use in InfoSWMM?", vbYesNo + vbQuestion, "Select .TXT File")
If answer = vbNo Then
    Exit Sub
End If
Dim Ret
Ret = Application.GetOpenFilename("Text Files (*.txt),*.txt")
If Ret <> False Then
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & Ret, Destination:=Range("$A$1") _
        )
        .Name = "Sample"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        TextFilePromptOnRefresh = False
        .TextFilePlatform = 437
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End If
'---------------------------------------------------------------------------------------
'Do data conversion, SECTION NEEDS UPDATING LACKING FEATURES, BUGS
Dim row As Integer
Dim col As Integer
Dim i As Integer
Dim tester(3) As String 'Bug[1] related, type error (see below).  String type fixes type error, but causes undesired concatenation
Dim col_test As Integer
Dim rim As Integer

For row = 1 To ActiveSheet.UsedRange.Rows.Count
    If IsEmpty(ActiveSheet.Cells(row, 1).Value) = True Then
        Exit For
    End If
    'Change these values in case feature code library is changed in Carlson, also need to add extra fields
    If ActiveSheet.Cells(row, 5).Value = "SD" Or ActiveSheet.Cells(row, 5).Value = "WQ" Then
        col_test = 20
        rim = ActiveSheet.Cells(row, 4).Value
        For i = 0 To 3
            tester(i) = ActiveSheet.Cells(row, col_test).Value 'Bug[1] here, type error if not a String.
            col_test = col_test + 4
        Next i
        ActiveSheet.Cells(row, 37).Value = rim - Application.Max(tester) 'Bug[2] here, not performing calculation.
    End If
Next row
'---------------------------------------------------------------------------------------
'Save converted file as .CSV
MsgBox "Choose the desired save location for the .CSV file."
Dim InitialName As String
Dim PathName As Variant
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
InitialName = "sfm_output"
PathName = Application.GetSaveAsFilename(InitialFileName:=InitialName, fileFilter:="CSV (Comma delimited) (*.csv), *.csv")
ws.Copy
ActiveWorkbook.SaveAs Filename:=PathName, _
    FileFormat:=xlCSV, CreateBackup:=False
MsgBox "Process completed successfully." & vbNewLine & "File saved to:" & vbNewLine & PathName
'---------------------------------------------------------------------------------------
'Close all Workbooks
Application.DisplayAlerts = False
Application.Quit
End Sub

Любая помощь очень ценится. Спасибо.

1 Ответ

1 голос
/ 02 октября 2019

Вы пробовали функции CSTRING или CINT?

Например: tester (i) = CString (ActiveSheet.Cells (row, col_test) .Value)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...