Преобразовать из строки числа в цифры c - PullRequest
0 голосов
/ 27 марта 2020

Я написал эту функцию, где я могу предоставить лист, и он должен преобразовать первый столбец в числовые значения c из строки. но когда я вызвал функцию из подпрограммы, она не выполняет свою работу.

 Function ConvertTextToNumber(Worksheet As Worksheet)      
 If (Worksheet.Name = "TB") Or (Worksheet.Name = "JE") Then
        [A:A].Select
        With Selection
            .NumberFormat = "General"
            .Value = .Value
        End With
    ElseIf Worksheet.Name = "GLACCOUNT1100" Then
        [D:D].Select
        With Selection
            .NumberFormat = "General"
            .Value = .Value
        End With
    End If
End Function

, затем я вызвал ее внутри этой подпрограммы

Sub Select_Global_Account()
Dim length As Long, i As Long
Dim Start_range As Long, End_range As Long

' range input for the account number
Start_range = shStart.Range("P25").Value
End_range = shStart.Range("S25").Value

'================== converToNumber the acount column
Call helper.ConvertTextToNumber(shTB)
'===================

Call Iterate_In_Range(Start_range, End_range)
' JE report
Call JEReport.JEReport
' GL report
Call GL1100.AmountDate

остальная часть кода работает нормально , только helper.ConvertTextToNumber (shTB) не изменяет текст на строку

1 Ответ

0 голосов
/ 27 марта 2020

Пожалуйста, попробуйте этот код. Заметьте, что Value = Value не может изменить строку на число. Поэтому приведенный ниже код сначала извлекает значение цифры c, равное Value, а затем присваивает это новое значение ячейке.

 Function ConvertTextToNumber(Ws As Worksheet)

    ' please don't use variable names that might
    ' confuse either you or Excel or both

    Dim Clm As Long
    Dim Rng As Range
    Dim Cell As Range

    With Ws
        Select Case Ws.Name
            Case "TB", "JE"
                Clm = 1                         ' column A
            Case "GLACCOUNT1100"
                Clm = 4                         ' column D
            Case Else
                Exit Sub
        End Select

        ' convert cell from row 2 to the last used cell
        Set Rng = .Range(.Cells(2, Clm), .Cells(.Rows.Count, Clm).End(xlUp))
        For Each Cell In Rng
            .Value = Val(.Value)
            .NumberFormat = "General"
        Next Cell
    End With
End Function

Я добавил код, чтобы указать, что делать, если рабочая таблица передана в качестве аргумента. не подходит.

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