Печать в Excel VBA - PullRequest
       2

Печать в Excel VBA

0 голосов
/ 26 сентября 2019

Я новичок в VBA и пытаюсь написать код VBA в Excel, который импортирует выходные данные CSV из моделирования в таблицу Excel и отображает данные в обычной XY-диаграмме разброса Excel.Я справился со всем, кроме конечного результата, т. Е. Данные были правильно импортированы из csv в excel, точки заменены запятыми в качестве десятичного разделителя, но он строит прямую горизонтальную линию с координатами 0 y ( Результирующий график ).Когда код запускается, я заметил, что значения в Excel хранятся в виде текстов, хотя я указал формат числового содержимого csv в виде чисел, как показано ниже:

DataSheet.Cells(Row, col).NumberFormat = "0.E+00"

Когда я тестирую Isnumeric(cell.value), этооказывается положительным.Но конечные значения в Excel все еще текстовые, и я не могу получить правильные графики.Что мне здесь не хватает?И советы / помощь очень ценится.Большое спасибо.

Вот мой полный код:

CsvFile = Application.GetOpenFilename()
Set DataSheet = Worksheets("CSV_Plot")
nrow = 10 'data starts at 10th row
Open CsvFile For Input As #1

Do Until EOF(1)
Line Input #1, CsvLine
CsvItem = Split(CsvLine, ",")
If Not CsvItem(0) <> "" Then GoTo 10 'ignores first line
ncol = UBound(CsvItem) 'ncol = number of data columns
    If IsNumeric(CsvItem(0)) Then

    For i = 0 To ncol
    CsvItem(i) = Replace(CsvItem(i), ".", ",") 'replace point with comma in 'numerical values
    Next i

    End If
Add1 = DataSheet.Cells(nrow, LBound(CsvItem) + 1).Address
Add2 = DataSheet.Cells(nrow, ncol + 1).Address

DataSheet.Range(Add1 & ":" & Add2) = CsvItem


nrow = nrow + 1
10:
    Loop
nrowlast = nrow

Close #1



For Row = 11 To nrowlast
    For col = 1 To ncol
    DataSheet.Cells(Row, col).Select
    DataSheet.Cells(Row, col).NumberFormat = "0.E+00"   

    Next col

Next Row

Set ChtObj = DataSheet.ChartObjects.Add(50, 50, 500, 300)
  Set Cht = ChtObj.Chart

  With Cht
    .ChartType = xlXYScatterLines
    .SeriesCollection.NewSeries
    .SeriesCollection(1).XValues = DataSheet.Range("A11:A35")
    .SeriesCollection(1).Values = DataSheet.Range("N11:N35")


  End With

1 Ответ

0 голосов
/ 26 сентября 2019

РЕДАКТИРОВАТЬ: Я думаю, что ваша проблема заключается в этой строке: CsvItem = Split(CsvLine, ",").Тип возврата Split должен быть String.Я не знаю, как выглядят ваши данные, но вы можете попробовать преобразовать их в Double, если значатся десятичные разряды.В противном случае произнесите его как Long: CsvItem = CLng(Split(CsvLine, ",")).

Оригинальный ответ: я обновил соответствующие части вашего кода:

For Row = 11 To nrowlast
    For col = 1 To ncol
        DataSheet.Cells(Row, col).NumberFormat = "0.E+00"
    Next col
Next Row

Я удалил оператор .Select, так как он не нужен и может привести к ошибкам.Вот основная часть:

Dim ChtObj As Object

Set ChtObj = DataSheet.Shapes.AddChart2(, xlXYScatterLines, 50, 50, 500, 300)

With ChtObj.Chart
    .SeriesCollection.NewSeries
    .SeriesCollection(1).XValues = DataSheet.Range("A11:A35")
    .SeriesCollection(1).Values = DataSheet.Range("N11:N35")
End With

Это должно работать как задумано.

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