Excel2011 Строка обрезки VBA с невидимыми символами для сводной таблицы

Я новый член вашего сообщества, меня зовут Томас. Раньше я был разработчиком VisualFoxPro Developper, но сейчас я пытаюсь научиться работать с Excel (2011 на Mac) и VBA. Только в свободное время;-). Я много гуглил с тех пор, как начал, и действительно часто находил ответ прямо здесь, так что вот и я.

Вот (почти) полная картина: я извлекаю данные из файлов HTML (результаты соревнований Bridge), в какой-то момент (строка) есть фиксированные данные столбцов, и один столбец содержит 2 имени игрока, разделенных символом " - ". У меня нет проблем, чтобы получить первый, но не могу обрезать второй. Я пробовал, TRIM, CLEAN, SUBSTITUE со всеми символами CHAR -> 31 и CHAR 127, 129, 141, 143, 144 и 157. Я даже пробую это, нашел где-то на Google:

Sub Clean_and_Trim_Cells()

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Dim s As String
    For Each c In ActiveSheet.UsedRange
        s = c.Value
        If Trim(Application.Clean(s)) <> s Then
            s = Trim(Application.Clean(s))
            c.Value = s
        End If
    Next
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub

Таким образом, для одного и того же игрока я получаю разную длину струны: тот, кто правильно подрезан, а другой длиннее. Это я не понимаю.

А вот как я определяю длину столбцов и извлекаю имена.

Sub PieceOfCode

    If Left(Trim(cDataString), 4) = "Rang" Then      ‘Header row

        'Here we define the columns width and initiate data collection
        nScore = 0
        cTeamName = ""
        cTeam = ""
        cP1 = ""
        cP2 = ""
        nCol1 = InStr(cDataString, "Rang")
        nCol2 = InStr(cDataString, "Paire")
        nCol3 = InStr(cDataString, "Score")
        nCol4 = InStr(cDataString, "Nom")
        nCol5 = InStr(cDataString, "Equipe")
        nCol1Length = nCol2 - 1
        nCol2Length = nCol3 - nCol2
        nCol3Length = nCol4 - nCol3
        nCol4Length = nCol5 - nCol4
        nCol5Length = Len(cDataString) - nCol5 + 1

        'And further in the process...

        nScore = Val(Mid(Replace(cDataString, ",", "."), nCol3, nCol3Length))
        cNamesString = Mid(cDataString, nCol4, nCol5 - nCol4)
        nSplitTeamNamesPos = InStr(cNamesString, " - ")
        cP1 = Trim(Mid(cNamesString, 1, nSplitTeamNamesPos - 1))
        cP2 = Trim(Mid(cNamesString, nSplitTeamNamesPos + 3))

    End If

End Sub

Когда я строю сводную таблицу с этим, я получаю 2 записи для одного и того же игрока.

Вот код, который я должен создать сводную таблицу, я признаюсь, с помощью рекордера, но даже если бы поэтому я знал, как обрезать мою строку.

Sub CreatePivotTable()

    Dim nRowCount As Integer
    Dim cRowCount As String

    Sheets("Data").Select
    Range("A1").Select
    nRowCount = GetRowCount("Data")
    cRowCount = Trim(CStr(nRowCount))

    Range("A1:B" & cRowCount).Select

    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "Data!R1C1:R" & cRowCount & "C2", Version:=xlPivotTableVersion14).CreatePivotTable _
TableDestination:="TempPvt!R1C1", TableName:="PivotTable8", DefaultVersion _
    :=xlPivotTableVersion14

    Sheets("TempPvt").Select

    Cells(3, 1).Select
    With ActiveSheet.PivotTables("PivotTable8").PivotFields("Nom")
        .Orientation = xlRowField
        .Position = 1
    End With

    ActiveSheet.PivotTables("PivotTable8").AddDataField ActiveSheet.PivotTables( _
    "PivotTable8").PivotFields("Score"), "Total", xlSum
    ActiveSheet.PivotTables("PivotTable8").AddDataField ActiveSheet.PivotTables( _
    "PivotTable8").PivotFields("Score"), "Sum of Score2", xlSum
    ExecuteExcel4Macro _
    "PIVOT.FIELD.PROPERTIES(""PivotTable8"",""Sum of Score2"",""# Tours"",,4)"
    ActiveSheet.PivotTables("PivotTable8").AddDataField ActiveSheet.PivotTables( _
    "PivotTable8").PivotFields("Score"), "Sum of Score2", xlSum
    ExecuteExcel4Macro _
    "PIVOT.FIELD.PROPERTIES(""PivotTable8"",""Sum of Score2"",""Moyenne"",,8)"

End Sub

И, наконец, две строки с заголовком для тестирования (цель - BAPTISTE Claude).

Rang Paire Score Nom Equipe
302 1,83 Mme NIMSGERN Monique - Креститель Mme EMERIQUE

Rang Paire Score Nom Equipe
8 101 0,92 BAPTISTE Клод - мадам НИМСГЕРН Моник мадам ЭМЕРИК

Вот и все.

0 ответов

Другие вопросы по тегам